ruote-stomp 2.2.0.b → 2.2.0.c

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.txt CHANGED
@@ -8,3 +8,4 @@
8
8
 
9
9
 
10
10
 
11
+
data/CREDITS.txt CHANGED
@@ -6,6 +6,7 @@
6
6
  == AUTHORS
7
7
 
8
8
  * Kit Plummer - http://kitplummer.github.com
9
+ * Brian Sam-Bodden = http://bsbodden.github.com
9
10
 
10
11
  == AUTHORS (from ruote-amqp)
11
12
 
data/README.rdoc CHANGED
@@ -17,7 +17,7 @@ http://ruote.rubyforge.org/part_implementations.html
17
17
  * Flexible participant for sending workitems
18
18
  * Flexible receiver for receiving replies
19
19
  * Flexible launch item listener for launching processes over Stomp
20
- * Fully evented (thanks to the stomp gem)
20
+ * Fully evented (thanks to the onstomp gem)
21
21
 
22
22
  == SYNOPSIS:
23
23
 
@@ -26,7 +26,7 @@ Please review the code for information (rdocs to be updated soon.)
26
26
  == REQUIREMENTS:
27
27
 
28
28
  * ruote[http://ruote.rubyforge.org] 2.2.0 or later
29
- * stomp[https://gitorious.org/stomp] 1.1.8 or later
29
+ * onstomp[https://github.com/meadvillerb/onstomp] 1.0.4 or later
30
30
  * a server that supports Stomp (stompserver, ActiveMQ, RabbitMQ)
31
31
 
32
32
  == INSTALL:
@@ -60,8 +60,13 @@ ruote-amqp, which this works is based on)
60
60
  Permission is hereby granted, free of charge, to any person obtaining
61
61
  a copy of this software and associated documentation files (the
62
62
  'Software'), to deal in the Software without restriction, including
63
- without limitation the rights to use, copy, modify, merge, publish,
63
+ <<<<<<< Updated upstream
64
+ without limitation the rights to use, copy, modify, merge, send,
64
65
  distribute, sublicense, and/or sell copies of the Software, and to
66
+ =======
67
+ without limitation the rights to use, copy, modify, merge, publish,
68
+ distribute, sublicense, and/or sell copies of tshe Software, and to
69
+ >>>>>>> Stashed changes
65
70
  permit persons to whom the Software is furnished to do so, subject to
66
71
  the following conditions:
67
72
 
@@ -1,4 +1,3 @@
1
-
2
1
  module RuoteStomp
3
2
 
4
3
  #
@@ -14,7 +13,6 @@ module RuoteStomp
14
13
  # @param opts :queue / :unsubscribe
15
14
  #
16
15
  def initialize(engine_or_storage, opts={})
17
-
18
16
  super(engine_or_storage, opts.merge(:launchitems => :only))
19
17
  end
20
18
  end
@@ -1,10 +1,7 @@
1
-
2
1
  require 'ruote/part/local_participant'
3
2
  require 'ruote-stomp'
4
3
 
5
-
6
4
  module RuoteStomp
7
-
8
5
  #
9
6
  # = Stomp Participants
10
7
  #
@@ -122,12 +119,12 @@ module RuoteStomp
122
119
  }.merge(options.inject({}) { |h, (k, v)|
123
120
  h[k.to_s] = v; h
124
121
  })
125
- #
126
- # the inject is here to make sure that all options have String keys
122
+ #
123
+ # the inject is here to make sure that all options have String keys
127
124
  end
128
125
 
129
126
  # Process the workitem at hand. By default the workitem will be
130
- # published to the direct exchange specified in the +queue+
127
+ # sended to the direct exchange specified in the +queue+
131
128
  # workitem parameter. You can specify a +message+ workitem
132
129
  # parameter to have that sent instead of the workitem.
133
130
  #
@@ -138,7 +135,6 @@ module RuoteStomp
138
135
 
139
136
  raise 'no queue specified (outbound delivery)' unless target_queue
140
137
 
141
- #q = MQ.queue(target_queue, :durable => true)
142
138
  forget = determine_forget(workitem)
143
139
 
144
140
  opts = {
@@ -148,12 +144,9 @@ module RuoteStomp
148
144
  if message = workitem.fields['message'] || workitem.params['message']
149
145
 
150
146
  forget = true # sending a message implies 'forget' => true
151
- $stomp.publish target_queue, message, opts
152
- #q.publish(message, opts)
153
-
147
+ $stomp.send target_queue, message, opts
154
148
  else
155
- $stomp.publish target_queue, encode_workitem(workitem), opts
156
- #q.publish(encode_workitem(workitem), opts)
149
+ $stomp.send target_queue, encode_workitem(workitem), opts
157
150
  end
158
151
 
159
152
  reply_to_engine(workitem) if forget
@@ -162,7 +155,6 @@ module RuoteStomp
162
155
  # (Stops the underlying queue subscription)
163
156
  #
164
157
  def stop
165
-
166
158
  RuoteStomp.stop!
167
159
  end
168
160
 
@@ -176,21 +168,18 @@ module RuoteStomp
176
168
  # [NOT sure about this behavior with Stomp yet. Need to dive.]
177
169
 
178
170
  def do_not_thread
179
-
180
171
  true
181
172
  end
182
173
 
183
174
  private
184
175
 
185
176
  def determine_forget(workitem)
186
-
187
177
  return workitem.params['forget'] if workitem.params.has_key?('forget')
188
178
  return @options['forget'] if @options.has_key?('forget')
189
179
  false
190
180
  end
191
181
 
192
182
  def determine_queue(workitem)
193
-
194
183
  workitem.params['queue'] || @options['queue']
195
184
  end
196
185
 
@@ -199,9 +188,7 @@ module RuoteStomp
199
188
  # this participant.
200
189
  #
201
190
  def encode_workitem(wi)
202
-
203
191
  wi.params['participant_options'] = @options
204
-
205
192
  Rufus::Json.encode(wi.to_h)
206
193
  end
207
194
  end
@@ -1,7 +1,5 @@
1
-
2
1
  require 'ruote-stomp'
3
2
 
4
-
5
3
  module RuoteStomp
6
4
 
7
5
  #
@@ -56,6 +54,9 @@ module RuoteStomp
56
54
  # :queue for setting the queue on which to listen (defaults to
57
55
  # 'ruote_workitems').
58
56
  #
57
+ # :ignore_disconnect_on_process => true|false (defauts to false)
58
+ # processes the message even if the client has disconnected (use in testing only)
59
+ #
59
60
  # The :launchitems option :
60
61
  #
61
62
  # :launchitems => true
@@ -70,6 +71,7 @@ module RuoteStomp
70
71
  super(engine_or_storage)
71
72
 
72
73
  @launchitems = opts[:launchitems]
74
+ ignore_disconnect = opts[:ignore_disconnect_on_process]
73
75
 
74
76
  @queue =
75
77
  opts[:queue] ||
@@ -78,40 +80,31 @@ module RuoteStomp
78
80
  RuoteStomp.start!
79
81
 
80
82
  if opts[:unsubscribe]
81
- #MQ.queue(@queue, :durable => true).unsubscribe
82
- $stomp.unsubscribe(@queue)
83
- sleep 0.300
83
+ begin
84
+ $stomp.unsubscribe(@queue)
85
+ rescue OnStomp::UnsupportedCommandError => e
86
+ $stderr.puts("Connection does support unsubscribe")
87
+ end
84
88
  end
85
-
86
- $stomp.subscribe(@queue, {}) do |message|
89
+
90
+ $stomp.subscribe(@queue) do |message|
87
91
  # Process your message here
88
92
  # Your submitted data is in msg.body
89
- if $stomp.closed?
93
+ if $stomp.connected? && !ignore_disconnect
90
94
  # do nothing, we're going down
91
95
  else
92
96
  handle(message)
93
97
  end
94
98
  end
95
- #$stomp.join # Wait until listening thread dies
96
-
97
- # MQ.queue(@queue, :durable => true).subscribe do |message|
98
- # if AMQP.closing?
99
- # # do nothing, we're going down
100
- # else
101
- # handle(message)
102
- # end
103
- # end
104
99
  end
105
-
100
+
106
101
  def stop
107
-
108
102
  RuoteStomp.stop!
109
103
  end
110
104
 
111
105
  # (feel free to overwrite me)
112
106
  #
113
107
  def decode_workitem(msg)
114
-
115
108
  (Rufus::Json.decode(msg) rescue nil)
116
109
  end
117
110
 
@@ -120,9 +113,7 @@ module RuoteStomp
120
113
  def handle(msg)
121
114
  item = decode_workitem(msg.body)
122
115
  return unless item.is_a?(Hash)
123
-
124
116
  not_li = ! item.has_key?('definition')
125
-
126
117
  return if @launchitems == :only && not_li
127
118
  return unless @launchitems || not_li
128
119
 
@@ -152,5 +143,4 @@ module RuoteStomp
152
143
  super(hash['definition'], hash['fields'] || {}, hash['variables'] || {})
153
144
  end
154
145
  end
155
- end
156
-
146
+ end
@@ -1,6 +1,4 @@
1
-
2
1
  module RuoteStomp
3
-
4
- VERSION = '2.2.0.b'
2
+ VERSION = '2.2.0.c'
5
3
  end
6
4
 
@@ -1,4 +1,3 @@
1
-
2
1
  module RuoteStomp
3
2
 
4
3
  #
data/lib/ruote-stomp.rb CHANGED
@@ -1,8 +1,7 @@
1
- require 'stomp'
1
+ require 'onstomp'
2
2
 
3
3
  require 'ruote-stomp/version'
4
4
 
5
-
6
5
  #
7
6
  # Stomp participant and listener pair for ruote.
8
7
  #
@@ -21,7 +20,6 @@ require 'ruote-stomp/version'
21
20
  module RuoteStomp
22
21
 
23
22
  autoload 'ParticipantProxy', 'ruote-stomp/participant'
24
-
25
23
  autoload 'Receiver', 'ruote-stomp/receiver'
26
24
  autoload 'WorkitemListener', 'ruote-stomp/workitem_listener'
27
25
  autoload 'LaunchitemListener', 'ruote-stomp/launchitem_listener'
@@ -39,34 +37,26 @@ module RuoteStomp
39
37
  # Ensure the Stomp connection is started
40
38
  def start!
41
39
  return if started?
42
-
43
40
  mutex = Mutex.new
44
41
  cv = ConditionVariable.new
45
-
46
42
  Thread.main[:ruote_stomp_connection] = Thread.new do
47
43
  Thread.abort_on_exception = true
48
-
44
+
49
45
  begin
50
- $stomp = Stomp::Client.new STOMP.settings[:user],
51
- STOMP.settings[:passcode],
52
- STOMP.settings[:host],
53
- STOMP.settings[:port],
54
- STOMP.settings[:reliable]
55
- if $stomp
56
-
46
+ $stomp = OnStomp::Client.new create_connection_uri(STOMP.settings)
47
+ $stomp.connect
48
+
49
+ if $stomp && $stomp.connected?
57
50
  started!
58
51
  cv.signal
59
52
  end
60
- rescue
61
- raise RuntimeError, "Failed to connect to Stomp server."
53
+ rescue Exception => e
54
+ raise RuntimeError, "Failed to connect to Stomp server. (#{e.message})"
62
55
  end
63
56
  end
64
57
 
65
58
  mutex.synchronize { cv.wait(mutex) }
66
59
 
67
- # Stomp equivalent?
68
- #MQ.prefetch(1)
69
-
70
60
  yield if block_given?
71
61
  end
72
62
 
@@ -82,16 +72,35 @@ module RuoteStomp
82
72
  # Close down the Stomp connections
83
73
  def stop!
84
74
  return unless started?
85
- $stomp.close
75
+ $stomp.disconnect
86
76
  Thread.main[:ruote_stomp_connection].join
87
77
  Thread.main[:ruote_stomp_started] = false
88
78
  end
79
+
80
+ protected
81
+
82
+ def create_connection_uri(config={})
83
+ config = config.map { |n,v| {n,v.to_s} }.reduce(:merge)
84
+ user = config[:user]
85
+ passcode = config[:passcode]
86
+ host = config[:host]
87
+ port = config[:port]
88
+ ssl = config[:ssl] ? "+ssl" : ""
89
+
90
+ # construct the connection URI
91
+ user_and_password = [user,passcode].reject{|e| e.nil? || e.empty?}.join(":")
92
+ host_and_port = [host,port].reject{|e| e.nil? || e.empty?}.join(":")
93
+ uri = [host_and_port, user_and_password].reject{|e| e.nil? || e.empty?}.reverse.join("@")
94
+ protocol = ['stomp', ssl, '://'].reject{|e| e.nil? || e.empty?}.join
95
+
96
+ "#{protocol}#{uri}"
97
+ end
89
98
  end
90
99
  end
91
100
 
92
101
  module STOMP
93
102
  def self.settings
94
- @settings ||= {:host => "localhost", :port => "61613", :reliable => false}
103
+ @settings ||= {:host => "localhost", :port => "61613"}
95
104
  end
96
105
  end
97
106
 
data/ruote-stomp.gemspec CHANGED
@@ -5,26 +5,23 @@ Gem::Specification.new do |s|
5
5
  s.name = 'ruote-stomp'
6
6
  s.version = File.read('lib/ruote-stomp/version.rb').match(/VERSION = '([^']+)'/)[1]
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = [ 'Kit Plummer' ]
9
- s.email = [ 'kplummer@maestrodev.com' ]
8
+ s.authors = [ 'Kit Plummer', 'Brian Sam-Bodden' ]
9
+ s.email = [ 'kplummer@maestrodev.com', 'bsbodden@integrallis.com' ]
10
10
  s.homepage = 'http://ruote.rubyforge.org'
11
11
  s.rubyforge_project = 'ruote'
12
12
  s.summary = 'Stomp participant/listener pair for ruote 2.2'
13
- s.description = %{
14
- Stomp participant/listener pair for ruote 2.2 - ported from ruote-amqp.
15
- }
13
+ s.description = 'Stomp participant/listener pair for ruote 2.2'
16
14
 
17
- #s.files = `git ls-files`.split("\n")
18
15
  s.files = Dir[
19
16
  'Rakefile',
20
17
  'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb',
21
18
  '*.gemspec', '*.txt', '*.rdoc', '*.md'
22
19
  ]
23
20
 
24
- #s.add_runtime_dependency 'stmop'
25
- s.add_runtime_dependency 'stomp', '1.1.9'
26
- s.add_runtime_dependency 'ruote', ">= #{s.version}"
21
+ s.add_runtime_dependency 'onstomp', "~> 1.0.4"
22
+ s.add_runtime_dependency 'ruote', "~> 2.2.0"
27
23
  s.add_runtime_dependency 'json'
24
+ s.add_runtime_dependency 'parslet'
28
25
  s.add_development_dependency 'rake'
29
26
  s.add_development_dependency 'rspec', ">= 2.6.0"
30
27
  s.add_development_dependency 'stompserver', '~> 0.9.9'
@@ -1,4 +1,3 @@
1
-
2
1
  require File.join(File.dirname(__FILE__), 'spec_helper')
3
2
 
4
3
  describe RuoteStomp::LaunchitemListener do
@@ -20,48 +19,59 @@ describe RuoteStomp::LaunchitemListener do
20
19
  'fields' => { 'foo' => 'bar' }
21
20
  }.to_json
