rack

24
INTRO TO RACK @revathskumar

Upload: revath-s-kumar

Post on 13-Jul-2015

83 views

Category:

Software


5 download

TRANSCRIPT

INTROTORACK

@revathskumar

ABOUTRubyist/JavaScripter

TeamMember/ /WorksatBlogatTwitter/Github-Google+:

Yeoman @keralarb @keralajs@whatznear

blog.revathskumar.com@revathskumar

+RevathSKumar

AMODULARRUBYWEBSERVERINTERFACE

BASICRACKAPPrequire'rack'

app=Proc.newdo|env|[200,{'Content-Type'=>'text/html'},['MyfirstRackapp']]end

Rack::Handler::WEBrick.runapp

MIDDLEWARESawaytofilterarequestandresponse

ANYRUBYOBJECTWHICHRESPONDSTOCALL

ANDRETURNARRAYOF3ELEMENTS

CALLACCEPTSENV

BASICMIDDLEWAREclassBasicMiddlewaredefinitializenext_in_chain@app=next_in_chainend

[email protected](env)endend

MIDDLEWARECANCALLEACHOTHERSTOCHAINACTIONS

SOORDERMATTERS

MIDDLEWARECHAINclassMwaredefinitializenext_in_chain@app=next_in_chainend

[email protected](env)endend

classMware1defcallenv[200,{'content-type'=>'text/html'},["HelloMware1"]]endend

app=Proc.newdo|env|Mware.new(Mware1.new).call(env)end

RACK::BUILDERIMPLEMENTSASMALLDSLTOITERATIVELYCONSTRUCT

RACKAPPLICATIONS.

require'rack'

app=Rack::Builder.newdouseRack::CommonLogger

runProc.newdo|env|[200,{'Content-Type'=>'text/html'},['Usingbuilder']]endend

Rack::Handler::WEBrick.runapp

app=Proc.new{|env|stack=[proc{|app|Mware.newapp},proc{|app|Mware1.newapp}]mware_obj=stack.reverse.inject(self){|prev,curr|

curr[prev]#curr.call(prev)}

mware_obj.call(env)}

ROUTESrequire'rack'

app=Rack::Builder.newdouseRack::CommonLogger

map'/index'dorunProc.newdo|env|[200,{'Content-Type'=>'text/html'},['Index']]endend

runProc.newdo|env|[200,{'Content-Type'=>'text/html'},['Root']]endend

Rack::Handler::WEBrick.runapp

NESTEDROUTESrequire'rack'

app=Rack::Builder.newdo#...map'/index'do#...map'/1'dorunProc.newdo|env|[200,{'Content-Type'=>'text/html'},['Index1']]endendend#...end

Rack::Handler::WEBrick.runapp

VIEWclassBasicdefinitializeapp@index=File.read("index.html")end

defcallenv[200,{'Content-Type'=>'text/html'},[@index]]endend

require'rack'

app=Rack::Builder.newdouseRack::CommonLogger

runBasic.newend

Rack::Handler::WEBrick.runapp

RENDERINGERBrequire"erb"

classBasicerbattr_reader:rendered_htmldefinitializename@name=name@template=File.read('./index.erb')end

defrenderERB.new(@template,0,"","@rendered_html").resultbindingselfend

defcallapp[200,{'Content-Type'=>'text/html'},[render.rendered_html]]endend

ERB:LAYOUT&VIEWdefinitializename@name=name@layout=File.read('./layout.erb')@template=File.read('./index.erb')end

defrendertemplates=[@template,@layout]@rendered_html=templates.inject(nil)do|prev,temp|_render(temp){prev}endselfend

def_rendertempERB.new(temp).result(binding)end

RACK::STATICServestaticfiles

require'rack'

builder=Rack::Builder.newdouseRack::CommonLoggeruseRack::Static,:urls=>['/bower_components/','/assets/'],root:'.'

end

Rack::Handler::WEBrick.runbuilder

RACKCONTRIBAcollectionofmiddlewares.

rack/rack-contrib

USINGRACKUP#config.rurunProc.newdo|env|[200,{'Content-Type'=>'text/html'},['MyfirstRackapp']]end

~$rackup

READCONFIG.RUORSUPPLIEDCONFIGFILECONVERTTOAINSTANCEOFRACK::BUILDER

config_file=File.read(config)rack_application=eval("Rack::Builder.new{#{config_file}}")

QUESTIONS?

RevathSKumarGithub/Twitter:@revathskumarblog.revathskumar.com