async_sinatra 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 936be7542ca92ea77fc6d33777319324e09c85be
4
- data.tar.gz: 84e9708650bcff0416f174b530dd8f46ca6742f2
3
+ metadata.gz: 88155191c2f2520c93ed812212df0467b9fade93
4
+ data.tar.gz: e24790e795892a895fd12dbfabae797066251337
5
5
  SHA512:
6
- metadata.gz: fbb3a889be58cb2d704fb7d7d2af1dbe44569ce23dc2ca0247c3aa9ebf0bf5a2a4cae1509bcd6159a4ae7b04d3706b1b5c2060f8f07940141ede44545affe6a1
7
- data.tar.gz: 61264687edd7200f62557c94692bad22f80ffb2984607ddd4e1937852dd405dbf74445782252c947a0e39fea047b3568ebf6bc13a5f49ce86fae707a5004f13c
6
+ metadata.gz: 0264d3896a5269259293fe49258b7c0cca738bdb715999077ad3c9de0570dd5ce6c87c947e0b789e08b58d7214cef2c4b45d338f62a09099b5cf356fc66f41b7
7
+ data.tar.gz: d3934e32a91a32d3ca4d94c1ffe64d6fc480da6a6193caf206c56faa346ae07c5a3ed70bcb68d0fdc8d140d437ef7cf627e15eee1639bbef501ffd4525b579e0
@@ -1,3 +1,8 @@
1
+ === 1.2.1 / 2016-01-16
2
+
3
+ * Fix a bug where in ahalt, the async.callback was called twice (boxofbrad)
4
+ * Improve testing support, allowing multiple requests (emschwar)
5
+
1
6
  === 1.2.0 / 2015-05-09
2
7
 
3
8
  * Added apatch, alink, aunlink for PATCH, LINK, UNLINK (thanks dalehamel)
@@ -7,5 +7,4 @@ examples/basic.ru
7
7
  lib/async_sinatra.rb
8
8
  lib/sinatra/async.rb
9
9
  lib/sinatra/async/test.rb
10
- test/gemloader.rb
11
10
  test/test_async.rb
data/Rakefile CHANGED
@@ -10,6 +10,7 @@ Hoe.spec 'async_sinatra' do
10
10
  extra_deps << %w[rack >=1.4.1]
11
11
  extra_deps << %w[sinatra >=1.3.2]
12
12
 
13
+ extra_dev_deps << %w(rack-test)
13
14
  extra_dev_deps << %w(hoe-doofus >=1.0)
14
15
  extra_dev_deps << %w(hoe-seattlerb >=1.2)
15
16
  extra_dev_deps << %w(hoe-git >=1.3)
@@ -2,5 +2,5 @@ require 'sinatra/async'
2
2
  # This is just a stub module for documentation and versioning. Please see
3
3
  # Sinatra::Async.
4
4
  module AsyncSinatra
5
- VERSION = '1.2.0'
5
+ VERSION = '1.2.1'
6
6
  end
@@ -87,7 +87,7 @@ module Sinatra #:nodoc:
87
87
  # Send the given body or block as the final response to the asynchronous
88
88
  # request.
89
89
  def body(value = nil)
90
- if @async_running && (value || block_given?)
90
+ if @async_running
91
91
  if block_given?
92
92
  super { async_handle_exception { yield } }
93
93
  else
@@ -100,8 +100,8 @@ module Sinatra #:nodoc:
100
100
 
101
101
  # Taken from Base#call
102
102
  unless @response['Content-Type']
103
- if Array === body and body[0].respond_to? :content_type
104
- content_type body[0].content_type
103
+ if Array === response.body and response.body[0].respond_to? :content_type
104
+ content_type response.body[0].content_type
105
105
  else
106
106
  content_type :html
107
107
  end
@@ -114,7 +114,7 @@ module Sinatra #:nodoc:
114
114
  result[-1] = [] if request.head?
115
115
 
116
116
  request.env['async.callback'][ result ]
117
- body
117
+ response.body
118
118
  else
119
119
  super
120
120
  end
@@ -187,8 +187,7 @@ module Sinatra #:nodoc:
187
187
  # the original call stack.
188
188
  def ahalt(*args)
189
189
  invoke { halt(*args) }
190
- invoke { error_block! response.status }
191
- body response.body
190
+ invoke { error_block! response.status } unless @env['sinatra.error']
192
191
  end
193
192
 
194
193
  # The given block will be executed if the user closes the connection
@@ -46,6 +46,10 @@ class Sinatra::Async::Test
46
46
  @after_request.each { |hook| hook.call }
47
47
  @last_response
48
48
  end
49
+
50
+ def reset_last_response
51
+ @last_response = nil
52
+ end
49
53
  end
50
54
 
51
55
  module Methods
@@ -54,6 +58,7 @@ class Sinatra::Async::Test
54
58
  %w(get put post delete head options).each do |m|
