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.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

@@ -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)
@@ -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"
@@ -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
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