Skip to content

Commit a48008f

Browse files
Actualize rack slides (#237)
1 parent 6727ef4 commit a48008f

File tree

1 file changed

+94
-138
lines changed

1 file changed

+94
-138
lines changed

slides/rack.markdown

Lines changed: 94 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -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

121121
Each 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
@@ -141,9 +141,9 @@ end
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
167167
config.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

173173
app = 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!']] }
177177
end
178178

@@ -215,7 +215,7 @@ We use Rack::Response! Yay!
215215
config.ru <!-- .element: class="filename" -->
216216

217217
```ruby
218-
require './lib/racker'
218+
require './middlewares/racker'
219219
run Racker.new
220220
```
221221

@@ -224,16 +224,18 @@ lib/racker.rb <!-- .element: class="filename" -->
224224
```ruby
225225
require '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
238240
end
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
286288
require '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
307311
end
308312
```
@@ -340,45 +344,47 @@ Not Found
340344
config.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
352356
require '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
383389
end
384390
```
@@ -430,10 +436,10 @@ Go to http://localhost:9292
430436

431437
config.ru <!-- .element: class="filename" -->
432438
```ruby
433-
require './lib/racker'
439+
require './middlewares/racker'
434440

435441
use 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
529535
config.ru <!-- .element: class="filename" -->
530536
```ruby
531537

532-
require_relative './lib/racker'
538+
require_relative './middlewares/racker'
533539

534540
use Rack::Reloader
535541
use 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
600608
end
601609
```
@@ -613,58 +621,6 @@ require_relative 'config/environment'
613621
run 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

Comments
 (0)