22
21
 
23
- RuoteStomp::LaunchitemListener.new(@engine)
22
+ RuoteStomp::LaunchitemListener.new(@engine, :ignore_disconnect_on_process => true)
24
23
 
25
- $stomp.publish '/queue/ruote_launchitems', json, { :persistent => true }
26
- #MQ.queue('ruote_launchitems', :durable => true).publish(json)
24
+ finished_processing = false
27
25
 
28
- sleep 0.5
26
+ $stomp.send('/queue/ruote_launchitems', json) do |r|
27
+ finished_processing = true
28
+ end
29
+
30
+ begin
31
+ Timeout::timeout(10) do
32
+ while @tracer.to_s.empty?
33
+ print "*"
34
+ sleep 1
35
+ end
36
+ end
37
+ rescue Timeout::Error
38
+ fail "Timeout waiting for message"
39
+ end
40
+
41
+ Thread.pass until finished_processing
29
42
 
30
43
  @engine.should_not have_errors
31
44
  @engine.should_not have_remaining_expressions
32
-
33
45
  @tracer.to_s.should == 'bar'
34
46
  end
35
47
 
36
48
  it 'discards corrupt process definitions' do
37
-
49
+
38
50
  json = {
39
51
  'definition' => %{
40
52
  I'm a broken process definition
41
53
  },
42
54
  'fields' => { 'foo' => 'bar' }
43
55
  }.to_json
