@@ -33,7 +33,7 @@ Install Rack
3333$ gem install rack
3434```
3535
36- Create Application
36+ Create folder for application
3737
3838``` bash
3939$ mkdir racker
@@ -120,9 +120,9 @@ Rack::Builder - https://github.com/rack/rack/blob/master/lib/rack/builder.rb
120120
121121Each middleware is responsible of calling the next.
122122
123- lib /custom_header.rb <!-- .element: class="filename" -->
123+ middlewares /custom_header.rb <!-- .element: class="filename" -->
124124``` ruby
125- module Rack
125+ module Middlewares
126126 class CustomHeader
127127 def initialize (app )
128128 @app = app
141141
142142--
143143
144- lib /welcome.rb <!-- .element: class="filename" -->
144+ middlewares /welcome.rb <!-- .element: class="filename" -->
145145``` ruby
146- module Rack
146+ module Middlewares
147147 class Welcome
148148 def initialize (app )
149149 @app = app
@@ -167,12 +167,12 @@ end
167167config.ru <!-- .element: class="filename" -->
168168
169169``` ruby
170- require ' ./lib /custom_header'
171- require ' ./lib /welcome'
170+ require ' ./middlewares /custom_header'
171+ require ' ./middlewares /welcome'
172172
173173app = Rack ::Builder .new do
174- use Rack ::Welcome
175- use Rack ::CustomHeader
174+ use Middlewares ::Welcome
175+ use Middlewares ::CustomHeader
176176 run proc { |env | [200 , { ' Content-Type' => ' text/plain' }, [' Hello!' ]] }
177177end
178178
@@ -215,7 +215,7 @@ We use Rack::Response! Yay!
215215config.ru <!-- .element: class="filename" -->
216216
217217``` ruby
218- require ' ./lib /racker'
218+ require ' ./middlewares /racker'
219219run Racker .new
220220```
221221
@@ -224,16 +224,18 @@ lib/racker.rb <!-- .element: class="filename" -->
224224``` ruby
225225require ' erb'
226226
227- class Racker
228- def call (env )
229- Rack ::Response .new (render(' index.html.erb' ))
230- end
227+ module Middlewares
228+ class Racker
229+ def call (env )
230+ Rack ::Response .new (render(' index.html.erb' ))
231+ end
231232
232- private
233+ private
233234
234- def render (template )
235- path = File .expand_path(" ../views/#{ template } " , __FILE__ )
236- ERB .new (File .read(path)).result(binding )
235+ def render (template )
236+ path = File .expand_path(" ../views/#{ template } " , __FILE__ )
237+ ERB .new (File .read(path)).result(binding )
238+ end
237239 end
238240end
239241```
@@ -280,29 +282,31 @@ $ curl http://localhost:9292
280282
281283# Request
282284
283- lib /racker.rb <!-- .element: class="filename" -->
285+ middlewares /racker.rb <!-- .element: class="filename" -->
284286
285287``` ruby
286288require ' erb'
287289
288- class Racker
289- def call (env )
290- request = Rack ::Request .new (env)
291- case request.path
292- when ' /' then respond(render(' index.html.erb' ))
293- else respond(' Not Found' , 404 )
290+ module Middlewares
291+ class Racker
292+ def call (env )
293+ request = Rack ::Request .new (env)
294+ case request.path
295+ when ' /' then respond(render(' index.html.erb' ))
296+ else respond(' Not Found' , 404 )
297+ end
294298 end
295- end
296299
297- private
300+ private
298301
299- def render (template )
300- path = File .expand_path(" ../views/#{ template } " , __FILE__ )
301- ERB .new (File .read(path)).result(binding )
302- end
302+ def render (template )
303+ path = File .expand_path(" ../views/#{ template } " , __FILE__ )
304+ ERB .new (File .read(path)).result(binding )
305+ end
303306
304- def respond (* args )
305- Rack ::Response .new (* args).finish
307+ def respond (* args )
308+ Rack ::Response .new (* args).finish
309+ end
306310 end
307311end
308312```
@@ -340,45 +344,47 @@ Not Found
340344config.ru <!-- .element: class="filename" -->
341345
342346``` ruby
343- require ' ./lib /racker'
344- run Racker
347+ require ' ./middlewares /racker'
348+ run Middlewares :: Racker
345349```
346350
347351--
348352
349- lib /racker.rb <!-- .element: class="filename" -->
353+ middlewares /racker.rb <!-- .element: class="filename" -->
350354
351355``` ruby
352356require ' erb'
353357
354- class Racker
355- def self .call (env )
356- new (env).response.finish
357- end
358+ module Middlewares
359+ class Racker
360+ def self .call (env )
361+ new (env).response.finish
362+ end
358363
359- def initialize (env )
360- @request = Rack ::Request .new (env)
361- end
364+ def initialize (env )
365+ @request = Rack ::Request .new (env)
366+ end
362367
363- def response
364- case @request .path
365- when ' /' then Rack ::Response .new (render(' index.html.erb' ))
366- when ' /update_word'
367- Rack ::Response .new do |response |
368- response.set_cookie(' word' , @request .params[' word' ])
369- response.redirect(' /' )
368+ def response
369+ case @request .path
370+ when ' /' then Rack ::Response .new (render(' index.html.erb' ))
371+ when ' /update_word'
372+ Rack ::Response .new do |response |
373+ response.set_cookie(' word' , @request .params[' word' ])
374+ response.redirect(' /' )
375+ end
376+ else Rack ::Response .new (' Not Found' , 404 )
370377 end
371- else Rack ::Response .new (' Not Found' , 404 )
372378 end
373- end
374379
375- def render (template )
376- path = File .expand_path(" ../views/#{ template } " , __FILE__ )
377- ERB .new (File .read(path)).result(binding )
378- end
380+ def render (template )
381+ path = File .expand_path(" ../views/#{ template } " , __FILE__ )
382+ ERB .new (File .read(path)).result(binding )
383+ end
379384
380- def word
381- @request .cookies[' word' ] || ' Nothing'
385+ def word
386+ @request .cookies[' word' ] || ' Nothing'
387+ end
382388 end
383389end
384390```
@@ -430,10 +436,10 @@ Go to http://localhost:9292
430436
431437config.ru <!-- .element: class="filename" -->
432438``` ruby
433- require ' ./lib /racker'
439+ require ' ./middlewares /racker'
434440
435441use Rack ::Static , urls: [' /stylesheets' ], root: ' public'
436- run Racker
442+ run Middlewares :: Racker
437443```
438444
439445--
@@ -529,11 +535,11 @@ For such reason, it's recommended to use `Rack::Reloader` middleware
529535config.ru <!-- .element: class="filename" -->
530536``` ruby
531537
532- require_relative ' ./lib /racker'
538+ require_relative ' ./middlewares /racker'
533539
534540use Rack ::Reloader
535541use Rack ::Static , :urls => [' /assets' ], :root => ' public'
536- run Racker
542+ run Middlewares :: Racker
537543
538544```
539545
@@ -560,42 +566,44 @@ use Rack::Session::Cookie, :key => 'rack.session',
560566 :expire_after => 2592000 ,
561567 :secret => ' change_me' ,
562568 :old_secret => ' also_change_me'
563- run Racker
569+ run Middlewares :: Racker
564570```
565571
566572--
567573
568574### Using Rack Sessions
569575
570- lib /racker.rb <!-- .element: class="filename" -->
576+ middlewares /racker.rb <!-- .element: class="filename" -->
571577``` ruby
572- class Racker
573- def self .call (env )
574- new (env).response.finish
575- end
578+ module Middlewares
579+ class Racker
580+ def self .call (env )
581+ new (env).response.finish
582+ end
576583
577- def initialize (env )
578- @request = Rack ::Request .new (env)
579- end
584+ def initialize (env )
585+ @request = Rack ::Request .new (env)
586+ end
580587
581- def response
582- case @request .path
583- when ' /'
584- return Rack ::Response .new (" My name is #{ @request .session[:name ]} " , 200 ) if session_present?
585- Rack ::Response .new { |response | response.redirect(" /endpoint_where_session_starts" ) }
586- when ' /endpoint_where_session_starts'
587- Rack ::Response .new do |response |
588- @request .session[:name ] = ' John Doe' unless session_present?
589- response.redirect(' /' )
590- end
591- else Rack ::Response .new (' Not Found' , 404 )
588+ def response
589+ case @request .path
590+ when ' /'
591+ return Rack ::Response .new (" My name is #{ @request .session[:name ]} " , 200 ) if session_present?
592+ Rack ::Response .new { |response | response.redirect(" /endpoint_where_session_starts" ) }
593+ when ' /endpoint_where_session_starts'
594+ Rack ::Response .new do |response |
595+ @request .session[:name ] = ' John Doe' unless session_present?
596+ response.redirect(' /' )
597+ end
598+ else Rack ::Response .new (' Not Found' , 404 )
599+ end
592600 end
593- end
594601
595- private
602+ private
596603
597- def session_present?
598- @request .session.key?(:name )
604+ def session_present?
605+ @request .session.key?(:name )
606+ end
599607 end
600608end
601609```
@@ -613,58 +621,6 @@ require_relative 'config/environment'
613621run Rails .application
614622```
615623
616- --
617-
618- config/environment.rb <!-- .element: class="filename" -->
619- ``` ruby
620- # Load the Rails application.
621- require_relative ' application'
622-
623- # Initialize the Rails application.
624- Rails .application.initialize!
625- ```
626-
627- --
628-
629- config/application.rb <!-- .element: class="filename" -->
630- ``` ruby
631- require File .expand_path(' ../boot' , __FILE__ )
632-
633- require ' rails/all'
634-
635- # Require the gems listed in Gemfile, including any gems
636- # you've limited to :test, :development, or :production.
637- Bundler .require(* Rails .groups)
638-
639- module TestRailsRack
640- class Application < Rails ::Application
641- # Settings in config/environments/* take precedence over those specified here.
642- # Application configuration should go into files in config/initializers
643- # -- all .rb files in that directory are automatically loaded.
644-
645- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
646- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
647- # config.time_zone = 'Central Time (US & Canada)'
648-
649- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
650- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
651- # config.i18n.default_locale = :de
652- end
653- end
654- ```
655-
656- --
657-
658- config/boot.rb <!-- .element: class="filename" -->
659- ``` ruby
660- # Set up gems listed in the Gemfile.
661- ENV [' BUNDLE_GEMFILE' ] ||= File .expand_path(' ../../Gemfile' , __FILE__ )
662-
663- require ' bundler/setup' if File .exist?(ENV [' BUNDLE_GEMFILE' ])
664- ```
665-
666- ---
667-
668624## Rails rack middleware
669625
670626``` bash
0 commit comments