22
# app_test.rb
class ApplicationTest < Minitest::Test
include Rack::Test::Methods
def app
Application.new
end
# ...
end
Slide 23
Slide 23 text
23
# app_test.rb
class ApplicationTest < Minitest::Test
include Rack::Test::Methods
def app
Application.new
end
# ...
end
Slide 24
Slide 24 text
24
# app_test.rb
class ApplicationTest < Minitest::Test
include Rack::Test::Methods
def app
Application.new
end
# ...
end
Slide 25
Slide 25 text
25
# app_test.rb
class ApplicationTest < Minitest::Test
def test_its_good_enough
get "/"
assert last_response.ok?
assert_equal "Good enough",
last_response.body
end
end
Slide 26
Slide 26 text
26
# app_test.rb
class ApplicationTest < Minitest::Test
def test_its_good_enough
get "/"
assert last_response.ok?
assert_equal "Good enough",
last_response.body
end
end
Slide 27
Slide 27 text
27
# app_test.rb
class ApplicationTest < Minitest::Test
def test_its_good_enough
get "/"
assert last_response.ok?
assert_equal "Good enough",
last_response.body
end
end
Slide 28
Slide 28 text
Think About
The
Environment!
28
Slide 29
Slide 29 text
29
# config.ru
class Application
def call(env)
[200, {}, ["Good enough"]]
end
end
run Application.new
Slide 30
Slide 30 text
30
# config.ru
class Application
def call(env)
[200, {}, ["Good enough"]]
end
end
run Application.new
35
# config.ru
class Application
def call(env)
if env["PATH_INFO"] == "/bot"
[403, {}, ["Beep beep intruder"]]
else
[200, {}, ["Good enough"]]
end
end
end
Slide 36
Slide 36 text
36
# config.ru
class Application
def call(env)
if env["PATH_INFO"] == "/bot"
[403, {}, ["Beep beep intruder"]]
else
[200, {}, ["Good enough"]]
end
end
end
Slide 37
Slide 37 text
Routing
37
Slide 38
Slide 38 text
38
Frameworks help!
Slide 39
Slide 39 text
39
# config.ru
class Status
def call(env)
# ...
end
end
map "/status" do run Status.new end
map "/" do run Application.new end
Slide 40
Slide 40 text
40
# config.ru
class Status
def call(env)
# ...
end
end
map "/status" do run Status.new end
map "/" do run Application.new end
Slide 41
Slide 41 text
41
# config.ru
class Status
def call(env)
# ...
end
end
run Rack::URLMap.new(
"/status" => Status.new,
"/" => Application.new
)
Slide 42
Slide 42 text
Rack::Request
42
Slide 43
Slide 43 text
43
# app.rb
class Application
def call(env)
request = Rack::Request.new(env)
if request.path_info == "/bot"
[403, {}, ["Beep intruder"]]
else
[200, {}, ["Good enough"]]
end
end
end
Slide 44
Slide 44 text
44
# app.rb
class Application
def call(env)
request = Rack::Request.new(env)
if request.path_info.match %r{/bot/(\d+)}
[403, {}, ["Beep intruder on #{$1}"]]
else
[200, {}, ["Good enough"]]
end
end
end
Slide 45
Slide 45 text
45
Isn't there an easier
way!?
Slide 46
Slide 46 text
46
Frameworks help!
Slide 47
Slide 47 text
47
# app.rb
class Application
def call(env)
request = Rack::Request.new(env)
if request.path_info.match %r{/bot/(\d+)}
bot = Database.find($1)
[200, {}, [bot.to_s]]
else # ...
end
end
end