44
-
45
- RuoteStomp::LaunchitemListener.new(@engine, :unsubscribe => true)
46
-
56
+
57
+ RuoteStomp::LaunchitemListener.new(@engine, {:unsubscribe => true, :ignore_disconnect_on_process => true})
58
+
47
59
  serr = String.new
48
60
  err = StringIO.new(serr, 'w+')
49
61
  $stderr = err
50
-
51
- $stomp.publish '/queue/ruote_launchitems', json, { :persistent => true }
52
-
53
- #MQ.queue('ruote_launchitems', :durable => true).publish(json)
54
-
62
+
63
+ $stomp.send '/queue/ruote_launchitems', json
64
+
55
65
  sleep 0.5
56
-
66
+
57
67
  err.close
58
68
  $stderr = STDERR
59
-
69
+
60
70
  @engine.should_not have_errors
61
71
  @engine.should_not have_remaining_expressions
62
-
72
+
63
73
  @tracer.to_s.should == ''
64
-
74
+
65
75
  serr.should match(/^===/)
66
76
  end
67
77
  end
@@ -26,9 +26,7 @@ describe RuoteStomp::ParticipantProxy, :type => :ruote do
26
26
  begin
27
27
  Timeout::timeout(10) do
28
28
  @msg = nil
29
- #MQ.queue('test1', :durable => true).subscribe { |msg| @msg = msg }
30
29
  $stomp.subscribe("/queue/test1") do |message|
