capybarbecue 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/capybarbecue/server.rb +10 -1
- data/lib/capybarbecue/version.rb +1 -1
- data/spec/capybarbecue/server_spec.rb +15 -5
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27de67f89e44f79597616f0b196c84d0632e724f
|
4
|
+
data.tar.gz: bc371c0201a52e2cc887df403aa0bd3a9b8d9e39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 290b2dff533e72f579b90a256ed111d167620da15a9a624df3c33bb5996699aea4b6a4ec85cfb0a59c96c4a32d5687523ad9b9fe20b5dc993cc59d4cc958a2a5
|
7
|
+
data.tar.gz: 328e5dc4f01996ff18c791b585a4cc3024c6ece748dc40b13fea459c250edd6acea0bb1c95f3fe9f8b98e0e8013333603e981797c5fc5abb9dab3bf4f7c9be4a
|
data/lib/capybarbecue/server.rb
CHANGED
@@ -14,6 +14,7 @@ module Capybarbecue
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def call(env)
|
17
|
+
env.update({"rack.multithread" => false, "rack.multiprocess" => false, "rack.run_once" => false})
|
17
18
|
queue_and_wait(env)
|
18
19
|
end
|
19
20
|
|
@@ -38,19 +39,27 @@ module Capybarbecue
|
|
38
39
|
request = QueuedRequest.new(env)
|
39
40
|
@requestmq.enq(request)
|
40
41
|
return unless wait_for_response
|
42
|
+
wait_for request
|
43
|
+
check_exception_for request
|
44
|
+
request.response
|
45
|
+
end
|
46
|
+
|
47
|
+
def wait_for(request)
|
41
48
|
started_at = Time.now
|
42
49
|
while !request.ready? && Time.now - started_at < timeout.seconds
|
43
50
|
# It feels dangerous not to sleep here... keep a pulse on this (sleep causes performance problems)
|
44
51
|
Thread.pass
|
45
52
|
end
|
46
53
|
raise Timeout::Error.new('Timeout expired before response received') unless request.ready?
|
54
|
+
end
|
55
|
+
|
56
|
+
def check_exception_for(request)
|
47
57
|
if request.exception.present?
|
48
58
|
# Add the backtrace from this thread to make it useful
|
49
59
|
backtrace = request.exception.backtrace + Kernel.caller
|
50
60
|
request.exception.set_backtrace(backtrace)
|
51
61
|
raise request.exception
|
52
62
|
end
|
53
|
-
request.response
|
54
63
|
end
|
55
64
|
|
56
65
|
class QueuedRequest
|
data/lib/capybarbecue/version.rb
CHANGED
@@ -11,8 +11,8 @@ describe Capybarbecue::Server do
|
|
11
11
|
describe '#handle_requests' do
|
12
12
|
before{ subject.wait_for_response = false }
|
13
13
|
it 'responds to all queued requests' do
|
14
|
-
request1 =
|
15
|
-
request2 =
|
14
|
+
request1 = {}
|
15
|
+
request2 = {}
|
16
16
|
mock(app).call(request1)
|
17
17
|
mock(app).call(request2)
|
18
18
|
subject.call(request1)
|
@@ -23,7 +23,7 @@ describe Capybarbecue::Server do
|
|
23
23
|
let(:body){ Rack::BodyProxy.new('body') }
|
24
24
|
before do
|
25
25
|
stub(app).call { [200, {}, body] }
|
26
|
-
subject.call(
|
26
|
+
subject.call({})
|
27
27
|
end
|
28
28
|
it 'closes the BodyProxy' do
|
29
29
|
mock(body).close
|
@@ -32,6 +32,15 @@ describe Capybarbecue::Server do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
describe '#call' do
|
35
|
+
it 'sets some env properties' do
|
36
|
+
stub(subject).queue_and_wait
|
37
|
+
env = {}
|
38
|
+
subject.call(env)
|
39
|
+
env.keys.should match_array %w{rack.multithread rack.multiprocess rack.run_once}
|
40
|
+
env['rack.multithread'].should be_false
|
41
|
+
env['rack.multiprocess'].should be_false
|
42
|
+
env['rack.run_once'].should be_false
|
43
|
+
end
|
35
44
|
context 'when another thread handles the request' do
|
36
45
|
before do
|
37
46
|
stub(app).call.with_any_args { |arg| arg }
|
@@ -46,7 +55,8 @@ describe Capybarbecue::Server do
|
|
46
55
|
end
|
47
56
|
after { thread.kill }
|
48
57
|
it 'gives the response' do
|
49
|
-
|
58
|
+
env = {}
|
59
|
+
expect(subject.call(env)).to be env
|
50
60
|
end
|
51
61
|
context 'when there is an exception' do
|
52
62
|
before do
|
@@ -60,7 +70,7 @@ describe Capybarbecue::Server do
|
|
60
70
|
context 'when the timeout expires' do
|
61
71
|
before{ subject.timeout = 0.01 }
|
62
72
|
it 'raises an exception' do
|
63
|
-
expect{ subject.call(
|
73
|
+
expect{ subject.call({}) }.to raise_error Timeout::Error
|
64
74
|
end
|
65
75
|
end
|
66
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybarbecue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew DiMichele
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: Makes fundamental changes to Capybara's threading architecture so you
|
126
140
|
can write stable tests with a shared database connection.
|
127
141
|
email: backflip@gmail.com
|