55
59
  eval <<-RUBY, binding, __FILE__, __LINE__ + 1
56
60
  def a#{m}(*args)
61
+ rack_mock_session.reset_last_response
57
62
  #{m}(*args)
58
63
  assert_async
59
64
  async_continue
@@ -1,15 +1,37 @@
1
- require 'gemloader'
2
1
  require 'minitest/autorun'
3
2
 
4
3
  require 'eventmachine'
5
4
 
6
5
  require "sinatra/async/test"
7
6
 
7
+ class CallbackCounter
8
+ @@count = 0
9
+
10
+ def self.count
11
+ @@count
12
+ end
13
+
14
+ def initialize(app)
15
+ @app = app
16
+ end
17
+
18
+ def call(env)
19
+ callback = env['async.callback']
20
+ env['async.callback'] = lambda do |response|
21
+ @@count += 1
22
+ callback.call(response)
23
+ end
24
+ @app.call(env)
25
+ end
26
+ end
27
+
8
28
  class TestSinatraAsync < MiniTest::Unit::TestCase
9
29
  include Sinatra::Async::Test::Methods
10
30
 
11
31
  class TestApp < Sinatra::Base
12
32
  set :environment, :test
33
+ set :call_count, 0
34
+
13
35
  register Sinatra::Async
14
36
 
15
37
  # Hack for storing some global data accessible in tests (normally you
@@ -94,7 +116,6 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
94
116
  body { 'other' }
95
117
  end
96
118
 
97
- set :call_count, 0
98
119
  aget '/double_body_bug/:subdomain' do |subdomain|
99
120
  body { settings.call_count += 1; '' }
100
121
  end
@@ -111,6 +132,10 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
111
132
  async_schedule { body { aparams[:a] } }
112
133
  end
113
134
 
135
+ aget '/halt-with-body' do
136
+ async_schedule { ahalt 404, 'halted' }
137
+ end
138
+
114
139
  # Defeat the test environment semantics, ensuring we actually follow the
115
140
  # non-test branch of async_schedule. You would normally just call
116
141
  # async_schedule in user apps, and use test helpers appropriately.
@@ -124,7 +149,10 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
124
149
  end
125
150
 
126
151
  def app
127
- TestApp.new
152
+ Rack::Builder.new do
153
+ use CallbackCounter
154
+ run TestApp.new
155
+ end.to_app
128
156
  end
129
157
 
130
158
  def assert_redirect(path)
@@ -282,4 +310,17 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
282
310
  assert_equal 'test', last_response.body
283
311
  end
284
312
 
313
+ def test_two_requests
314
+ aget '/hello'
315
+ assert last_response.ok?
316
+ aget '/302'
317
+ assert_equal 302, last_response.status
318
+ end
319
+
320
+ def test_bug_42_halt_with_body_should_only_call_callback_once
321
+ start = CallbackCounter.count
322
+ aget '/halt-with-body'
323
+ assert_equal 'halted', last_response.body
324
+ assert_equal start + 1, CallbackCounter.count
325
+ end
285
326
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async_sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - raggi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-09 00:00:00.000000000 Z
11
+ date: 2016-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.6'
47
+ version: '5.8'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.6'
54
+ version: '5.8'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rdoc
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: hoe-doofus
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '3.13'
159
+ version: '3.14'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '3.13'
166
+ version: '3.14'
153
167
  description: |-
154
168
  A Sinatra plugin to provide convenience whilst performing asynchronous
155
169
  responses inside of the Sinatra framework running under async webservers.
@@ -180,7 +194,6 @@ files:
180
194
  - lib/async_sinatra.rb
181
195
  - lib/sinatra/async.rb
182
196
  - lib/sinatra/async/test.rb
183
- - test/gemloader.rb
184
197
  - test/test_async.rb
185
198
  homepage: http://github.com/raggi/async_sinatra
186
199
  licenses:
@@ -204,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
217
  version: '0'
205
218
  requirements: []
206
219
  rubyforge_project:
207
- rubygems_version: 2.4.4
220
+ rubygems_version: 2.5.1
208
221
  signing_key:
209
222
  specification_version: 4
210
223
  summary: A Sinatra plugin to provide convenience whilst performing asynchronous responses
@@ -1,11 +0,0 @@
1
- require 'rubygems'
2
- begin
3
- project = File.basename(Dir['*.gemspec'].first, '.gemspec')
4
- gemspec = File.expand_path("#{project}.gemspec", Dir.pwd)
5
- spec = Gem::Specification.load(gemspec)
6
- (spec.dependencies + spec.development_dependencies).each do |dep|
7
- gem dep.name, dep.requirement.to_s
8
- end
9
- rescue
10
- warn "#{__FILE__}: Can't preload project dependencies: #{$!}"
11
- end