ruote-amqp 2.1.5 → 2.2.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/{History.txt → CHANGELOG.txt} +18 -4
- data/CREDITS.txt +29 -0
- data/README.rdoc +6 -6
- data/Rakefile +101 -50
- data/TODO.txt +7 -3
- data/lib/ruote-amqp.rb +8 -3
- data/lib/ruote-amqp/launchitem_listener.rb +10 -76
- data/lib/ruote-amqp/participant.rb +154 -99
- data/lib/ruote-amqp/receiver.rb +147 -0
- data/lib/ruote-amqp/version.rb +6 -0
- data/lib/ruote-amqp/workitem_listener.rb +5 -77
- data/ruote-amqp.gemspec +24 -75
- data/spec/launchitem_listener_spec.rb +49 -11
- data/spec/participant_spec.rb +71 -50
- data/spec/receiver_spec.rb +126 -0
- data/spec/ruote_amqp_spec.rb +9 -3
- data/spec/spec_helper.rb +18 -18
- data/spec/support/ruote_helpers.rb +29 -0
- data/{lib/spec → spec/support}/ruote_matchers.rb +14 -9
- data/spec/workitem_listener_spec.rb +30 -15
- metadata +90 -64
- data/.gitignore +0 -6
- data/Manifest.txt +0 -24
- data/lib/spec/ruote.rb +0 -5
- data/lib/spec/ruote_example_group.rb +0 -8
- data/lib/spec/ruote_helpers.rb +0 -27
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/spec/spec.opts +0 -1
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
+
|
4
|
+
require 'ruote/participant'
|
5
|
+
|
6
|
+
|
7
|
+
describe RuoteAMQP::Receiver do
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
purge_engine
|
11
|
+
end
|
12
|
+
|
13
|
+
it "handles replies" do
|
14
|
+
|
15
|
+
pdef = Ruote.process_definition :name => 'test' do
|
16
|
+
set :field => 'foo', :value => 'foo'
|
17
|
+
sequence do
|
18
|
+
echo '${f:foo}'
|
19
|
+
amqp :queue => 'test3'
|
20
|
+
echo '${f:foo}'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
@engine.register_participant(:amqp, RuoteAMQP::ParticipantProxy)
|
25
|
+
|
26
|
+
RuoteAMQP::Receiver.new(@engine)
|
27
|
+
|
28
|
+
wfid = @engine.launch(pdef)
|
29
|
+
|
30
|
+
workitem = nil
|
31
|
+
|
32
|
+
begin
|
33
|
+
Timeout::timeout(5) do
|
34
|
+
|
35
|
+
MQ.queue('test3', :durable => true).subscribe { |msg|
|
36
|
+
wi = Ruote::Workitem.new(Rufus::Json.decode(msg))
|
37
|
+
workitem = wi if wi.wfid == wfid
|
38
|
+
}
|
39
|
+
|
40
|
+
loop do
|
41
|
+
break unless workitem.nil?
|
42
|
+
sleep 0.1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
rescue Timeout::Error
|
46
|
+
violated "Timeout waiting for message"
|
47
|
+
end
|
48
|
+
|
49
|
+
workitem.fields['foo'] = "bar"
|
50
|
+
|
51
|
+
MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
|
52
|
+
|
53
|
+
@engine.wait_for(wfid)
|
54
|
+
|
55
|
+
@engine.should_not have_errors
|
56
|
+
@engine.should_not have_remaining_expressions
|
57
|
+
|
58
|
+
@tracer.to_s.should == "foo\nbar"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "launches processes" do
|
62
|
+
|
63
|
+
json = {
|
64
|
+
'definition' => %{
|
65
|
+
Ruote.process_definition :name => 'test' do
|
66
|
+
sequence do
|
67
|
+
echo '${f:foo}'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
},
|
71
|
+
'fields' => { 'foo' => 'bar' }
|
72
|
+
}.to_json
|
73
|
+
|
74
|
+
RuoteAMQP::Receiver.new(@engine, :launchitems => true, :unsubscribe => true)
|
75
|
+
|
76
|
+
MQ.queue(
|
77
|
+
'ruote_workitems', :durable => true
|
78
|
+
).publish(
|
79
|
+
json, :persistent => true
|
80
|
+
)
|
81
|
+
|
82
|
+
sleep 0.5
|
83
|
+
|
84
|
+
@engine.should_not have_errors
|
85
|
+
@engine.should_not have_remaining_expressions
|
86
|
+
|
87
|
+
@tracer.to_s.should == 'bar'
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'accepts a custom :queue' do
|
91
|
+
|
92
|
+
#@engine.noisy = true
|
93
|
+
|
94
|
+
RuoteAMQP::Receiver.new(
|
95
|
+
@engine, :queue => 'mario', :launchitems => true, :unsubscribe => true)
|
96
|
+
|
97
|
+
@engine.register_participant 'alpha', Ruote::StorageParticipant
|
98
|
+
|
99
|
+
json = Rufus::Json.encode({
|
100
|
+
'definition' => "Ruote.define { alpha }"
|
101
|
+
})
|
102
|
+
|
103
|
+
MQ.queue(
|
104
|
+
'ruote_workitems', :durable => true
|
105
|
+
).publish(
|
106
|
+
json, :persistent => true
|
107
|
+
)
|
108
|
+
|
109
|
+
sleep 1
|
110
|
+
|
111
|
+
@engine.processes.size.should == 0
|
112
|
+
# nothing happened
|
113
|
+
|
114
|
+
MQ.queue(
|
115
|
+
'mario', :durable => true
|
116
|
+
).publish(
|
117
|
+
json, :persistent => true
|
118
|
+
)
|
119
|
+
|
120
|
+
sleep 1
|
121
|
+
|
122
|
+
@engine.processes.size.should == 1
|
123
|
+
# launch happened
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
data/spec/ruote_amqp_spec.rb
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
+
|
2
4
|
|
3
5
|
describe RuoteAMQP do
|
4
|
-
|
6
|
+
|
7
|
+
it "uses persistent messages by default" do
|
8
|
+
|
5
9
|
RuoteAMQP.use_persistent_messages?.should be_true
|
6
10
|
end
|
7
11
|
|
8
|
-
it "
|
12
|
+
it "allows switching to transient messages" do
|
13
|
+
|
9
14
|
RuoteAMQP.use_persistent_messages = false
|
10
15
|
RuoteAMQP.use_persistent_messages?.should be_false
|
11
16
|
end
|
12
17
|
end
|
18
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
|
+
|
1
2
|
require 'rubygems'
|
2
|
-
|
3
|
-
require 'spec'
|
3
|
+
require 'rspec'
|
4
4
|
|
5
|
-
$:.unshift(File.dirname(__FILE__)
|
6
|
-
$:.unshift('
|
5
|
+
$:.unshift(File.join(File.dirname(__FILE__), '../lib'))
|
6
|
+
$:.unshift(File.join(File.dirname(__FILE__), '../../ruote/lib'))
|
7
7
|
|
8
|
-
#
|
9
|
-
# http://github.com/kennethkalmer/amqp.git
|
10
|
-
gem 'amqp', '=0.6.6'
|
8
|
+
#gem 'amqp', '=0.6.7'
|
11
9
|
|
12
10
|
require 'fileutils'
|
13
11
|
require 'json'
|
12
|
+
require 'timeout'
|
14
13
|
|
15
14
|
require 'ruote/engine'
|
16
15
|
require 'ruote/worker'
|
@@ -18,7 +17,10 @@ require 'ruote/storage/hash_storage'
|
|
18
17
|
require 'ruote/log/test_logger'
|
19
18
|
|
20
19
|
require 'ruote-amqp'
|
21
|
-
|
20
|
+
|
21
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |path|
|
22
|
+
require(path)
|
23
|
+
}
|
22
24
|
|
23
25
|
|
24
26
|
# AMQP magic worked here
|
@@ -29,9 +31,9 @@ AMQP.settings[:pass] = 'ruote'
|
|
29
31
|
|
30
32
|
#AMQP.logging = true
|
31
33
|
|
32
|
-
|
34
|
+
RSpec.configure do |config|
|
33
35
|
|
34
|
-
config.include(
|
36
|
+
config.include(RuoteSpecHelpers)
|
35
37
|
|
36
38
|
config.before(:each) do
|
37
39
|
@tracer = Tracer.new
|
@@ -39,12 +41,9 @@ Spec::Runner.configure do |config|
|
|
39
41
|
@engine = Ruote::Engine.new(
|
40
42
|
Ruote::Worker.new(
|
41
43
|
Ruote::HashStorage.new(
|
42
|
-
's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ]
|
43
|
-
)
|
44
|
-
)
|
45
|
-
)
|
44
|
+
's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
|
46
45
|
|
47
|
-
@engine.add_service(
|
46
|
+
@engine.add_service('tracer', @tracer)
|
48
47
|
end
|
49
48
|
|
50
49
|
config.after(:each) do
|
@@ -53,9 +52,9 @@ Spec::Runner.configure do |config|
|
|
53
52
|
end
|
54
53
|
|
55
54
|
config.after(:all) do
|
56
|
-
base = File.expand_path(
|
57
|
-
FileUtils.rm_rf(
|
58
|
-
FileUtils.rm_rf(
|
55
|
+
base = File.expand_path(File.dirname(__FILE__) + '/..')
|
56
|
+
FileUtils.rm_rf(base + '/logs')
|
57
|
+
FileUtils.rm_rf(base + '/work')
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
@@ -77,3 +76,4 @@ class Tracer
|
|
77
76
|
@trace << "#{s}\n"
|
78
77
|
end
|
79
78
|
end
|
79
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module RuoteSpecHelpers
|
3
|
+
|
4
|
+
def purge_engine
|
5
|
+
|
6
|
+
# TODO : adapt to ruote 2.1.10
|
7
|
+
end
|
8
|
+
|
9
|
+
def run_definition(pdef)
|
10
|
+
|
11
|
+
wfid = @engine.launch(pdef)
|
12
|
+
|
13
|
+
#r = @engine.wait_for(wfid)
|
14
|
+
#@engine.wait_for(wfid) if r['action'] == 'ceased'
|
15
|
+
# # make sure to wait for 'terminated'
|
16
|
+
@engine.wait_for(:inactive)
|
17
|
+
|
18
|
+
@engine.should_not have_errors
|
19
|
+
@engine.should_not have_remaining_expressions
|
20
|
+
|
21
|
+
purge_engine
|
22
|
+
end
|
23
|
+
|
24
|
+
def noisy(on = true)
|
25
|
+
|
26
|
+
@engine.context.logger.noisy = on
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
RSpec::Matchers.define :have_errors do |*args|
|
3
3
|
|
4
4
|
match do |engine|
|
5
5
|
|
6
6
|
@ps = if wfid = args.shift
|
7
|
-
engine.processes(
|
7
|
+
engine.processes(wfid)
|
8
8
|
else
|
9
9
|
engine.processes.first
|
10
10
|
end
|
@@ -13,21 +13,21 @@ Spec::Matchers.define :have_errors do |*args|
|
|
13
13
|
end
|
14
14
|
|
15
15
|
failure_message_for_should do |engine|
|
16
|
+
|
16
17
|
"Expected engine to have errors, but didn't"
|
17
18
|
end
|
19
|
+
|
18
20
|
failure_message_for_should_not do |engine|
|
21
|
+
|
19
22
|
"Expected the engine to not have errors, but it did.\n" +
|
20
|
-
@ps.errors.map { |e|
|
21
|
-
" * error: #{e.error_class} #{e.error_message} " +
|
22
|
-
"\n\"#{e.error_backtrace.join("\n")}\""
|
23
|
-
}.join("\n")
|
23
|
+
@ps.errors.map { |e| " * error: #{e.message}\n\"#{e.trace}\"" }.join("\n")
|
24
24
|
end
|
25
|
+
|
25
26
|
description do
|
26
|
-
#
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
RSpec::Matchers.define :have_remaining_expressions do
|
31
31
|
|
32
32
|
match do |engine|
|
33
33
|
|
@@ -35,11 +35,16 @@ Spec::Matchers.define :have_remaining_expressions do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
failure_message_for_should do |engine|
|
38
|
+
|
38
39
|
"Expected engine to have processes remaining, but it didn't"
|
39
40
|
end
|
41
|
+
|
40
42
|
failure_message_for_should_not do |engine|
|
41
|
-
|
43
|
+
|
44
|
+
"Expected engine to have no processes remaining, but it did." +
|
45
|
+
"#{engine.storage.get_many('expressions').inspect}"
|
42
46
|
end
|
47
|
+
|
43
48
|
description do
|
44
49
|
end
|
45
50
|
end
|
@@ -1,31 +1,49 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
|
+
|
4
|
+
#
|
5
|
+
# NOTE : RuoteAMQP::WorkitemListener has been depreacted in favour of
|
6
|
+
# RuoteAMQP::Receiver
|
7
|
+
#
|
8
|
+
|
2
9
|
|
3
10
|
describe RuoteAMQP::WorkitemListener do
|
4
11
|
|
5
|
-
|
12
|
+
after(:each) do
|
13
|
+
purge_engine
|
14
|
+
end
|
15
|
+
|
16
|
+
it "handles replies" do
|
6
17
|
|
7
18
|
pdef = Ruote.process_definition :name => 'test' do
|
8
19
|
set :field => 'foo', :value => 'foo'
|
9
20
|
sequence do
|
10
21
|
echo '${f:foo}'
|
11
|
-
amqp :queue => '
|
22
|
+
amqp :queue => 'test7'
|
12
23
|
echo '${f:foo}'
|
13
24
|
end
|
14
25
|
end
|
15
26
|
|
16
|
-
@engine.register_participant(
|
27
|
+
@engine.register_participant(:amqp, RuoteAMQP::ParticipantProxy)
|
17
28
|
|
18
|
-
RuoteAMQP::WorkitemListener.new(
|
29
|
+
RuoteAMQP::WorkitemListener.new(@engine, :unsubscribe => true)
|
19
30
|
|
20
|
-
|
31
|
+
#@engine.noisy = true
|
32
|
+
|
33
|
+
wfid = @engine.launch(pdef)
|
34
|
+
|
35
|
+
workitem = nil
|
21
36
|
|
22
37
|
begin
|
23
38
|
Timeout::timeout(5) do
|
24
|
-
|
25
|
-
MQ.queue('
|
39
|
+
|
40
|
+
MQ.queue('test7', :durable => true).subscribe { |msg|
|
41
|
+
wi = Ruote::Workitem.new(Rufus::Json.decode(msg))
|
42
|
+
workitem = wi if wi.wfid == wfid
|
43
|
+
}
|
26
44
|
|
27
45
|
loop do
|
28
|
-
break unless
|
46
|
+
break unless workitem.nil?
|
29
47
|
sleep 0.1
|
30
48
|
end
|
31
49
|
end
|
@@ -33,19 +51,16 @@ describe RuoteAMQP::WorkitemListener do
|
|
33
51
|
violated "Timeout waiting for message"
|
34
52
|
end
|
35
53
|
|
36
|
-
|
37
|
-
wi.fields['foo'] = "bar"
|
54
|
+
workitem.fields['foo'] = 'bar'
|
38
55
|
|
39
|
-
MQ.queue(
|
56
|
+
MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
|
40
57
|
|
41
|
-
@engine.
|
58
|
+
@engine.wait_for(wfid)
|
42
59
|
|
43
60
|
@engine.should_not have_errors
|
44
61
|
@engine.should_not have_remaining_expressions
|
45
62
|
|
46
63
|
@tracer.to_s.should == "foo\nbar"
|
47
|
-
|
48
|
-
purge_engine
|
49
64
|
end
|
50
65
|
end
|
51
66
|
|
metadata
CHANGED
@@ -1,126 +1,152 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruote-amqp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 7
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 2.2.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
|
-
-
|
13
|
+
- Kenneth Kalmer
|
14
|
+
- John Mettraux
|
8
15
|
autorequire:
|
9
16
|
bindir: bin
|
10
17
|
cert_chain: []
|
11
18
|
|
12
|
-
date:
|
19
|
+
date: 2011-03-01 00:00:00 +09:00
|
13
20
|
default_executable:
|
14
21
|
dependencies:
|
15
22
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
name: amqp
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
20
27
|
requirements:
|
21
|
-
- - "
|
28
|
+
- - "="
|
22
29
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
-
|
26
|
-
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
- 7
|
34
|
+
- 0
|
35
|
+
version: 0.7.0
|
27
36
|
type: :runtime
|
28
|
-
|
29
|
-
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: ruote
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
30
43
|
requirements:
|
31
44
|
- - ">="
|
32
45
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
|
35
|
-
-
|
36
|
-
|
46
|
+
hash: 7
|
47
|
+
segments:
|
48
|
+
- 2
|
49
|
+
- 2
|
50
|
+
- 0
|
51
|
+
version: 2.2.0
|
37
52
|
type: :runtime
|
38
|
-
|
39
|
-
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: rake
|
56
|
+
prerelease: false
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
40
59
|
requirements:
|
41
60
|
- - ">="
|
42
61
|
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id003
|
45
68
|
- !ruby/object:Gem::Dependency
|
46
69
|
name: rspec
|
47
|
-
|
48
|
-
|
49
|
-
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
50
73
|
requirements:
|
51
74
|
- - ">="
|
52
75
|
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
76
|
+
hash: 5
|
77
|
+
segments:
|
78
|
+
- 2
|
79
|
+
- 2
|
80
|
+
- 1
|
81
|
+
version: 2.2.1
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
84
|
+
description: "\n\
|
85
|
+
AMQP participant/listener pair for ruote 2.1\n "
|
86
|
+
email:
|
87
|
+
- kenneth.kalmer@gmail.com
|
88
|
+
- jmettraux@gmail.com
|
57
89
|
executables: []
|
58
90
|
|
59
91
|
extensions: []
|
60
92
|
|
61
|
-
extra_rdoc_files:
|
62
|
-
|
63
|
-
- Manifest.txt
|
64
|
-
- PostInstall.txt
|
65
|
-
- README.rdoc
|
66
|
-
- TODO.txt
|
93
|
+
extra_rdoc_files: []
|
94
|
+
|
67
95
|
files:
|
68
|
-
- .gitignore
|
69
|
-
- History.txt
|
70
|
-
- Manifest.txt
|
71
|
-
- PostInstall.txt
|
72
|
-
- README.rdoc
|
73
96
|
- Rakefile
|
74
|
-
- TODO.txt
|
75
|
-
- lib/ruote-amqp.rb
|
76
97
|
- lib/ruote-amqp/launchitem_listener.rb
|
77
98
|
- lib/ruote-amqp/participant.rb
|
99
|
+
- lib/ruote-amqp/receiver.rb
|
100
|
+
- lib/ruote-amqp/version.rb
|
78
101
|
- lib/ruote-amqp/workitem_listener.rb
|
79
|
-
- lib/
|
80
|
-
- lib/spec/ruote_example_group.rb
|
81
|
-
- lib/spec/ruote_helpers.rb
|
82
|
-
- lib/spec/ruote_matchers.rb
|
83
|
-
- ruote-amqp.gemspec
|
84
|
-
- script/console
|
85
|
-
- script/destroy
|
86
|
-
- script/generate
|
102
|
+
- lib/ruote-amqp.rb
|
87
103
|
- spec/launchitem_listener_spec.rb
|
88
104
|
- spec/participant_spec.rb
|
105
|
+
- spec/receiver_spec.rb
|
89
106
|
- spec/ruote_amqp_spec.rb
|
90
|
-
- spec/spec.opts
|
91
107
|
- spec/spec_helper.rb
|
108
|
+
- spec/support/ruote_helpers.rb
|
109
|
+
- spec/support/ruote_matchers.rb
|
92
110
|
- spec/workitem_listener_spec.rb
|
111
|
+
- ruote-amqp.gemspec
|
112
|
+
- CHANGELOG.txt
|
113
|
+
- CREDITS.txt
|
114
|
+
- PostInstall.txt
|
115
|
+
- TODO.txt
|
116
|
+
- README.rdoc
|
93
117
|
has_rdoc: true
|
94
|
-
homepage: http://
|
118
|
+
homepage: http://ruote.rubyforge.org
|
95
119
|
licenses: []
|
96
120
|
|
97
121
|
post_install_message:
|
98
|
-
rdoc_options:
|
99
|
-
|
122
|
+
rdoc_options: []
|
123
|
+
|
100
124
|
require_paths:
|
101
125
|
- lib
|
102
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
103
128
|
requirements:
|
104
129
|
- - ">="
|
105
130
|
- !ruby/object:Gem::Version
|
131
|
+
hash: 3
|
132
|
+
segments:
|
133
|
+
- 0
|
106
134
|
version: "0"
|
107
|
-
version:
|
108
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
109
137
|
requirements:
|
110
138
|
- - ">="
|
111
139
|
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
112
143
|
version: "0"
|
113
|
-
version:
|
114
144
|
requirements: []
|
115
145
|
|
116
|
-
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
146
|
+
rubyforge_project: ruote
|
147
|
+
rubygems_version: 1.5.0
|
118
148
|
signing_key:
|
119
149
|
specification_version: 3
|
120
150
|
summary: AMQP participant/listener pair for ruote 2.1
|
121
|
-
test_files:
|
122
|
-
|
123
|
-
- spec/participant_spec.rb
|
124
|
-
- spec/ruote_amqp_spec.rb
|
125
|
-
- spec/spec_helper.rb
|
126
|
-
- spec/workitem_listener_spec.rb
|
151
|
+
test_files: []
|
152
|
+
|