invoke results with a block; not the body

This commit is contained in:
Blake Mizerany 2007-11-27 22:31:31 -08:00
parent 18d3c8714f
commit 03b080973b
3 changed files with 17 additions and 18 deletions

View File

@ -3,7 +3,7 @@ require 'rack'
module Sinatra
Result = Struct.new(:body, :params)
Result = Struct.new(:block, :params)
class Event
@ -26,7 +26,7 @@ module Sinatra
def invoke(env)
return unless pattern =~ env['PATH_INFO'].squeeze('/')
params = param_keys.zip($~.captures.map(&:from_param)).to_hash
Result.new(block.call, params)
Result.new(block, params)
end
end

View File

@ -1,15 +1,14 @@
require File.dirname(__FILE__) + '/helper'
context "Simple Events" do
context "Looking up a request" do
setup do
@app = Sinatra::Application.new
end
specify "return what's at the end" do
@app.define_event(:get, '/') do
'Hello'
end
specify "returns what's at the end" do
block = Proc.new { 'Hello' }
@app.define_event(:get, '/', &block)
result = @app.lookup(
'REQUEST_METHOD' => 'GET',
@ -17,13 +16,12 @@ context "Simple Events" do
)
result.should.not.be.nil
result.body.should.equal 'Hello'
result.block.should.be block
end
specify "takes params in path" do
@app.define_event(:get, '/:foo') do
'World'
end
block = Proc.new { 'Hello' }
@app.define_event(:get, '/:foo', &block)
result = @app.lookup(
'REQUEST_METHOD' => 'GET',
@ -31,8 +29,8 @@ context "Simple Events" do
)
result.should.not.be.nil
result.body.should.equal 'World'
result.block.should.be block
result.params.should.equal :foo => 'bar'
end
end

View File

@ -12,15 +12,16 @@ context "Simple Events" do
}
end
def invoke_simple(path, request_path)
event = Sinatra::Event.new(path) { 'Simple' }
def invoke_simple(path, request_path, &b)
event = Sinatra::Event.new(path, &b)
event.invoke(simple_request_hash(:get, request_path))
end
specify "return last value" do
result = invoke_simple('/', '/')
block = Proc.new { 'Simple' }
result = invoke_simple('/', '/', &block)
result.should.not.be.nil
result.body.should.equal 'Simple'
result.block.should.be block
result.params.should.equal Hash.new
end
@ -39,5 +40,5 @@ context "Simple Events" do
result = invoke_simple('/x/y', '/x//y')
result.should.not.be.nil
end
end