31
-
32
30
  @msg = message.body
33
31
  end
34
32
 
@@ -97,8 +95,7 @@ describe RuoteStomp::ParticipantProxy, :type => :ruote do
97
95
  begin
98
96
  Timeout::timeout(5) do
99
97
  @msg = nil
100
- #MQ.queue('test2', :durable => true).subscribe { |msg| @msg = msg }
101
- $stomp.subscribe("/queue/test2", {}) do |message|
98
+ $stomp.subscribe("/queue/test2") do |message|
102
99
  @msg = message.body
103
100
  end
104
101
  loop do
@@ -132,8 +129,7 @@ describe RuoteStomp::ParticipantProxy, :type => :ruote do
132
129
  begin
133
130
  Timeout::timeout(5) do
134
131
  @msg = nil
135
- #MQ.queue('test5', :durable => true).subscribe { |msg| @msg = msg }
136
- $stomp.subscribe("/queue/test5", {}) do |message|
132
+ $stomp.subscribe("/queue/test5") do |message|
137
133
  @msg = message.body
138
134
  end
139
135
  loop do
@@ -162,7 +158,7 @@ describe RuoteStomp::ParticipantProxy, :type => :ruote do
162
158
  Timeout::timeout(10) do
163
159
 
164
160
  #MQ.queue('test6', :durable => true).subscribe { |m| msg = m }
