async_sinatra 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +8 -0
- data/Rakefile +2 -2
- data/lib/async_sinatra.rb +1 -1
- data/lib/sinatra/async.rb +44 -8
- data/lib/sinatra/async/test.rb +12 -1
- data/test/test_async.rb +59 -0
- metadata +135 -204
- data.tar.gz.sig +0 -3
- metadata.gz.sig +0 -0
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.0.0 / 2012-02-20
|
2
|
+
|
3
|
+
* Fixed basic usage of #params inside route blocks.
|
4
|
+
* Introduced #aparams for use inside of asynchronous actions in place of #params
|
5
|
+
* Bumped the rack and sinatra dependencies. Yes, this might be rails
|
6
|
+
incompatible. Make your async apps standalone, it'll save you anyway.
|
7
|
+
* Various minor bug fixes
|
8
|
+
|
1
9
|
=== 0.5.0 / 2011-03-08
|
2
10
|
|
3
11
|
* Fix support for conditional routes!
|
data/Rakefile
CHANGED
@@ -6,8 +6,8 @@ Hoe.plugin :doofus, :git, :minitest, :gemspec2, :rubyforge
|
|
6
6
|
Hoe.spec 'async_sinatra' do
|
7
7
|
developer 'raggi', 'raggi@rubyforge.org'
|
8
8
|
|
9
|
-
extra_deps << %w[rack >=1.
|
10
|
-
extra_deps << %w[sinatra >=1.
|
9
|
+
extra_deps << %w[rack >=1.4.1]
|
10
|
+
extra_deps << %w[sinatra >=1.3.2]
|
11
11
|
|
12
12
|
extra_dev_deps << %w(hoe-doofus >=1.0)
|
13
13
|
extra_dev_deps << %w(hoe-seattlerb >=1.2)
|
data/lib/async_sinatra.rb
CHANGED
data/lib/sinatra/async.rb
CHANGED
@@ -71,17 +71,43 @@ module Sinatra #:nodoc:
|
|
71
71
|
end
|
72
72
|
|
73
73
|
module Helpers
|
74
|
+
# aparams are used when inside of something that has been scheduled
|
75
|
+
# asynchronously in an asynchronous route. Essentially it is the last
|
76
|
+
# parameters to be set by the router (for example, containing the route
|
77
|
+
# captures).
|
78
|
+
attr_reader :aparams
|
79
|
+
|
74
80
|
# Send the given body or block as the final response to the asynchronous
|
75
81
|
# request.
|
76
|
-
def body(
|
77
|
-
if @async_running
|
78
|
-
block_given?
|
82
|
+
def body(value = nil)
|
83
|
+
if @async_running && (value || block_given?)
|
84
|
+
if block_given?
|
85
|
+
super { async_handle_exception { yield } }
|
86
|
+
else
|
87
|
+
super
|
88
|
+
end
|
89
|
+
|
79
90
|
if response.body.respond_to?(:call)
|
80
91
|
response.body = Array(async_handle_exception {response.body.call})
|
81
92
|
end
|
82
|
-
|
83
|
-
|
84
|
-
]
|
93
|
+
|
94
|
+
# Taken from Base#call
|
95
|
+
unless @response['Content-Type']
|
96
|
+
if Array === body and body[0].respond_to? :content_type
|
97
|
+
content_type body[0].content_type
|
98
|
+
else
|
99
|
+
content_type :html
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
result = response.finish
|
104
|
+
|
105
|
+
# We don't get the HEAD middleware, so just do something convenient
|
106
|
+
# here.
|
107
|
+
result[-1] = [] if request.head?
|
108
|
+
|
109
|
+
request.env['async.callback'][ result ]
|
110
|
+
body
|
85
111
|
else
|
86
112
|
super
|
87
113
|
end
|
@@ -111,8 +137,17 @@ module Sinatra #:nodoc:
|
|
111
137
|
throw :async
|
112
138
|
end
|
113
139
|
|
114
|
-
def async_runner(
|
115
|
-
|
140
|
+
def async_runner(meth, *bargs)
|
141
|
+
@aparams = @params.dup
|
142
|
+
async_schedule do
|
143
|
+
begin
|
144
|
+
original, @params = @params, @aparams
|
145
|
+
method(meth).arity == 0 ? send(meth) : send(meth, *bargs)
|
146
|
+
ensure
|
147
|
+
@params = original
|
148
|
+
end
|
149
|
+
nil
|
150
|
+
end
|
116
151
|
end
|
117
152
|
|
118
153
|
def async_catch_execute(&b)
|
@@ -135,6 +170,7 @@ module Sinatra #:nodoc:
|
|
135
170
|
response.status = s
|
136
171
|
response.headers.replace(h)
|
137
172
|
response.body = b
|
173
|
+
body(response.body)
|
138
174
|
else
|
139
175
|
body(handle_exception!(boom))
|
140
176
|
end
|
data/lib/sinatra/async/test.rb
CHANGED
@@ -78,11 +78,22 @@ class Sinatra::Async::Test
|
|
78
78
|
# Executes the pending asynchronous blocks, required for the
|
79
79
|
# aget/apost/etc blocks to run.
|
80
80
|
def async_continue
|
81
|
-
while b =
|
81
|
+
while b = settings.async_schedules.shift
|
82
82
|
b.call
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
def settings
|
87
|
+
# This hack exists because sinatra is now returning a proper rack stack.
|
88
|
+
# We might need to consider alternative approaches in future.
|
89
|
+
app = app()
|
90
|
+
until app.nil? || app.is_a?(Sinatra::Base)
|
91
|
+
app = app.instance_variable_get(:@app)
|
92
|
+
end
|
93
|
+
raise "Cannot determine sinatra application from #{app()}" unless app
|
94
|
+
app.settings
|
95
|
+
end
|
96
|
+
|
86
97
|
# Crank the eventmachine loop until a response is made, or timeout after a
|
87
98
|
# particular period, by default 10s. If the timeout is nil, no timeout
|
88
99
|
# will occur.
|
data/test/test_async.rb
CHANGED
@@ -26,6 +26,10 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
|
|
26
26
|
body { 'hello async' }
|
27
27
|
end
|
28
28
|
|
29
|
+
aget '/world' do
|
30
|
+
body 'world'
|
31
|
+
end
|
32
|
+
|
29
33
|
aget '/em' do
|
30
34
|
EM.add_timer(0.001) { body { 'em' }; EM.stop }
|
31
35
|
end
|
@@ -90,6 +94,23 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
|
|
90
94
|
body { 'other' }
|
91
95
|
end
|
92
96
|
|
97
|
+
set :call_count, 0
|
98
|
+
aget '/double_body_bug/:subdomain' do |subdomain|
|
99
|
+
body { settings.call_count += 1; '' }
|
100
|
+
end
|
101
|
+
|
102
|
+
aget '/param/:a' do |ma|
|
103
|
+
body { ma }
|
104
|
+
end
|
105
|
+
|
106
|
+
aget '/params/:a' do
|
107
|
+
body { params[:a] }
|
108
|
+
end
|
109
|
+
|
110
|
+
aget '/params/deferred/:a' do
|
111
|
+
async_schedule { body { aparams[:a] } }
|
112
|
+
end
|
113
|
+
|
93
114
|
# Defeat the test environment semantics, ensuring we actually follow the
|
94
115
|
# non-test branch of async_schedule. You would normally just call
|
95
116
|
# async_schedule in user apps, and use test helpers appropriately.
|
@@ -223,4 +244,42 @@ class TestSinatraAsync < MiniTest::Unit::TestCase
|
|
223
244
|
aget '/agents'
|
224
245
|
assert_equal 'firefox', last_response.body
|
225
246
|
end
|
247
|
+
|
248
|
+
def test_basic_async_head
|
249
|
+
head '/hello'
|
250
|
+
assert_async
|
251
|
+
async_continue
|
252
|
+
assert last_response.ok?
|
253
|
+
assert_equal '', last_response.body
|
254
|
+
assert_equal "11", last_response.headers['Content-Length']
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_string_body
|
258
|
+
get '/world'
|
259
|
+
assert_async
|
260
|
+
async_continue
|
261
|
+
assert last_response.ok?
|
262
|
+
assert_equal 'world', last_response.body
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_double_body_bug
|
266
|
+
aget '/double_body_bug/example'
|
267
|
+
assert_equal 1, settings.call_count
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_block_with_no_args
|
271
|
+
aget '/params/test'
|
272
|
+
assert_equal 'test', last_response.body
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_block_with_an_arg
|
276
|
+
aget '/param/test'
|
277
|
+
assert_equal 'test', last_response.body
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_params_deferred
|
281
|
+
aget '/params/deferred/test'
|
282
|
+
assert_equal 'test', last_response.body
|
283
|
+
end
|
284
|
+
|
226
285
|
end
|
metadata
CHANGED
@@ -1,236 +1,175 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: async_sinatra
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 0
|
10
|
-
version: 0.5.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- raggi
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
|
-
cert_chain:
|
17
|
-
-
|
18
|
-
|
19
|
-
|
20
|
-
aTEZMBcGCgmSJomT8ixkARkWCXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29y
|
21
|
-
ZzAeFw0xMDEyMjIyMDIyMzlaFw0xMTEyMjIyMDIyMzlaMEAxDjAMBgNVBAMMBXJh
|
22
|
-
Z2dpMRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYKCZImiZPyLGQBGRYD
|
23
|
-
b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvgeVrJxLGm2PgcrM
|
24
|
-
DoB5mgQVC8PMYzpzJ64+75DQ1BgHa6wIeAuRphLY9qQh+sTTvKbUHtdgkWGghRVf
|
25
|
-
GaRVmtFlDHRt6RHWBmxXhXmcywT6c1xeni+eC7p56/zSkZ2RFHaZ4BXC4+8lO56j
|
26
|
-
sAh7c+YTcY1xd7teRX6g98aIep4MLxQlbEY+DcdDvtCIAswUYNVY+Nw08goIEw5Q
|
27
|
-
Sjm4fjrFPBT0T6RsmkcI4ea78h993nrWPdIndgVniwBc/SxGuBUGrfm637yCXNwL
|
28
|
-
FUzVd0qsJcIeMhXS8ZTii04oWKcK+G2B7KZ8/+olu7TwJu5mom9ORRMlflrTxJxi
|
29
|
-
rd4TBQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
|
30
|
-
2QvD5zSSmpVqxaJSYrFbamIWCn0wDQYJKoZIhvcNAQEFBQADggEBAHwCkRkMjr/h
|
31
|
-
oYjGvs3BdEDuEYvzpKgWr6xv0hjsklBZ096dOjm0tLNSdplpn5MALUw3Cqtgp1KK
|
32
|
-
EKEZgEi9fbhhyzhkQyoociuqLQQ0daZuigh2CESrznX1b8AawCLyB2bJ9blNylPi
|
33
|
-
GWGaAjsqPBtAP6LoQib2aS0YuK7kVWxUTlupQ2D3Af5ag6NY8pS/etpS4IMVQU5l
|
34
|
-
v9ctVo17bHsWM3sjLW3Lj6xzYheYo0r9YAMOLXz7c92JwDQahDN95W4rUTj68rAQ
|
35
|
-
dHaj98YtwM8tjKyJsxZSeZEn+4wEtwTHuqU7v/HaK7OX+eIb090ZsV5ii5YpD/Fh
|
36
|
-
WjgTOJft4S4=
|
37
|
-
-----END CERTIFICATE-----
|
38
|
-
|
39
|
-
date: 2011-03-08 00:00:00 -08:00
|
40
|
-
default_executable:
|
41
|
-
dependencies:
|
42
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
43
15
|
name: rack
|
44
|
-
|
45
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70275016993560 !ruby/object:Gem::Requirement
|
46
17
|
none: false
|
47
|
-
requirements:
|
48
|
-
- -
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
|
51
|
-
segments:
|
52
|
-
- 1
|
53
|
-
- 2
|
54
|
-
- 1
|
55
|
-
version: 1.2.1
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.4.1
|
56
22
|
type: :runtime
|
57
|
-
version_requirements: *id001
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: sinatra
|
60
23
|
prerelease: false
|
61
|
-
|
24
|
+
version_requirements: *70275016993560
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sinatra
|
27
|
+
requirement: &70275016992740 !ruby/object:Gem::Requirement
|
62
28
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
segments:
|
68
|
-
- 1
|
69
|
-
- 0
|
70
|
-
version: "1.0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.3.2
|
71
33
|
type: :runtime
|
72
|
-
version_requirements: *id002
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: minitest
|
75
34
|
prerelease: false
|
76
|
-
|
35
|
+
version_requirements: *70275016992740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: minitest
|
38
|
+
requirement: &70275016991820 !ruby/object:Gem::Requirement
|
77
39
|
none: false
|
78
|
-
requirements:
|
79
|
-
- -
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
segments:
|
83
|
-
- 2
|
84
|
-
- 0
|
85
|
-
- 2
|
86
|
-
version: 2.0.2
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.5.1
|
87
44
|
type: :development
|
88
|
-
version_requirements: *id003
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: rubyforge
|
91
45
|
prerelease: false
|
92
|
-
|
46
|
+
version_requirements: *70275016991820
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rubyforge
|
49
|
+
requirement: &70275016990980 !ruby/object:Gem::Requirement
|
93
50
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
hash: 7
|
98
|
-
segments:
|
99
|
-
- 2
|
100
|
-
- 0
|
101
|
-
- 4
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
102
54
|
version: 2.0.4
|
103
55
|
type: :development
|
104
|
-
version_requirements: *id004
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: hoe-doofus
|
107
56
|
prerelease: false
|
108
|
-
|
57
|
+
version_requirements: *70275016990980
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: hoe-doofus
|
60
|
+
requirement: &70275016990220 !ruby/object:Gem::Requirement
|
109
61
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
segments:
|
115
|
-
- 1
|
116
|
-
- 0
|
117
|
-
version: "1.0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '1.0'
|
118
66
|
type: :development
|
119
|
-
version_requirements: *id005
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: hoe-seattlerb
|
122
67
|
prerelease: false
|
123
|
-
|
68
|
+
version_requirements: *70275016990220
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: hoe-seattlerb
|
71
|
+
requirement: &70275016989440 !ruby/object:Gem::Requirement
|
124
72
|
none: false
|
125
|
-
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
|
129
|
-
segments:
|
130
|
-
- 1
|
131
|
-
- 2
|
132
|
-
version: "1.2"
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.2'
|
133
77
|
type: :development
|
134
|
-
version_requirements: *id006
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
|
-
name: hoe-git
|
137
78
|
prerelease: false
|
138
|
-
|
79
|
+
version_requirements: *70275016989440
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: hoe-git
|
82
|
+
requirement: &70275016988560 !ruby/object:Gem::Requirement
|
139
83
|
none: false
|
140
|
-
requirements:
|
141
|
-
- -
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
|
144
|
-
segments:
|
145
|
-
- 1
|
146
|
-
- 3
|
147
|
-
version: "1.3"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.3'
|
148
88
|
type: :development
|
149
|
-
version_requirements: *id007
|
150
|
-
- !ruby/object:Gem::Dependency
|
151
|
-
name: hoe-gemspec2
|
152
89
|
prerelease: false
|
153
|
-
|
90
|
+
version_requirements: *70275016988560
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: hoe-gemspec2
|
93
|
+
requirement: &70275016987460 !ruby/object:Gem::Requirement
|
154
94
|
none: false
|
155
|
-
requirements:
|
156
|
-
- -
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
|
159
|
-
segments:
|
160
|
-
- 1
|
161
|
-
- 0
|
162
|
-
version: "1.0"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '1.0'
|
163
99
|
type: :development
|
164
|
-
version_requirements: *id008
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: rdoc
|
167
100
|
prerelease: false
|
168
|
-
|
101
|
+
version_requirements: *70275016987460
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rdoc
|
104
|
+
requirement: &70275017002960 !ruby/object:Gem::Requirement
|
169
105
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
|
174
|
-
segments:
|
175
|
-
- 0
|
176
|
-
version: "0"
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
177
110
|
type: :development
|
178
|
-
version_requirements: *id009
|
179
|
-
- !ruby/object:Gem::Dependency
|
180
|
-
name: eventmachine
|
181
111
|
prerelease: false
|
182
|
-
|
112
|
+
version_requirements: *70275017002960
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: eventmachine
|
115
|
+
requirement: &70275017001380 !ruby/object:Gem::Requirement
|
183
116
|
none: false
|
184
|
-
requirements:
|
185
|
-
- -
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
hash: 57
|
188
|
-
segments:
|
189
|
-
- 0
|
190
|
-
- 12
|
191
|
-
- 11
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
192
120
|
version: 0.12.11
|
193
121
|
type: :development
|
194
|
-
version_requirements: *id010
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: hoe
|
197
122
|
prerelease: false
|
198
|
-
|
123
|
+
version_requirements: *70275017001380
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rdoc
|
126
|
+
requirement: &70275016999680 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ~>
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.10'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70275016999680
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: hoe
|
137
|
+
requirement: &70275016998740 !ruby/object:Gem::Requirement
|
199
138
|
none: false
|
200
|
-
requirements:
|
201
|
-
- -
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
|
204
|
-
segments:
|
205
|
-
- 2
|
206
|
-
- 9
|
207
|
-
- 1
|
208
|
-
version: 2.9.1
|
139
|
+
requirements:
|
140
|
+
- - ~>
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '2.13'
|
209
143
|
type: :development
|
210
|
-
|
211
|
-
|
212
|
-
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *70275016998740
|
146
|
+
description: ! 'A Sinatra plugin to provide convenience whilst performing asynchronous
|
147
|
+
|
213
148
|
responses inside of the Sinatra framework running under async webservers.
|
214
|
-
|
149
|
+
|
150
|
+
|
215
151
|
To properly utilise this package, some knowledge of EventMachine and/or
|
152
|
+
|
216
153
|
asynchronous patterns is recommended.
|
217
|
-
|
154
|
+
|
155
|
+
|
218
156
|
Currently, supporting servers include:
|
219
|
-
|
157
|
+
|
158
|
+
|
220
159
|
* Thin
|
160
|
+
|
221
161
|
* Rainbows
|
222
|
-
|
223
|
-
|
162
|
+
|
163
|
+
* Zbatery'
|
164
|
+
email:
|
224
165
|
- raggi@rubyforge.org
|
225
166
|
executables: []
|
226
|
-
|
227
167
|
extensions: []
|
228
|
-
|
229
|
-
extra_rdoc_files:
|
168
|
+
extra_rdoc_files:
|
230
169
|
- Manifest.txt
|
231
170
|
- CHANGELOG.rdoc
|
232
171
|
- README.rdoc
|
233
|
-
files:
|
172
|
+
files:
|
234
173
|
- .gemtest
|
235
174
|
- CHANGELOG.rdoc
|
236
175
|
- Manifest.txt
|
@@ -242,40 +181,32 @@ files:
|
|
242
181
|
- lib/sinatra/async/test.rb
|
243
182
|
- test/gemloader.rb
|
244
183
|
- test/test_async.rb
|
245
|
-
has_rdoc: true
|
246
184
|
homepage: http://github.com/raggi/async_sinatra
|
247
185
|
licenses: []
|
248
|
-
|
249
186
|
post_install_message:
|
250
|
-
rdoc_options:
|
187
|
+
rdoc_options:
|
251
188
|
- --main
|
252
189
|
- README.rdoc
|
253
|
-
require_paths:
|
190
|
+
require_paths:
|
254
191
|
- lib
|
255
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
256
193
|
none: false
|
257
|
-
requirements:
|
258
|
-
- -
|
259
|
-
- !ruby/object:Gem::Version
|
260
|
-
|
261
|
-
|
262
|
-
- 0
|
263
|
-
version: "0"
|
264
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
265
199
|
none: false
|
266
|
-
requirements:
|
267
|
-
- -
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
|
270
|
-
segments:
|
271
|
-
- 0
|
272
|
-
version: "0"
|
200
|
+
requirements:
|
201
|
+
- - ! '>='
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0'
|
273
204
|
requirements: []
|
274
|
-
|
275
205
|
rubyforge_project: libraggi
|
276
|
-
rubygems_version: 1.
|
206
|
+
rubygems_version: 1.8.17
|
277
207
|
signing_key:
|
278
208
|
specification_version: 3
|
279
|
-
summary: A Sinatra plugin to provide convenience whilst performing asynchronous responses
|
280
|
-
|
209
|
+
summary: A Sinatra plugin to provide convenience whilst performing asynchronous responses
|
210
|
+
inside of the Sinatra framework running under async webservers
|
211
|
+
test_files:
|
281
212
|
- test/test_async.rb
|
data.tar.gz.sig
DELETED
metadata.gz.sig
DELETED
Binary file
|