sinatra-sinatra 0.9.0.1 → 0.9.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/sinatra/base.rb CHANGED
@@ -4,7 +4,7 @@ require 'rack'
4
4
  require 'rack/builder'
5
5
 
6
6
  module Sinatra
7
- VERSION = '0.9.0.1'
7
+ VERSION = '0.9.0.2'
8
8
 
9
9
  class Request < Rack::Request
10
10
  def user_agent
@@ -328,7 +328,11 @@ module Sinatra
328
328
 
329
329
  private
330
330
  def dispatch!
331
- self.class.filters.each { |block| invoke(block) }
331
+ self.class.filters.each do |block|
332
+ res = catch(:halt) { instance_eval(&block) ; :continue }
333
+ return unless res == :continue
334
+ end
335
+
332
336
  if routes = self.class.routes[@request.request_method]
333
337
  path = @request.path_info
334
338
  original_params = nested_params(@request.params)
@@ -408,6 +412,7 @@ module Sinatra
408
412
  when (100...599) === res
409
413
  @response.status = res
410
414
  end
415
+
411
416
  res
412
417
  end
413
418
 
@@ -522,7 +527,7 @@ module Sinatra
522
527
  end
523
528
 
524
529
  def before(&block)
525
- @filters << lambda { instance_eval(&block) ; nil }
530
+ @filters << block
526
531
  end
527
532
 
528
533
  def condition(&block)
data/sinatra.gemspec CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
 
5
5
  s.name = 'sinatra'
6
- s.version = '0.9.0.1'
6
+ s.version = '0.9.0.2'
7
7
  s.date = '2009-01-18'
8
8
 
9
9
  s.description = "Classy web-development dressed in a DSL"
data/test/filter_test.rb CHANGED
@@ -33,15 +33,30 @@ describe "Filters" do
33
33
  assert_equal 'bar', body
34
34
  end
35
35
 
36
+ it "can modify instance variables available to routes" do
37
+ mock_app {
38
+ before { @foo = 'bar' }
39
+ get('/foo') { @foo }
40
+ }
41
+
42
+ get '/foo'
43
+ assert ok?
44
+ assert_equal 'bar', body
45
+ end
46
+
36
47
  it "allows redirects in filters" do
37
48
  mock_app {
38
49
  before { redirect '/bar' }
39
- get('/foo') { 'ORLY?!' }
50
+ get('/foo') do
51
+ fail 'before block should have halted processing'
52
+ 'ORLY?!'
53
+ end
40
54
  }
41
55
 
42
56
  get '/foo'
43
57
  assert redirect?
44
58
  assert_equal '/bar', response['Location']
59
+ assert_equal '', body
45
60
  end
46
61
 
47
62
  it "does not modify the response with its return value" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.1
4
+ version: 0.9.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Mizerany