165
- $stomp.subscribe("/queue/stomp", {}) do |message|
161
+ $stomp.subscribe("/queue/stomp") do |message|
166
162
  msg = message.body
167
163
  end
168
164
  loop do
@@ -1,9 +1,7 @@
1
-
2
1
  require File.join(File.dirname(__FILE__), 'spec_helper')
3
2
 
4
3
  require 'ruote/participant'
5
4
 
6
-
7
5
  describe RuoteStomp::Receiver do
8
6
 
9
7
  after(:each) do
@@ -11,7 +9,6 @@ describe RuoteStomp::Receiver do
11
9
  end
12
10
 
13
11
  it "handles replies" do
14
-
15
12
  pdef = Ruote.process_definition :name => 'test' do
16
13
  set :field => 'foo', :value => 'foo'
17
14
  sequence do
@@ -20,28 +17,23 @@ describe RuoteStomp::Receiver do
20
17
  echo '${f:foo}'
21
18
  end
22
19
  end
23
-
20
+
24
21
  @engine.register_participant(:stomp, RuoteStomp::ParticipantProxy)
25
-
26
- RuoteStomp::Receiver.new(@engine)
27
-
22
+
23
+ receiver = RuoteStomp::Receiver.new(@engine, :ignore_disconnect_on_process => true)
24
+
28
25
  wfid = @engine.launch(pdef)
29
-
26
+
30
27
  workitem = nil
31
-
28
+
32
29
  begin
33
30
  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
