klomp 1.0.6 → 1.0.7
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.md +6 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/Manifest.txt +1 -0
- data/Rakefile +10 -9
- data/klomp.gemspec +6 -3
- data/lib/klomp.rb +2 -2
- data/lib/klomp/connection.rb +1 -1
- data/lib/klomp/frames.rb +9 -4
- data/spec/acceptance/acceptance_spec.rb +1 -1
- data/spec/klomp/connection_spec.rb +17 -11
- data/spec/klomp/frames_spec.rb +1 -1
- data/spec/klomp/sentinel_spec.rb +2 -2
- data/spec/klomp_spec.rb +4 -4
- data/spec/spec_helper.rb +8 -1
- data/spec/support/have_received.rb +1 -1
- metadata +20 -4
data/ChangeLog.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Klomp Changes
|
2
2
|
--------------------------------------------------------------------------------
|
3
3
|
|
4
|
+
1.0.7 (2013/02/04)
|
5
|
+
================================================================================
|
6
|
+
|
7
|
+
- Ruby 1.8 support for the laggards
|
8
|
+
- Add empty .gemtest and fix gemspec so klomp may be used directly from git
|
9
|
+
|
4
10
|
1.0.6 (2012/11/19)
|
5
11
|
================================================================================
|
6
12
|
|
data/Gemfile
CHANGED
@@ -15,6 +15,7 @@ gem "rspec-given", "~>1.0", :group => [:development, :test]
|
|
15
15
|
gem "simplecov", "~>0.6.0", :group => [:development, :test]
|
16
16
|
gem "em-proxy", "~>0.1.0", :group => [:development, :test]
|
17
17
|
gem "ci_reporter", "~>1.7.0", :group => [:development, :test]
|
18
|
+
gem "activesupport", ">=2.3.0", :group => [:development, :test]
|
18
19
|
gem "hoe", "~>3.0", :group => [:development, :test]
|
19
20
|
|
20
21
|
# vim: syntax=ruby
|
data/Gemfile.lock
CHANGED
@@ -2,6 +2,7 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
ZenTest (4.8.0)
|
5
|
+
activesupport (2.3.16)
|
5
6
|
builder (3.1.4)
|
6
7
|
ci_reporter (1.7.3)
|
7
8
|
builder (>= 2.1.2)
|
@@ -42,6 +43,7 @@ PLATFORMS
|
|
42
43
|
|
43
44
|
DEPENDENCIES
|
44
45
|
ZenTest (~> 4.8.0)
|
46
|
+
activesupport (>= 2.3.0)
|
45
47
|
ci_reporter (~> 1.7.0)
|
46
48
|
em-proxy (~> 0.1.0)
|
47
49
|
hoe (~> 3.0)
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -13,15 +13,16 @@ Hoe.spec 'klomp' do
|
|
13
13
|
self.clean_globs << 'spec/reports'
|
14
14
|
|
15
15
|
### dependencies!
|
16
|
-
self.extra_dev_deps << [ 'hoe-bundler',
|
17
|
-
self.extra_dev_deps << [ 'hoe-gemspec',
|
18
|
-
self.extra_dev_deps << [ 'hoe-git',
|
19
|
-
self.extra_dev_deps << [ 'rspec',
|
20
|
-
self.extra_dev_deps << [ 'ZenTest',
|
21
|
-
self.extra_dev_deps << [ 'rspec-given',
|
22
|
-
self.extra_dev_deps << [ 'simplecov',
|
23
|
-
self.extra_dev_deps << [ 'em-proxy',
|
24
|
-
self.extra_dev_deps << [ 'ci_reporter',
|
16
|
+
self.extra_dev_deps << [ 'hoe-bundler', '~> 1.1.0' ]
|
17
|
+
self.extra_dev_deps << [ 'hoe-gemspec', '~> 1.0.0' ]
|
18
|
+
self.extra_dev_deps << [ 'hoe-git', '~> 1.5.0' ]
|
19
|
+
self.extra_dev_deps << [ 'rspec', '~> 2.11.0' ]
|
20
|
+
self.extra_dev_deps << [ 'ZenTest', '~> 4.8.0' ]
|
21
|
+
self.extra_dev_deps << [ 'rspec-given', '~> 1.0' ]
|
22
|
+
self.extra_dev_deps << [ 'simplecov', '~> 0.6.0' ]
|
23
|
+
self.extra_dev_deps << [ 'em-proxy', '~> 0.1.0' ]
|
24
|
+
self.extra_dev_deps << [ 'ci_reporter', '~> 1.7.0' ]
|
25
|
+
self.extra_dev_deps << [ 'activesupport', '>= 2.3.0' ]
|
25
26
|
end
|
26
27
|
|
27
28
|
require 'ci/reporter/rake/rspec'
|
data/klomp.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "klomp"
|
5
|
-
s.version = "1.0.
|
5
|
+
s.version = "1.0.7"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Nick Sieger"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2013-02-04"
|
10
10
|
s.description = "Klomp is a simple [Stomp] messaging client that keeps your sanity intact.\n\nThe purpose of Klomp is to be the simplest possible Stomp client. No in-memory\nbuffering of outgoing messages, no fanout subscriptions in-process, no\ntransactions, no complicated messaging patterns. Code simple enough so that when\nsomething goes wrong, the problem is obvious.\n\n[Stomp]: http://stomp.github.com/"
|
11
11
|
s.email = ["nick.sieger@livingsocial.com"]
|
12
12
|
s.extra_rdoc_files = ["Manifest.txt"]
|
13
|
-
s.files = [".rspec", ".simplecov", "ChangeLog.md", "Gemfile", "Gemfile.lock", "Manifest.txt", "README.md", "Rakefile", "klomp.gemspec", "lib/klomp.rb", "lib/klomp/connection.rb", "lib/klomp/frames.rb", "lib/klomp/sentinel.rb", "spec/acceptance/acceptance_spec.rb", "spec/frames/auth_error.txt", "spec/frames/connect.txt", "spec/frames/connect_vhost.txt", "spec/frames/connected.txt", "spec/frames/disconnect.txt", "spec/frames/error.txt", "spec/frames/greeting.txt", "spec/frames/message.txt", "spec/frames/receipt.txt", "spec/frames/subscribe.txt", "spec/frames/unsubscribe.txt", "spec/klomp/connection_spec.rb", "spec/klomp/frames_spec.rb", "spec/klomp/sentinel_spec.rb", "spec/klomp_spec.rb", "spec/spec_helper.rb", "spec/support/have_received.rb", ".
|
13
|
+
s.files = [".gemtest", ".rspec", ".simplecov", "ChangeLog.md", "Gemfile", "Gemfile.lock", "Manifest.txt", "README.md", "Rakefile", "klomp.gemspec", "lib/klomp.rb", "lib/klomp/connection.rb", "lib/klomp/frames.rb", "lib/klomp/sentinel.rb", "spec/acceptance/acceptance_spec.rb", "spec/acceptance/reconnect_spec.rb", "spec/frames/auth_error.txt", "spec/frames/connect.txt", "spec/frames/connect_vhost.txt", "spec/frames/connected.txt", "spec/frames/disconnect.txt", "spec/frames/error.txt", "spec/frames/greeting.txt", "spec/frames/message.txt", "spec/frames/receipt.txt", "spec/frames/subscribe.txt", "spec/frames/unsubscribe.txt", "spec/klomp/connection_spec.rb", "spec/klomp/frames_spec.rb", "spec/klomp/sentinel_spec.rb", "spec/klomp_spec.rb", "spec/spec_helper.rb", "spec/support/have_received.rb", "spec/support/shared_contexts.rb"]
|
14
14
|
s.homepage = "http://github.com/livingsocial/klomp"
|
15
15
|
s.rdoc_options = ["--main", "README.md"]
|
16
16
|
s.require_paths = ["lib"]
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_development_dependency(%q<simplecov>, ["~> 0.6.0"])
|
33
33
|
s.add_development_dependency(%q<em-proxy>, ["~> 0.1.0"])
|
34
34
|
s.add_development_dependency(%q<ci_reporter>, ["~> 1.7.0"])
|
35
|
+
s.add_development_dependency(%q<activesupport>, [">= 2.3.0"])
|
35
36
|
s.add_development_dependency(%q<hoe>, ["~> 3.0"])
|
36
37
|
else
|
37
38
|
s.add_dependency(%q<rdoc>, ["~> 3.10"])
|
@@ -44,6 +45,7 @@ Gem::Specification.new do |s|
|
|
44
45
|
s.add_dependency(%q<simplecov>, ["~> 0.6.0"])
|
45
46
|
s.add_dependency(%q<em-proxy>, ["~> 0.1.0"])
|
46
47
|
s.add_dependency(%q<ci_reporter>, ["~> 1.7.0"])
|
48
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.0"])
|
47
49
|
s.add_dependency(%q<hoe>, ["~> 3.0"])
|
48
50
|
end
|
49
51
|
else
|
@@ -57,6 +59,7 @@ Gem::Specification.new do |s|
|
|
57
59
|
s.add_dependency(%q<simplecov>, ["~> 0.6.0"])
|
58
60
|
s.add_dependency(%q<em-proxy>, ["~> 0.1.0"])
|
59
61
|
s.add_dependency(%q<ci_reporter>, ["~> 1.7.0"])
|
62
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.0"])
|
60
63
|
s.add_dependency(%q<hoe>, ["~> 3.0"])
|
61
64
|
end
|
62
65
|
end
|
data/lib/klomp.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Klomp
|
2
|
-
VERSION = '1.0.
|
2
|
+
VERSION = '1.0.7'
|
3
3
|
|
4
4
|
class Error < StandardError; end
|
5
5
|
|
@@ -14,7 +14,7 @@ class Klomp
|
|
14
14
|
def publish(queue, body, headers = {})
|
15
15
|
connections_remaining = connections.dup
|
16
16
|
begin
|
17
|
-
conn = connections_remaining.
|
17
|
+
conn = connections_remaining[rand(connections_remaining.size)]
|
18
18
|
conn.publish(queue, body, headers)
|
19
19
|
rescue
|
20
20
|
connections_remaining.delete conn
|
data/lib/klomp/connection.rb
CHANGED
@@ -84,7 +84,7 @@ class Klomp
|
|
84
84
|
private
|
85
85
|
def connect
|
86
86
|
@socket = TCPSocket.new *options['server']
|
87
|
-
@socket.set_encoding 'UTF-8'
|
87
|
+
@socket.set_encoding 'UTF-8' if @socket.respond_to?(:set_encoding)
|
88
88
|
write Frames::Connect.new(options)
|
89
89
|
frame = read Frames::Connected, @select_timeout
|
90
90
|
log_frame frame if logger
|
data/lib/klomp/frames.rb
CHANGED
@@ -5,9 +5,14 @@ class Klomp
|
|
5
5
|
class Frame
|
6
6
|
def name; @name ||= self.class.name.split('::').last.upcase; end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
8
|
+
def new_headers
|
9
|
+
# Dependency injection point for tests.
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
|
13
|
+
def headers; @headers ||= new_headers; end
|
14
|
+
def [](key); headers[key]; end
|
15
|
+
def []=(key, value); headers[key] = value; end
|
11
16
|
|
12
17
|
def body; @body ||= ""; end
|
13
18
|
def body=(b); @body = b; end
|
@@ -44,7 +49,7 @@ class Klomp
|
|
44
49
|
|
45
50
|
def parse_headers(data)
|
46
51
|
frame = nil
|
47
|
-
|
52
|
+
new_headers.tap do |headers|
|
48
53
|
data.lines.each do |line|
|
49
54
|
next if line == "\n"
|
50
55
|
unless frame
|
@@ -16,7 +16,7 @@ describe "Klomp acceptance", :acceptance => true do
|
|
16
16
|
|
17
17
|
context "publish" do
|
18
18
|
|
19
|
-
When { klomp.publish
|
19
|
+
When { klomp.publish("/queue/greeting", "hello") }
|
20
20
|
|
21
21
|
Then do
|
22
22
|
vhosts = apollo_api_get_json "/broker/virtual-hosts.json"
|
@@ -4,18 +4,24 @@ describe Klomp::Connection do
|
|
4
4
|
|
5
5
|
Given(:data) { frame(:connected) }
|
6
6
|
Given(:server) { "127.0.0.1:61613" }
|
7
|
-
Given(:
|
8
|
-
Given(:
|
9
|
-
Given(:
|
10
|
-
Given(:subscriber) { double "subscriber", call:nil }
|
7
|
+
Given(:socket) { double(TCPSocket, :gets => data, :write => nil, :set_encoding => nil, :close => nil) }
|
8
|
+
Given(:logger) { double("Logger", :error => nil, :warn => nil, :info => nil, :debug => nil).as_null_object }
|
9
|
+
Given(:subscriber) { double "subscriber", :call => nil }
|
11
10
|
Given(:thread) { double Thread }
|
12
|
-
Given(:sentinel) { double Klomp::Sentinel, alive
|
11
|
+
Given(:sentinel) { double Klomp::Sentinel, :alive? => true }
|
12
|
+
Given(:options) {
|
13
|
+
hsh = ActiveSupport::OrderedHash.new
|
14
|
+
hsh['login'] = 'admin'
|
15
|
+
hsh['passcode'] = 'password'
|
16
|
+
hsh['logger'] = logger
|
17
|
+
hsh
|
18
|
+
}
|
13
19
|
|
14
20
|
Given do
|
15
21
|
IO.stub!(:select).and_return([[socket], [socket]])
|
16
22
|
TCPSocket.stub!(:new).and_return socket
|
17
23
|
Thread.stub!(:new).and_return {|*args,&blk| thread.stub!(:block => blk); thread }
|
18
|
-
Klomp::Sentinel.stub!(new
|
24
|
+
Klomp::Sentinel.stub!(:new => sentinel)
|
19
25
|
end
|
20
26
|
|
21
27
|
context "new" do
|
@@ -78,7 +84,7 @@ describe Klomp::Connection do
|
|
78
84
|
|
79
85
|
context "logs when logger level is debug" do
|
80
86
|
|
81
|
-
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(debug
|
87
|
+
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(:debug? => true) } }
|
82
88
|
|
83
89
|
Then { logger.should have_received(:debug) }
|
84
90
|
|
@@ -100,7 +106,7 @@ describe Klomp::Connection do
|
|
100
106
|
|
101
107
|
context "and logs when logger level is debug" do
|
102
108
|
|
103
|
-
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(debug
|
109
|
+
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(:debug? => true) } }
|
104
110
|
|
105
111
|
Then { logger.should have_received(:debug) }
|
106
112
|
|
@@ -112,7 +118,7 @@ describe Klomp::Connection do
|
|
112
118
|
|
113
119
|
When do
|
114
120
|
connection.subscribe "/queue/greeting", subscriber
|
115
|
-
connection.subscribe "/queue/greeting", double("another subscriber that replaces the first", call
|
121
|
+
connection.subscribe "/queue/greeting", double("another subscriber that replaces the first", :call => nil)
|
116
122
|
end
|
117
123
|
|
118
124
|
Then { socket.should have_received(:write).with(frame(:subscribe)).once }
|
@@ -225,7 +231,7 @@ describe Klomp::Connection do
|
|
225
231
|
|
226
232
|
context "disconnect" do
|
227
233
|
|
228
|
-
Given!(:connection) { Klomp::Connection.new server, options
|
234
|
+
Given!(:connection) { Klomp::Connection.new server, options}
|
229
235
|
|
230
236
|
When(:result) { connection.disconnect }
|
231
237
|
|
@@ -293,7 +299,7 @@ describe Klomp::Connection do
|
|
293
299
|
Given!(:connection) { Klomp::Connection.new server, options }
|
294
300
|
|
295
301
|
Given do
|
296
|
-
thread.stub!(:raise).and_return {|e| raise e }
|
302
|
+
thread.stub!(:raise).and_return {|e, _| raise e }
|
297
303
|
socket.stub!(:gets).and_raise SystemCallError.new("some socket error")
|
298
304
|
end
|
299
305
|
|
data/spec/klomp/frames_spec.rb
CHANGED
data/spec/klomp/sentinel_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Klomp::Sentinel do
|
4
4
|
|
5
|
-
Given(:connection) { double "Connection", connected
|
5
|
+
Given(:connection) { double "Connection", :connected? => false, :reconnect => nil }
|
6
6
|
Given(:sentinel) { Klomp::Sentinel.new connection }
|
7
7
|
Given(:thread) { double Thread }
|
8
8
|
Given do
|
@@ -11,7 +11,7 @@ describe Klomp::Sentinel do
|
|
11
11
|
|
12
12
|
context "does nothing if the connection is already connected" do
|
13
13
|
|
14
|
-
Given { connection.stub!(connected
|
14
|
+
Given { connection.stub!(:connected? => true) }
|
15
15
|
|
16
16
|
When { sentinel }
|
17
17
|
|
data/spec/klomp_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Klomp do
|
|
4
4
|
|
5
5
|
Given(:servers) { ["127.0.0.1:61613", "127.0.0.1:67673"] }
|
6
6
|
Given(:connections) { Hash[*servers.map {|s| [s, double("connection #{s}")] }.flatten] }
|
7
|
-
Given { Klomp::Connection.stub!(:new).and_return {|s| connections[s] } }
|
7
|
+
Given { Klomp::Connection.stub!(:new).and_return {|s, _| connections[s] } }
|
8
8
|
Given(:klomp) { Klomp.new servers }
|
9
9
|
|
10
10
|
context "new" do
|
@@ -113,7 +113,7 @@ describe Klomp do
|
|
113
113
|
|
114
114
|
context "calls subscribe on all of the servers" do
|
115
115
|
|
116
|
-
Given { connections.values.each {|conn| conn.stub!(subscribe
|
116
|
+
Given { connections.values.each {|conn| conn.stub!(:subscribe => 42) } }
|
117
117
|
|
118
118
|
When(:result) { klomp.subscribe("/queue/greeting") { true } }
|
119
119
|
|
@@ -143,7 +143,7 @@ describe Klomp do
|
|
143
143
|
|
144
144
|
context "calls unsubscribe on all the servers" do
|
145
145
|
|
146
|
-
Given { connections.values.each {|conn| conn.stub!(unsubscribe
|
146
|
+
Given { connections.values.each {|conn| conn.stub!(:unsubscribe => 42) } }
|
147
147
|
|
148
148
|
When(:result) { klomp.unsubscribe("/queue/greeting") }
|
149
149
|
|
@@ -197,7 +197,7 @@ describe Klomp do
|
|
197
197
|
|
198
198
|
context "disconnects all the servers" do
|
199
199
|
|
200
|
-
Given { connections.values.each {|conn| conn.stub!(disconnect
|
200
|
+
Given { connections.values.each {|conn| conn.stub!(:disconnect => 42) } }
|
201
201
|
|
202
202
|
When(:result) { klomp.disconnect }
|
203
203
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
require 'simplecov'
|
1
|
+
require 'simplecov' if RUBY_VERSION >= '1.9'
|
2
2
|
require 'klomp'
|
3
3
|
require 'rspec'
|
4
4
|
require 'rspec-given'
|
5
|
+
require 'active_support'
|
5
6
|
|
6
7
|
Dir[File.expand_path('../support/', __FILE__) + '/*.rb'].each {|f| require f }
|
7
8
|
|
@@ -32,5 +33,11 @@ RSpec.configure do |config|
|
|
32
33
|
config.filter_run_excluding :performance
|
33
34
|
end
|
34
35
|
|
36
|
+
config.before :each do
|
37
|
+
Klomp::Frames::Frame.any_instance.stub(:new_headers) do
|
38
|
+
ActiveSupport::OrderedHash.new
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
35
42
|
config.include Frames
|
36
43
|
end
|
@@ -54,7 +54,7 @@ module RSpec::Matchers::HaveReceived
|
|
54
54
|
def initialize(message, expected_from)
|
55
55
|
@message, @mock = message, RSpec::Mocks::Mock.new
|
56
56
|
@mock.stub!(message)
|
57
|
-
@expectation = @mock.should_receive(message, expected_from
|
57
|
+
@expectation = @mock.should_receive(message, expected_from => expected_from)
|
58
58
|
end
|
59
59
|
|
60
60
|
def matches?(actual)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klomp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -171,6 +171,22 @@ dependencies:
|
|
171
171
|
- - ~>
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: 1.7.0
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: activesupport
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: 2.3.0
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 2.3.0
|
174
190
|
- !ruby/object:Gem::Dependency
|
175
191
|
name: hoe
|
176
192
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,6 +224,7 @@ extensions: []
|
|
208
224
|
extra_rdoc_files:
|
209
225
|
- Manifest.txt
|
210
226
|
files:
|
227
|
+
- .gemtest
|
211
228
|
- .rspec
|
212
229
|
- .simplecov
|
213
230
|
- ChangeLog.md
|
@@ -241,7 +258,6 @@ files:
|
|
241
258
|
- spec/spec_helper.rb
|
242
259
|
- spec/support/have_received.rb
|
243
260
|
- spec/support/shared_contexts.rb
|
244
|
-
- .gemtest
|
245
261
|
homepage: http://github.com/livingsocial/klomp
|
246
262
|
licenses: []
|
247
263
|
post_install_message:
|
@@ -258,7 +274,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
258
274
|
version: '0'
|
259
275
|
segments:
|
260
276
|
- 0
|
261
|
-
hash:
|
277
|
+
hash: 2933496602827248730
|
262
278
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
279
|
none: false
|
264
280
|
requirements:
|