returning

This commit is contained in:
Blake Mizerany 2007-11-28 00:10:12 -08:00
parent 538567319f
commit 14c12df898
3 changed files with 55 additions and 11 deletions

View File

@ -78,9 +78,10 @@ module Sinatra
) )
returned = context.instance_eval(&result.block) returned = context.instance_eval(&result.block)
context.body ||= returned context.body ||= returned
context.body = String === context.body ? [*context.body] : context.body
context.finish context.finish
end end
end end
end end

View File

@ -35,15 +35,12 @@ context "Looking up a request" do
end end
context "An app returns" do
context "Calling an app" do
setup do setup do
@app = Sinatra::Application.new @app = Sinatra::Application.new
end end
# - 404 if no events found
specify "404 if no events found" do specify "404 if no events found" do
request = Rack::MockRequest.new(@app) request = Rack::MockRequest.new(@app)
result = request.get('/') result = request.get('/')
@ -62,7 +59,50 @@ context "Calling an app" do
result.body.should.equal 'Hello World' result.body.should.equal 'Hello World'
end end
specify "evaluates events in a clean context" do specify "an objects result from each if it has it" do
class TesterWithEach
def each
yield 'foo'
yield 'bar'
yield 'baz'
end
end
@app.define_event(:get, '/') do
TesterWithEach.new
end
request = Rack::MockRequest.new(@app)
result = request.get('/')
result.should.be.ok
result.body.should.equal 'foobarbaz'
end
specify "the body set if set before the last" do
@app.define_event(:get, '/') do
self.body = 'Blake'
'Mizerany'
end
request = Rack::MockRequest.new(@app)
result = request.get('/')
result.should.be.ok
result.body.should.equal 'Blake'
end
end
context "Events in an app" do
setup do
@app = Sinatra::Application.new
end
specify "evaluate in a clean context" do
Sinatra::EventContext.class_eval do Sinatra::EventContext.class_eval do
def foo def foo
'foo' 'foo'
@ -79,7 +119,7 @@ context "Calling an app" do
result.body.should.equal 'foo' result.body.should.equal 'foo'
end end
specify "gives the event access to request, response, and params" do specify "get access to request, response, and params" do
@app.define_event(:get, '/:foo') do @app.define_event(:get, '/:foo') do
params[:foo] + params[:bar] params[:foo] + params[:bar]
end end
@ -89,5 +129,7 @@ context "Calling an app" do
result.should.be.ok result.should.be.ok
result.body.should.equal 'foobaz' result.body.should.equal 'foobaz'
end end
end end

View File

@ -1,7 +1,8 @@
require File.dirname(__FILE__) + '/../lib/sinatra' require File.dirname(__FILE__) + '/../lib/sinatra'
require 'rubygems' require "rubygems"
require 'test/spec' require "test/spec"
require "mocha"
module Sinatra::TestHelper module Sinatra::TestHelper