- $stomp.subscribe("/queue/test3", {}) do |message|
31
+
32
+ $stomp.subscribe("/queue/test3") do |message|
41
33
  wi = Ruote::Workitem.new(Rufus::Json.decode(message.body))
42
34
  workitem = wi if wi.wfid == wfid
43
35
  end
44
-
36
+
45
37
  loop do
46
38
  break unless workitem.nil?
47
39
  sleep 0.1
@@ -50,19 +42,18 @@ describe RuoteStomp::Receiver do
50
42
  rescue Timeout::Error
51
43
  fail "Timeout waiting for message"
52
44
  end
53
-
45
+
54
46
  workitem.fields['foo'] = "bar"
47
+
48
+ $stomp.send '/queue/ruote_workitems', Rufus::Json.encode(workitem.to_h)
55
49
 
56
- #MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
57
- $stomp.publish '/queue/ruote_workitems',
58
- Rufus::Json.encode(workitem.to_h),
59
- { :persistent => true }
60
50
  @engine.wait_for(wfid)
61
-
51
+
62
52
  @engine.should_not have_errors
63
53
  @engine.should_not have_remaining_expressions
64
-
54
+
65
55
  @tracer.to_s.should == "foo\nbar"
56
+ receiver.stop
66
57
  end
67
58
 
68
59
  it "launches processes" do
@@ -77,64 +68,57 @@ describe RuoteStomp::Receiver do
77
68
  },
78
69
  'fields' => { 'foo' => 'bar' }
79
70
  }.to_json
71
+
72
+ receiver = RuoteStomp::Receiver.new(@engine, {:launchitems => true, :unsubscribe => true, :ignore_disconnect_on_process => true})
80
73
 
81
- RuoteStomp::Receiver.new(@engine, :launchitems => true, :unsubscribe => true)
74
+ finished_processing = false
82
75
 
83
- # MQ.queue(
84
- # 'ruote_workitems', :durable => true
85
- # ).publish(
86
- # json, :persistent => true
87
- # )
76
+ $stomp.send('/queue/ruote_workitems', json) do |r|
77
+ finished_processing = true
78
+ end
88
79
 
89
- $stomp.publish '/queue/ruote_workitems', json, { :persistent => true }
80
+ begin
81
+ Timeout::timeout(20) do
82
+ while @tracer.to_s.empty?
83
+ print "*"
84
+ sleep 1
85
+ end
86
+ end
87
+ rescue Timeout::Error
88
+ fail "Timeout waiting for message"
89
+ end
90
90
 
91
-
92
- sleep 0.5
91
+ Thread.pass until finished_processing
93
92
 
94
93
  @engine.should_not have_errors
95
94
  @engine.should_not have_remaining_expressions
96
95
 
97
96
  @tracer.to_s.should == 'bar'
97
+ receiver.stop
98
98
  end
99
99
 
100
100
  it 'accepts a custom :queue' do
101
-
101
+
102
102
  RuoteStomp::Receiver.new(
103
- @engine, :queue => '/queue/mario', :launchitems => true, :unsubscribe => true)
104
-
103
+ @engine, :queue => '/queue/mario', :launchitems => true, :unsubscribe => true, :ignore_disconnect_on_process => true)
104
+
105
105
  @engine.register_participant 'alpha', Ruote::StorageParticipant
106
-
106
+
107
107
  json = Rufus::Json.encode({
108
108
  'definition' => "Ruote.define { alpha }"
109
109
  })
110
-
111
- # MQ.queue(
112
- # 'ruote_workitems', :durable => true
113
- # ).publish(
114
- # json, :persistent => true
115
- # )
116
110
 
117
- $stomp.publish '/queue/ruote_workitems',
118
- json,
119
- { :persistent => true }
120
-
111
+ $stomp.send '/queue/ruote_workitems', json
112
+
121
113
  sleep 1
122
-
114
+
123
115
  @engine.processes.size.should == 0
124
116
  # nothing happened
125
-
126
- # MQ.queue(
127
- # 'mario', :durable => true
128
- # ).publish(
129
- # json, :persistent => true
130
- # )
131
-
132
- $stomp.publish '/queue/mario',
133
- json,
134
- { :persistent => true }
135
-
117
+
118
+ $stomp.send '/queue/mario', json
119
+
136
120
  sleep 1
137
-
121
+
138
122
  @engine.processes.size.should == 1
139
123
  # launch happened
140
124
  end