stomp 1.1.7 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +11 -0
- data/README.rdoc +19 -6
- data/Rakefile +6 -4
- data/lib/stomp/client.rb +9 -4
- data/lib/stomp/connection.rb +29 -15
- data/lib/stomp/errors.rb +6 -0
- data/lib/stomp/message.rb +1 -1
- data/lib/stomp/version.rb +1 -1
- data/spec/client_spec.rb +38 -2
- data/spec/connection_spec.rb +8 -4
- data/stomp.gemspec +5 -5
- data/test/test_connection.rb +14 -0
- data/test/test_message.rb +5 -1
- metadata +6 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 1.1.8 2010-16-05
|
2
|
+
|
3
|
+
* Set KEEPALIVE on connection socket options
|
4
|
+
* Attempt to support JRuby more robustly (poll remains broken)
|
5
|
+
* Switch to ruby supplied IO#ready?
|
6
|
+
* Test enhancements for suppress_content_length header
|
7
|
+
* Miscellaneous small documentation updates
|
8
|
+
* Add parse_timeout parameter for use with hashed logins
|
9
|
+
* Allow connection to hosts with a - (dash) in the host name
|
10
|
+
* Add limit parameter to thread joins
|
11
|
+
|
1
12
|
== 1.1.7 2010-09-01
|
2
13
|
|
3
14
|
* Binary parse of raw STOMP frame
|
data/README.rdoc
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
==README
|
2
2
|
|
3
|
-
http://
|
3
|
+
* (http://gitorious.org/projects/stomp/)
|
4
|
+
* (https://github.com/morellon/stomp/)
|
5
|
+
* (http://stomp.rubyforge.org/)
|
4
6
|
|
5
7
|
===Overview
|
6
8
|
|
7
|
-
An implementation of the Stomp protocol
|
9
|
+
An implementation of the Stomp protocol for Ruby. See:
|
10
|
+
|
11
|
+
* [STOMP 1.0] (http://stomp.codehaus.org/Protocol)
|
12
|
+
* [STOMP 1.0 and 1.1 Draft] (http://stomp.github.com/index.html)
|
8
13
|
|
9
14
|
|
10
15
|
===Example Usage
|
@@ -27,7 +32,7 @@ An implementation of the Stomp protocol (http://stomp.codehaus.org/Protocol) for
|
|
27
32
|
p msg
|
28
33
|
end
|
29
34
|
|
30
|
-
===Hash Example Usage
|
35
|
+
===Hash Login Example Usage
|
31
36
|
|
32
37
|
hash = {
|
33
38
|
:hosts => [
|
@@ -44,7 +49,8 @@ An implementation of the Stomp protocol (http://stomp.codehaus.org/Protocol) for
|
|
44
49
|
:randomize => false,
|
45
50
|
:backup => false,
|
46
51
|
:timeout => -1,
|
47
|
-
:connect_headers => {}
|
52
|
+
:connect_headers => {},
|
53
|
+
:parse_timeout => 5,
|
48
54
|
}
|
49
55
|
|
50
56
|
# for client
|
@@ -58,25 +64,29 @@ An implementation of the Stomp protocol (http://stomp.codehaus.org/Protocol) for
|
|
58
64
|
|
59
65
|
Up until March 2009 the project was maintained and primarily developed by Brian McCallister.
|
60
66
|
|
61
|
-
The project is now maintained by Johan Sørensen <johan@johansorensen.com>
|
67
|
+
The project is now maintained by Johan Sørensen <johan@johansorensen.com> and others.
|
62
68
|
|
63
69
|
===Source Code
|
64
70
|
|
71
|
+
https://github.com/morellon/stomp/
|
65
72
|
http://gitorious.org/projects/stomp/
|
66
73
|
http://github.com/js/stomp/
|
67
74
|
|
68
75
|
===Project urls
|
69
76
|
|
70
77
|
Project Home :
|
78
|
+
|
71
79
|
http://gitorious.org/projects/stomp/
|
72
80
|
http://rubyforge.org/projects/stomp/
|
73
81
|
|
74
82
|
Stomp Protocol Info :
|
83
|
+
|
84
|
+
http://stomp.github.com/index.html
|
75
85
|
http://stomp.codehaus.org/Protocol
|
76
86
|
|
77
87
|
= Contributors
|
78
88
|
|
79
|
-
The following people have contributed to Stomp
|
89
|
+
The following people have contributed to Stomp:
|
80
90
|
|
81
91
|
* Brian McCaliister
|
82
92
|
* Glenn Rempe <glenn@rempe.us>
|
@@ -89,3 +99,6 @@ The following people have contributed to Stomp (ordered by commits):
|
|
89
99
|
* Tony Garnock-Jones <tonyg@lshift.net>
|
90
100
|
* chirino
|
91
101
|
* Stefan Saasen
|
102
|
+
* Neil Wilson
|
103
|
+
* Dinesh Majrekar
|
104
|
+
|
data/Rakefile
CHANGED
@@ -31,9 +31,11 @@ begin
|
|
31
31
|
gem.version = Stomp::Version::STRING
|
32
32
|
gem.summary = %Q{Ruby client for the Stomp messaging protocol}
|
33
33
|
gem.description = %Q{Ruby client for the Stomp messaging protocol}
|
34
|
-
gem.email = ["brianm@apache.org", 'marius@stones.com', 'morellon@gmail.com'
|
35
|
-
|
36
|
-
gem.
|
34
|
+
gem.email = ["brianm@apache.org", 'marius@stones.com', 'morellon@gmail.com',
|
35
|
+
'allard.guy.m@gmail.com' ]
|
36
|
+
gem.homepage = "https://rubygems.org/gems/stomp"
|
37
|
+
gem.authors = ["Brian McCallister", 'Marius Mathiesen', 'Thiago Morello',
|
38
|
+
'Guy M. Allard']
|
37
39
|
gem.add_development_dependency "rspec", '>= 2.3'
|
38
40
|
end
|
39
41
|
Jeweler::GemcutterTasks.new
|
@@ -43,7 +45,7 @@ end
|
|
43
45
|
|
44
46
|
desc 'Run the specs'
|
45
47
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
46
|
-
t.
|
48
|
+
t.rspec_opts = ['--colour']
|
47
49
|
t.pattern = 'spec/**/*_spec.rb'
|
48
50
|
end
|
49
51
|
|
data/lib/stomp/client.rb
CHANGED
@@ -47,13 +47,13 @@ module Stomp
|
|
47
47
|
|
48
48
|
@reliable = true
|
49
49
|
|
50
|
-
elsif login =~ /^stomp
|
50
|
+
elsif login =~ /^stomp:\/\/#{url_regex}/ # e.g. stomp://login:passcode@host:port or stomp://host:port
|
51
51
|
@login = $2 || ""
|
52
52
|
@passcode = $3 || ""
|
53
53
|
@host = $4
|
54
54
|
@port = $5.to_i
|
55
55
|
@reliable = false
|
56
|
-
elsif login =~ /^failover:(\/\/)?\(stomp(\+ssl)
|
56
|
+
elsif login =~ /^failover:(\/\/)?\(stomp(\+ssl)?:\/\/#{url_regex}(,stomp(\+ssl)?:\/\/#{url_regex}\))+(\?(.*))?$/ # e.g. failover://(stomp://login1:passcode1@localhost:61616,stomp://login2:passcode2@remotehost:61617)?option1=param
|
57
57
|
|
58
58
|
first_host = {}
|
59
59
|
first_host[:ssl] = !$2.nil?
|
@@ -104,8 +104,8 @@ module Stomp
|
|
104
104
|
|
105
105
|
# Join the listener thread for this client,
|
106
106
|
# generally used to wait for a quit signal
|
107
|
-
def join
|
108
|
-
@listener_thread.join
|
107
|
+
def join(limit = nil)
|
108
|
+
@listener_thread.join(limit)
|
109
109
|
end
|
110
110
|
|
111
111
|
# Begin a transaction by name
|
@@ -241,6 +241,11 @@ module Stomp
|
|
241
241
|
id
|
242
242
|
end
|
243
243
|
|
244
|
+
# e.g. login:passcode@host:port or host:port
|
245
|
+
def url_regex
|
246
|
+
'(([\w\.\-]*):(\w*)@)?([\w\.\-]+):(\d+)'
|
247
|
+
end
|
248
|
+
|
244
249
|
def parse_hosts(url)
|
245
250
|
hosts = []
|
246
251
|
|
data/lib/stomp/connection.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'timeout'
|
3
|
+
require 'io/wait'
|
3
4
|
|
4
5
|
module Stomp
|
5
6
|
|
@@ -39,7 +40,9 @@ module Stomp
|
|
39
40
|
# :max_reconnect_attempts => 0,
|
40
41
|
# :randomize => false,
|
41
42
|
# :backup => false,
|
42
|
-
# :timeout => -1
|
43
|
+
# :timeout => -1,
|
44
|
+
# :connect_headers => {},
|
45
|
+
# :parse_timeout => 5,
|
43
46
|
# }
|
44
47
|
#
|
45
48
|
# e.g. c = Connection.new(hash)
|
@@ -68,6 +71,7 @@ module Stomp
|
|
68
71
|
@connect_headers = connect_headers
|
69
72
|
@ssl = false
|
70
73
|
@parameters = nil
|
74
|
+
@parse_timeout = 5 # To override, use hashed parameters
|
71
75
|
end
|
72
76
|
|
73
77
|
# Use Mutexes: only one lock per each thread
|
@@ -89,7 +93,7 @@ module Stomp
|
|
89
93
|
@reliable = true
|
90
94
|
@reconnect_delay = @parameters[:initial_reconnect_delay]
|
91
95
|
@connect_headers = @parameters[:connect_headers]
|
92
|
-
|
96
|
+
@parse_timeout = @parameters[:parse_timeout]
|
93
97
|
#sets the first host to connect
|
94
98
|
change_host
|
95
99
|
end
|
@@ -148,7 +152,9 @@ module Stomp
|
|
148
152
|
:max_reconnect_attempts => 0,
|
149
153
|
:randomize => false,
|
150
154
|
:backup => false,
|
151
|
-
:timeout => -1
|
155
|
+
:timeout => -1,
|
156
|
+
# Parse Timeout
|
157
|
+
:parse_timeout => 5
|
152
158
|
}
|
153
159
|
|
154
160
|
default_params.merge(params)
|
@@ -346,10 +352,12 @@ module Stomp
|
|
346
352
|
def _receive( read_socket )
|
347
353
|
@read_semaphore.synchronize do
|
348
354
|
line = read_socket.gets
|
355
|
+
|
349
356
|
return nil if line.nil?
|
350
357
|
|
351
|
-
# If the reading hangs for more than
|
352
|
-
|
358
|
+
# If the reading hangs for more than X seconds, abort the parsing process.
|
359
|
+
# X defaults to 5. Override allowed in connection hash parameters.
|
360
|
+
Timeout::timeout(@parse_timeout, Stomp::Error::PacketParsingTimeout) do
|
353
361
|
# Reads the beginning of the message until it runs into a empty line
|
354
362
|
message_header = ''
|
355
363
|
begin
|
@@ -368,15 +376,24 @@ module Stomp
|
|
368
376
|
raise Stomp::Error::InvalidMessageLength unless parse_char(read_socket.getc) == "\0"
|
369
377
|
# Else reads, the rest of the message until the first \0
|
370
378
|
else
|
371
|
-
message_body += char while
|
379
|
+
message_body += char while (char = parse_char(read_socket.getc)) != "\0"
|
372
380
|
end
|
373
381
|
|
374
|
-
# If the buffer isn't empty, reads
|
375
|
-
#
|
376
|
-
|
382
|
+
# If the buffer isn't empty, reads trailing new lines.
|
383
|
+
# Note: experiments with JRuby seem to show that .ready? never
|
384
|
+
# returns true. This means that this code to drain trailing new
|
385
|
+
# lines never runs using JRuby.
|
386
|
+
while read_socket.ready?
|
377
387
|
last_char = read_socket.getc
|
378
|
-
|
388
|
+
break unless last_char
|
389
|
+
if parse_char(last_char) != "\n"
|
390
|
+
read_socket.ungetc(last_char)
|
391
|
+
break
|
392
|
+
end
|
379
393
|
end
|
394
|
+
# And so, a JRuby hack. Remove any new lines at the start of the
|
395
|
+
# next buffer.
|
396
|
+
message_header.gsub!(/^\n?/, "")
|
380
397
|
|
381
398
|
# Adds the excluded \n and \0 and tries to create a new message with it
|
382
399
|
Message.new(message_header + "\n" + message_body + "\0")
|
@@ -424,10 +441,6 @@ module Stomp
|
|
424
441
|
|
425
442
|
def open_tcp_socket
|
426
443
|
tcp_socket = TCPSocket.open @host, @port
|
427
|
-
def tcp_socket.ready?
|
428
|
-
r,w,e = IO.select([self],nil,nil,0)
|
429
|
-
! r.nil?
|
430
|
-
end
|
431
444
|
|
432
445
|
tcp_socket
|
433
446
|
end
|
@@ -473,7 +486,8 @@ module Stomp
|
|
473
486
|
close_socket
|
474
487
|
|
475
488
|
@closed = false
|
476
|
-
|
489
|
+
# Use keepalive
|
490
|
+
used_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
|
477
491
|
used_socket
|
478
492
|
end
|
479
493
|
|
data/lib/stomp/errors.rb
CHANGED
data/lib/stomp/message.rb
CHANGED
@@ -26,7 +26,7 @@ module Stomp
|
|
26
26
|
|
27
27
|
# Extract working copies of each frame part
|
28
28
|
work_command = frame[0..command_index-1]
|
29
|
-
raise Stomp::Error::
|
29
|
+
raise Stomp::Error::InvalidServerCommand, "invalid command: #{work_command.inspect}" unless @@allowed_commands.include?(work_command)
|
30
30
|
#
|
31
31
|
work_headers = frame[command_index+1..headers_index-1]
|
32
32
|
raise Stomp::Error::InvalidFormat, 'nil headers' unless work_headers
|
data/lib/stomp/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -114,14 +114,32 @@ describe Stomp::Client do
|
|
114
114
|
|
115
115
|
end
|
116
116
|
|
117
|
+
describe "(created with non-authenticating stomp:// URL and a host with a '-')" do
|
118
|
+
|
119
|
+
before(:each) do
|
120
|
+
@client = Stomp::Client.new('stomp://foo-bar:12345')
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should properly parse the URL provided" do
|
124
|
+
@client.login.should eql('')
|
125
|
+
@client.passcode.should eql('')
|
126
|
+
@client.host.should eql('foo-bar')
|
127
|
+
@client.port.should eql(12345)
|
128
|
+
@client.reliable.should be_false
|
129
|
+
end
|
130
|
+
|
131
|
+
it_should_behave_like "standard Client"
|
132
|
+
|
133
|
+
end
|
134
|
+
|
117
135
|
describe "(created with authenticating stomp:// URL and non-TLD host)" do
|
118
136
|
|
119
137
|
before(:each) do
|
120
|
-
@client = Stomp::Client.new('stomp://
|
138
|
+
@client = Stomp::Client.new('stomp://test-login:testpasscode@foobar:12345')
|
121
139
|
end
|
122
140
|
|
123
141
|
it "should properly parse the URL provided" do
|
124
|
-
@client.login.should eql('
|
142
|
+
@client.login.should eql('test-login')
|
125
143
|
@client.passcode.should eql('testpasscode')
|
126
144
|
@client.host.should eql('foobar')
|
127
145
|
@client.port.should eql(12345)
|
@@ -132,6 +150,24 @@ describe Stomp::Client do
|
|
132
150
|
|
133
151
|
end
|
134
152
|
|
153
|
+
describe "(created with authenticating stomp:// URL and a host with a '-')" do
|
154
|
+
|
155
|
+
before(:each) do
|
156
|
+
@client = Stomp::Client.new('stomp://test-login:testpasscode@foo-bar:12345')
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should properly parse the URL provided" do
|
160
|
+
@client.login.should eql('test-login')
|
161
|
+
@client.passcode.should eql('testpasscode')
|
162
|
+
@client.host.should eql('foo-bar')
|
163
|
+
@client.port.should eql(12345)
|
164
|
+
@client.reliable.should be_false
|
165
|
+
end
|
166
|
+
|
167
|
+
it_should_behave_like "standard Client"
|
168
|
+
|
169
|
+
end
|
170
|
+
|
135
171
|
describe "(created with non-authenticating stomp:// URL and TLD host)" do
|
136
172
|
|
137
173
|
before(:each) do
|
data/spec/connection_spec.rb
CHANGED
@@ -16,6 +16,7 @@ describe Stomp::Connection do
|
|
16
16
|
:randomize => false,
|
17
17
|
:backup => false,
|
18
18
|
:timeout => -1,
|
19
|
+
:parse_timeout => 5,
|
19
20
|
:connect_headers => {}
|
20
21
|
}
|
21
22
|
|
@@ -27,8 +28,8 @@ describe Stomp::Connection do
|
|
27
28
|
|
28
29
|
# clone() does a shallow copy, we want a deep one so we can garantee the hosts order
|
29
30
|
normal_parameters = Marshal::load(Marshal::dump(@parameters))
|
30
|
-
|
31
|
-
@tcp_socket = mock(:tcp_socket, :close => nil, :puts => nil, :write => nil)
|
31
|
+
|
32
|
+
@tcp_socket = mock(:tcp_socket, :close => nil, :puts => nil, :write => nil, :setsockopt => nil)
|
32
33
|
TCPSocket.stub!(:open).and_return @tcp_socket
|
33
34
|
@connection = Stomp::Connection.new(normal_parameters)
|
34
35
|
end
|
@@ -47,7 +48,8 @@ describe Stomp::Connection do
|
|
47
48
|
"maxReconnectAttempts" => 0,
|
48
49
|
"randomize" => false,
|
49
50
|
"backup" => false,
|
50
|
-
"timeout" => -1
|
51
|
+
"timeout" => -1,
|
52
|
+
"parse_timeout" => 5,
|
51
53
|
}
|
52
54
|
|
53
55
|
@connection = Stomp::Connection.new(used_hash)
|
@@ -196,7 +198,7 @@ describe Stomp::Connection do
|
|
196
198
|
|
197
199
|
before(:each) do
|
198
200
|
ssl_parameters = {:hosts => [{:login => "login2", :passcode => "passcode2", :host => "remotehost", :ssl => true}]}
|
199
|
-
@ssl_socket = mock(:ssl_socket, :puts => nil, :write => nil)
|
201
|
+
@ssl_socket = mock(:ssl_socket, :puts => nil, :write => nil, :setsockopt => nil)
|
200
202
|
|
201
203
|
TCPSocket.should_receive(:open).and_return @tcp_socket
|
202
204
|
OpenSSL::SSL::SSLSocket.should_receive(:new).and_return(@ssl_socket)
|
@@ -260,6 +262,7 @@ describe Stomp::Connection do
|
|
260
262
|
:randomize => false,
|
261
263
|
:backup => false,
|
262
264
|
:timeout => -1,
|
265
|
+
:parse_timeout => 5,
|
263
266
|
:connect_headers => {}
|
264
267
|
}
|
265
268
|
|
@@ -288,6 +291,7 @@ describe Stomp::Connection do
|
|
288
291
|
:randomize => true,
|
289
292
|
:backup => false,
|
290
293
|
:timeout => -1,
|
294
|
+
:parse_timeout => 20,
|
291
295
|
:connect_headers => {:lerolero => "ronaldo"},
|
292
296
|
:dead_letter_queue => "queue/Error",
|
293
297
|
:max_redeliveries => 10
|
data/stomp.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{stomp}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello"]
|
12
|
-
s.date = %q{2011-
|
11
|
+
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello", "Guy M. Allard"]
|
12
|
+
s.date = %q{2011-03-16}
|
13
13
|
s.description = %q{Ruby client for the Stomp messaging protocol}
|
14
|
-
s.email = ["brianm@apache.org", "marius@stones.com", "morellon@gmail.com"]
|
14
|
+
s.email = ["brianm@apache.org", "marius@stones.com", "morellon@gmail.com", "allard.guy.m@gmail.com"]
|
15
15
|
s.executables = ["catstomp", "stompcat"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE",
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
|
|
44
44
|
"test/test_helper.rb",
|
45
45
|
"test/test_message.rb"
|
46
46
|
]
|
47
|
-
s.homepage = %q{
|
47
|
+
s.homepage = %q{https://rubygems.org/gems/stomp}
|
48
48
|
s.require_paths = ["lib"]
|
49
49
|
s.rubygems_version = %q{1.3.7}
|
50
50
|
s.summary = %q{Ruby client for the Stomp messaging protocol}
|
data/test/test_connection.rb
CHANGED
@@ -20,6 +20,20 @@ class TestStomp < Test::Unit::TestCase
|
|
20
20
|
assert_not_nil @conn
|
21
21
|
end
|
22
22
|
|
23
|
+
def test_no_length
|
24
|
+
@conn.subscribe make_destination
|
25
|
+
#
|
26
|
+
@conn.publish make_destination, "test_stomp#test_no_length",
|
27
|
+
{ :suppress_content_length => true }
|
28
|
+
msg = @conn.receive
|
29
|
+
assert_equal "test_stomp#test_no_length", msg.body
|
30
|
+
#
|
31
|
+
@conn.publish make_destination, "test_stomp#test_\000_length",
|
32
|
+
{ :suppress_content_length => true }
|
33
|
+
msg2 = @conn.receive
|
34
|
+
assert_equal "test_stomp#test_", msg2.body
|
35
|
+
end
|
36
|
+
|
23
37
|
def test_explicit_receive
|
24
38
|
@conn.subscribe make_destination
|
25
39
|
@conn.publish make_destination, "test_stomp#test_explicit_receive"
|
data/test/test_message.rb
CHANGED
@@ -79,7 +79,7 @@ class TestMessageKcode < Test::Unit::TestCase
|
|
79
79
|
aframe = Stomp::Message.new("command\nheaders\n\njunk")
|
80
80
|
}
|
81
81
|
#
|
82
|
-
assert_raise(Stomp::Error::
|
82
|
+
assert_raise(Stomp::Error::InvalidServerCommand) {
|
83
83
|
aframe = Stomp::Message.new("junkcommand\nheaders\n\njunk\0\n\n")
|
84
84
|
}
|
85
85
|
#
|
@@ -95,6 +95,10 @@ class TestMessageKcode < Test::Unit::TestCase
|
|
95
95
|
aframe = Stomp::Message.new("MESSAGE\nh1:val1\n\njunk\0\n")
|
96
96
|
}
|
97
97
|
#
|
98
|
+
assert_nothing_raised {
|
99
|
+
aframe = Stomp::Message.new("MESSAGE\nh2:val2\n\n\0")
|
100
|
+
}
|
101
|
+
#
|
98
102
|
assert_nothing_raised {
|
99
103
|
aframe = Stomp::Message.new("RECEIPT\nh1:val1\n\njunk\0\n")
|
100
104
|
}
|
metadata
CHANGED
@@ -5,18 +5,19 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 1.1.
|
8
|
+
- 8
|
9
|
+
version: 1.1.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brian McCallister
|
13
13
|
- Marius Mathiesen
|
14
14
|
- Thiago Morello
|
15
|
+
- Guy M. Allard
|
15
16
|
autorequire:
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2011-
|
20
|
+
date: 2011-03-16 00:00:00 -04:00
|
20
21
|
default_executable:
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
@@ -38,6 +39,7 @@ email:
|
|
38
39
|
- brianm@apache.org
|
39
40
|
- marius@stones.com
|
40
41
|
- morellon@gmail.com
|
42
|
+
- allard.guy.m@gmail.com
|
41
43
|
executables:
|
42
44
|
- catstomp
|
43
45
|
- stompcat
|
@@ -73,7 +75,7 @@ files:
|
|
73
75
|
- test/test_helper.rb
|
74
76
|
- test/test_message.rb
|
75
77
|
has_rdoc: true
|
76
|
-
homepage:
|
78
|
+
homepage: https://rubygems.org/gems/stomp
|
77
79
|
licenses: []
|
78
80
|
|
79
81
|
post_install_message:
|