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.
@@ -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
+
@@ -1,12 +1,18 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+
2
4
 
3
5
  describe RuoteAMQP do
4
- it "should use persistent messages by default" do
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 "should allow switching to transient messages" do
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
- gem 'rspec'
3
- require 'spec'
3
+ require 'rspec'
4
4
 
5
- $:.unshift(File.dirname(__FILE__) + '/../lib')
6
- $:.unshift('../ruote/lib')
5
+ $:.unshift(File.join(File.dirname(__FILE__), '../lib'))
6
+ $:.unshift(File.join(File.dirname(__FILE__), '../../ruote/lib'))
7
7
 
8
- # For the tests to work you need to use the AMQP gem built from
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
- require 'spec/ruote'
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
- Spec::Runner.configure do |config|
34
+ RSpec.configure do |config|
33
35
 
34
- config.include( RuoteSpecHelpers )
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( 'tracer', @tracer )
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( File.dirname(__FILE__) + '/..' )
57
- FileUtils.rm_rf( base + '/logs' )
58
- FileUtils.rm_rf( base + '/work' )
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
- Spec::Matchers.define :have_errors do |*args|
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( wfid )
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
- Spec::Matchers.define :have_remaining_expressions do
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
- "Expected engine to have no processes remaining, but it did.#{engine.storage.get_many('expressions').inspect}"
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
- require File.dirname(__FILE__) + '/spec_helper'
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
- it "should handle replies" do
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 => 'test3'
22
+ amqp :queue => 'test7'
12
23
  echo '${f:foo}'
13
24
  end
14
25
  end
15
26
 
16
- @engine.register_participant( :amqp, RuoteAMQP::Participant )
27
+ @engine.register_participant(:amqp, RuoteAMQP::ParticipantProxy)
17
28
 
18
- RuoteAMQP::WorkitemListener.new( @engine )
29
+ RuoteAMQP::WorkitemListener.new(@engine, :unsubscribe => true)
19
30
 
20
- fei = @engine.launch pdef
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
- @msg = nil
25
- MQ.queue('test3').subscribe { |msg| @msg = msg }
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 @msg.nil?
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
- wi = Ruote::Workitem.new( Rufus::Json.decode( @msg ) )
37
- wi.fields['foo'] = "bar"
54
+ workitem.fields['foo'] = 'bar'
38
55
 
39
- MQ.queue( wi.fields['params']['reply_queue'] ).publish( Rufus::Json.encode( wi.to_h ) )
56
+ MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
40
57
 
41
- @engine.context.logger.wait_for( fei )
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
- version: 2.1.5
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
- - kenneth.kalmer@gmail.com
13
+ - Kenneth Kalmer
14
+ - John Mettraux
8
15
  autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2010-02-04 00:00:00 +02:00
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: rufus-json
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
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
- version: 0.1.0
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: amqp
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ - 7
34
+ - 0
35
+ version: 0.7.0
27
36
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
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
- version: 0.6.6
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: ruote
46
+ hash: 7
47
+ segments:
48
+ - 2
49
+ - 2
50
+ - 0
51
+ version: 2.2.0
37
52
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
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
- version: 2.1.5
44
- version:
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
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
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
- version: "0"
54
- version:
55
- description:
56
- email: kenneth.kalmer@gmail.com
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
- - History.txt
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/spec/ruote.rb
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://github.com/kennethkalmer/ruote-amqp
118
+ homepage: http://ruote.rubyforge.org
95
119
  licenses: []
96
120
 
97
121
  post_install_message:
98
- rdoc_options:
99
- - --charset=UTF-8
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.3.5
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
- - spec/launchitem_listener_spec.rb
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
+