blather 1.2.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +7 -7
- data/CHANGELOG.md +8 -0
- data/blather.gemspec +6 -6
- data/lib/blather.rb +1 -1
- data/lib/blather/client/client.rb +30 -6
- data/lib/blather/version.rb +1 -1
- data/spec/blather/client/client_spec.rb +73 -68
- data/spec/blather/client/dsl/pubsub_spec.rb +121 -121
- data/spec/blather/client/dsl_spec.rb +9 -9
- data/spec/blather/errors/sasl_error_spec.rb +3 -3
- data/spec/blather/errors/stanza_error_spec.rb +26 -26
- data/spec/blather/errors/stream_error_spec.rb +22 -22
- data/spec/blather/errors_spec.rb +7 -7
- data/spec/blather/file_transfer_spec.rb +9 -9
- data/spec/blather/jid_spec.rb +29 -29
- data/spec/blather/roster_item_spec.rb +18 -18
- data/spec/blather/roster_spec.rb +18 -18
- data/spec/blather/stanza/discos/disco_info_spec.rb +56 -56
- data/spec/blather/stanza/discos/disco_items_spec.rb +33 -33
- data/spec/blather/stanza/iq/command_spec.rb +51 -51
- data/spec/blather/stanza/iq/ibb_spec.rb +15 -15
- data/spec/blather/stanza/iq/ping_spec.rb +8 -8
- data/spec/blather/stanza/iq/query_spec.rb +15 -15
- data/spec/blather/stanza/iq/roster_spec.rb +29 -29
- data/spec/blather/stanza/iq/s5b_spec.rb +7 -7
- data/spec/blather/stanza/iq/si_spec.rb +17 -17
- data/spec/blather/stanza/iq/vcard_spec.rb +19 -19
- data/spec/blather/stanza/iq_spec.rb +11 -11
- data/spec/blather/stanza/message/muc_user_spec.rb +32 -32
- data/spec/blather/stanza/message_spec.rb +53 -54
- data/spec/blather/stanza/presence/c_spec.rb +11 -11
- data/spec/blather/stanza/presence/muc_spec.rb +7 -7
- data/spec/blather/stanza/presence/muc_user_spec.rb +22 -22
- data/spec/blather/stanza/presence/status_spec.rb +33 -33
- data/spec/blather/stanza/presence/subscription_spec.rb +22 -22
- data/spec/blather/stanza/presence_spec.rb +30 -30
- data/spec/blather/stanza/pubsub/affiliations_spec.rb +11 -11
- data/spec/blather/stanza/pubsub/create_spec.rb +10 -10
- data/spec/blather/stanza/pubsub/event_spec.rb +24 -24
- data/spec/blather/stanza/pubsub/items_spec.rb +20 -20
- data/spec/blather/stanza/pubsub/publish_spec.rb +21 -21
- data/spec/blather/stanza/pubsub/retract_spec.rb +19 -19
- data/spec/blather/stanza/pubsub/subscribe_spec.rb +17 -17
- data/spec/blather/stanza/pubsub/subscription_spec.rb +28 -28
- data/spec/blather/stanza/pubsub/subscriptions_spec.rb +13 -13
- data/spec/blather/stanza/pubsub/unsubscribe_spec.rb +22 -22
- data/spec/blather/stanza/pubsub_owner/delete_spec.rb +9 -9
- data/spec/blather/stanza/pubsub_owner/purge_spec.rb +9 -9
- data/spec/blather/stanza/pubsub_owner_spec.rb +6 -6
- data/spec/blather/stanza/pubsub_spec.rb +15 -15
- data/spec/blather/stanza/x_spec.rb +53 -53
- data/spec/blather/stanza_spec.rb +39 -39
- data/spec/blather/stream/client_spec.rb +160 -160
- data/spec/blather/stream/component_spec.rb +8 -10
- data/spec/blather/stream/parser_spec.rb +25 -25
- data/spec/blather/stream/ssl_spec.rb +3 -3
- data/spec/blather/xmpp_node_spec.rb +9 -9
- data/spec/blather_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +26 -27
@@ -42,34 +42,32 @@ describe Blather::Stream::Component do
|
|
42
42
|
when nil
|
43
43
|
state = :started
|
44
44
|
server.send_data "<?xml version='1.0'?><stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' id='12345'>"
|
45
|
-
val.
|
45
|
+
expect(val).to match(/stream:stream/)
|
46
46
|
|
47
47
|
when :started
|
48
48
|
server.send_data '<handshake/>'
|
49
49
|
EM.stop
|
50
|
-
val.
|
50
|
+
expect(val).to eq("<handshake>#{Digest::SHA1.hexdigest('12345'+"secret")}</handshake>")
|
51
51
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'raises a NoConnection exception if the connection is unbound before it can be completed' do
|
57
|
-
|
57
|
+
expect do
|
58
58
|
EventMachine::run {
|
59
59
|
EM.add_timer(0.5) { EM.stop if EM.reactor_running? }
|
60
60
|
|
61
61
|
Blather::Stream::Component.start client, jid, 'pass', '127.0.0.1', 50000 - rand(1000)
|
62
62
|
}
|
63
|
-
end.
|
63
|
+
end.to raise_error Blather::Stream::ConnectionFailed
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'starts the stream once the connection is complete' do
|
67
|
-
mocked_server(1) { |val, _| EM.stop; val.
|
67
|
+
mocked_server(1) { |val, _| EM.stop; expect(val).to match(/stream:stream/) }
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'sends stanzas to the client when the stream is ready' do
|
71
|
-
pending "This hangs the test suite" if jruby?
|
72
|
-
|
73
71
|
client.stubs :post_init
|
74
72
|
client.expects(:receive_data).with do |n|
|
75
73
|
EM.stop
|
@@ -82,12 +80,12 @@ describe Blather::Stream::Component do
|
|
82
80
|
when nil
|
83
81
|
state = :started
|
84
82
|
server.send_data "<?xml version='1.0'?><stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' id='12345'>"
|
85
|
-
val.
|
83
|
+
expect(val).to match(/stream:stream/)
|
86
84
|
|
87
85
|
when :started
|
88
86
|
server.send_data '<handshake/>'
|
89
87
|
server.send_data "<message to='comp.id' from='d@e/f' type='chat' xml:lang='en'><body>Message!</body></message>"
|
90
|
-
val.
|
88
|
+
expect(val).to eq("<handshake>#{Digest::SHA1.hexdigest('12345'+"secret")}</handshake>")
|
91
89
|
|
92
90
|
end
|
93
91
|
end
|
@@ -98,7 +96,7 @@ describe Blather::Stream::Component do
|
|
98
96
|
|
99
97
|
msg = Blather::Stanza::Message.new 'to@jid.com', 'body'
|
100
98
|
comp = Blather::Stream::Component.new nil, client, 'jid.com', 'pass'
|
101
|
-
comp.expects(:send_data).with { |s| s.
|
99
|
+
comp.expects(:send_data).with { |s| expect(s).to match(/^<message[^>]*from="jid\.com"/) }
|
102
100
|
comp.send msg
|
103
101
|
end
|
104
102
|
end
|
@@ -21,19 +21,19 @@ describe Blather::Stream::Parser do
|
|
21
21
|
def process(*data)
|
22
22
|
client.latch = CountDownLatch.new 1
|
23
23
|
data.each { |d| subject.receive_data d }
|
24
|
-
client.latch.wait(2).
|
24
|
+
expect(client.latch.wait(2)).to be true
|
25
25
|
end
|
26
26
|
|
27
27
|
def check_parse(data)
|
28
28
|
process data
|
29
|
-
client.data.size.
|
30
|
-
client.data[0].to_s.gsub(/\n\s*/,'').
|
29
|
+
expect(client.data.size).to eq(1)
|
30
|
+
expect(client.data[0].to_s.gsub(/\n\s*/,'')).to eq(data)
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'handles fragmented parsing' do
|
34
34
|
process '<foo>', '<bar/>', '</foo>'
|
35
|
-
client.data.size.
|
36
|
-
client.data[0].to_s.gsub(/\n\s*/,'').
|
35
|
+
expect(client.data.size).to eq(1)
|
36
|
+
expect(client.data[0].to_s.gsub(/\n\s*/,'')).to eq('<foo><bar/></foo>')
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'handles a basic example' do
|
@@ -95,41 +95,41 @@ describe Blather::Stream::Parser do
|
|
95
95
|
"</message>"
|
96
96
|
]
|
97
97
|
process *data
|
98
|
-
client.data.size.
|
99
|
-
Nokogiri::XML(client.data[0].to_s.gsub(/\n\s*/, '')).to_s.
|
100
|
-
client.data[0].xpath('//*[namespace-uri()="urn:ietf:params:xml:ns:xmpp-stanzas"]').size.
|
98
|
+
expect(client.data.size).to eq(1)
|
99
|
+
expect(Nokogiri::XML(client.data[0].to_s.gsub(/\n\s*/, '')).to_s).to eq(Nokogiri::XML(data.join).to_s)
|
100
|
+
expect(client.data[0].xpath('//*[namespace-uri()="urn:ietf:params:xml:ns:xmpp-stanzas"]').size).to eq(2)
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'handles not absolute namespaces' do
|
104
|
-
|
104
|
+
expect do
|
105
105
|
process '<iq type="result" id="blather0007" to="n@d/r"><vCard xmlns="vcard-temp"/></iq>'
|
106
|
-
end.
|
106
|
+
end.not_to raise_error
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'responds with stream:stream as a separate response' do
|
110
110
|
process '<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" to="example.com" version="1.0">',
|
111
111
|
'<foo/>'
|
112
|
-
client.data.size.
|
113
|
-
client.data[0].document.xpath('/stream:stream[@to="example.com" and @version="1.0"]', 'xmlns' => 'jabber:client', 'stream' => 'http://etherx.jabber.org/streams').size.
|
114
|
-
client.data[1].to_s.
|
112
|
+
expect(client.data.size).to eq(2)
|
113
|
+
expect(client.data[0].document.xpath('/stream:stream[@to="example.com" and @version="1.0"]', 'xmlns' => 'jabber:client', 'stream' => 'http://etherx.jabber.org/streams').size).to eq(1)
|
114
|
+
expect(client.data[1].to_s).to eq('<foo/>')
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'response with stream:end when receiving </stream:stream>' do
|
118
118
|
process '<stream:stream xmlns:stream="http://etherx.jabber.org/streams"/>'
|
119
|
-
client.data.size.
|
120
|
-
client.data[1].to_s.
|
119
|
+
expect(client.data.size).to eq(2)
|
120
|
+
expect(client.data[1].to_s).to eq('<stream:end xmlns:stream="http://etherx.jabber.org/streams"/>')
|
121
121
|
end
|
122
122
|
|
123
123
|
it 'raises ParseError when an error is sent' do
|
124
|
-
|
124
|
+
expect { process "<stream:stream>" }.to raise_error(Blather::ParseError)
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'handles stream stanzas without an issue' do
|
128
128
|
process '<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" to="example.com" version="1.0">',
|
129
129
|
'<stream:features/>'
|
130
|
-
client.data.size.
|
131
|
-
client.data[0].document.xpath('/stream:stream[@to="example.com" and @version="1.0"]', 'xmlns' => 'jabber:client', 'stream' => 'http://etherx.jabber.org/streams').size.
|
132
|
-
client.data[1].to_s.
|
130
|
+
expect(client.data.size).to eq(2)
|
131
|
+
expect(client.data[0].document.xpath('/stream:stream[@to="example.com" and @version="1.0"]', 'xmlns' => 'jabber:client', 'stream' => 'http://etherx.jabber.org/streams').size).to eq(1)
|
132
|
+
expect(client.data[1].to_s).to eq('<stream:features xmlns:stream="http://etherx.jabber.org/streams"/>')
|
133
133
|
end
|
134
134
|
|
135
135
|
it 'ignores the client namespace on stanzas' do
|
@@ -137,9 +137,9 @@ describe Blather::Stream::Parser do
|
|
137
137
|
"<body>exit</body>",
|
138
138
|
"<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>exit</body></html>",
|
139
139
|
"</message>"
|
140
|
-
client.data.size.
|
141
|
-
client.data[0].document.xpath('/message/body[.="exit"]').
|
142
|
-
client.data[0].document.xpath('/message/im:html/xhtml:body[.="exit"]', 'im' => 'http://jabber.org/protocol/xhtml-im', 'xhtml' => 'http://www.w3.org/1999/xhtml').
|
140
|
+
expect(client.data.size).to eq(1)
|
141
|
+
expect(client.data[0].document.xpath('/message/body[.="exit"]')).not_to be_empty
|
142
|
+
expect(client.data[0].document.xpath('/message/im:html/xhtml:body[.="exit"]', 'im' => 'http://jabber.org/protocol/xhtml-im', 'xhtml' => 'http://www.w3.org/1999/xhtml')).not_to be_empty
|
143
143
|
end
|
144
144
|
|
145
145
|
it 'ignores the component namespace on stanzas' do
|
@@ -147,8 +147,8 @@ describe Blather::Stream::Parser do
|
|
147
147
|
"<body>exit</body>",
|
148
148
|
"<html xmlns='http://jabber.org/protocol/xhtml-im'><body xmlns='http://www.w3.org/1999/xhtml'>exit</body></html>",
|
149
149
|
"</message>"
|
150
|
-
client.data.size.
|
151
|
-
client.data[0].document.xpath('/message/body[.="exit"]').
|
152
|
-
client.data[0].document.xpath('/message/im:html/xhtml:body[.="exit"]', 'im' => 'http://jabber.org/protocol/xhtml-im', 'xhtml' => 'http://www.w3.org/1999/xhtml').
|
150
|
+
expect(client.data.size).to eq(1)
|
151
|
+
expect(client.data[0].document.xpath('/message/body[.="exit"]')).not_to be_empty
|
152
|
+
expect(client.data[0].document.xpath('/message/im:html/xhtml:body[.="exit"]', 'im' => 'http://jabber.org/protocol/xhtml-im', 'xhtml' => 'http://www.w3.org/1999/xhtml')).not_to be_empty
|
153
153
|
end
|
154
154
|
end
|
@@ -10,15 +10,15 @@ describe Blather::CertStore do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'can verify valid cert' do
|
13
|
-
subject.trusted?(cert).
|
13
|
+
expect(subject.trusted?(cert)).to be true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'can verify invalid cert' do
|
17
|
-
subject.trusted?(
|
17
|
+
expect(subject.trusted?('foo bar baz')).to be_nil
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'cannot verify when the cert authority is not trusted' do
|
21
21
|
@store = Blather::CertStore.new("../")
|
22
|
-
@store.trusted?(cert).
|
22
|
+
expect(@store.trusted?(cert)).to be false
|
23
23
|
end
|
24
24
|
end
|
@@ -6,33 +6,33 @@ describe Blather::XMPPNode do
|
|
6
6
|
it 'generates a node based on the registered_name' do
|
7
7
|
foo = Class.new(Blather::XMPPNode)
|
8
8
|
foo.registered_name = 'foo'
|
9
|
-
foo.new.element_name.
|
9
|
+
expect(foo.new.element_name).to eq('foo')
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'sets the namespace on creation' do
|
13
13
|
foo = Class.new(Blather::XMPPNode)
|
14
14
|
foo.registered_ns = 'foo'
|
15
|
-
foo.new('foo').namespace.href.
|
15
|
+
expect(foo.new('foo').namespace.href).to eq('foo')
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'registers sub classes' do
|
19
19
|
class RegistersSubClass < Blather::XMPPNode; register 'foo', 'foo:bar'; end
|
20
|
-
RegistersSubClass.registered_name.
|
21
|
-
RegistersSubClass.registered_ns.
|
22
|
-
Blather::XMPPNode.class_from_registration('foo', 'foo:bar').
|
20
|
+
expect(RegistersSubClass.registered_name).to eq('foo')
|
21
|
+
expect(RegistersSubClass.registered_ns).to eq('foo:bar')
|
22
|
+
expect(Blather::XMPPNode.class_from_registration('foo', 'foo:bar')).to eq(RegistersSubClass)
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'imports another node' do
|
26
26
|
class ImportSubClass < Blather::XMPPNode; register 'foo', 'foo:bar'; end
|
27
27
|
n = Blather::XMPPNode.new('foo')
|
28
28
|
n.namespace = 'foo:bar'
|
29
|
-
Blather::XMPPNode.import(n).
|
29
|
+
expect(Blather::XMPPNode.import(n)).to be_kind_of ImportSubClass
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'can convert itself into a stanza' do
|
33
33
|
class StanzaConvert < Blather::XMPPNode; register 'foo'; end
|
34
34
|
n = Blather::XMPPNode.new('foo')
|
35
|
-
n.to_stanza.
|
35
|
+
expect(n.to_stanza).to be_kind_of StanzaConvert
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'can parse a string and import it' do
|
@@ -40,8 +40,8 @@ describe Blather::XMPPNode do
|
|
40
40
|
string = '<foo/>'
|
41
41
|
n = Nokogiri::XML(string).root
|
42
42
|
i = Blather::XMPPNode.import n
|
43
|
-
i.
|
43
|
+
expect(i).to be_kind_of StanzaParse
|
44
44
|
p = Blather::XMPPNode.parse string
|
45
|
-
p.
|
45
|
+
expect(p).to be_kind_of StanzaParse
|
46
46
|
end
|
47
47
|
end
|
data/spec/blather_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'blather'
|
2
2
|
require 'countdownlatch'
|
3
|
+
require 'sucker_punch/testing/inline'
|
3
4
|
|
4
5
|
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
5
6
|
|
@@ -9,7 +10,6 @@ RSpec.configure do |config|
|
|
9
10
|
config.run_all_when_everything_filtered = true
|
10
11
|
|
11
12
|
config.before(:each) do
|
12
|
-
GirlFriday::WorkQueue.immediate!
|
13
13
|
Blather::Stream::Parser.debug = true
|
14
14
|
Blather.logger = Logger.new($stdout).tap { |logger| logger.level = Logger::DEBUG }
|
15
15
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Smick
|
@@ -9,48 +9,48 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.2'
|
18
21
|
- - ">="
|
19
22
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.
|
23
|
+
version: 1.2.6
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.2'
|
25
31
|
- - ">="
|
26
32
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.
|
33
|
+
version: 1.2.6
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: nokogiri
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - "~>"
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
40
|
+
version: '1.8'
|
35
41
|
- - ">="
|
36
42
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
38
|
-
- - "<="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.6.1
|
43
|
+
version: 1.8.3
|
41
44
|
type: :runtime
|
42
45
|
prerelease: false
|
43
46
|
version_requirements: !ruby/object:Gem::Requirement
|
44
47
|
requirements:
|
45
48
|
- - "~>"
|
46
49
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
50
|
+
version: '1.8'
|
48
51
|
- - ">="
|
49
52
|
- !ruby/object:Gem::Version
|
50
|
-
version: 1.
|
51
|
-
- - "<="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.6.1
|
53
|
+
version: 1.8.3
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: niceogiri
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,19 +80,19 @@ dependencies:
|
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: 2.3.11
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
83
|
+
name: sucker_punch
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
88
|
+
version: '2.0'
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- - "
|
93
|
+
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
95
|
+
version: '2.0'
|
96
96
|
- !ruby/object:Gem::Dependency
|
97
97
|
name: bundler
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,28 +127,28 @@ dependencies:
|
|
127
127
|
requirements:
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
130
|
+
version: '3.0'
|
131
131
|
type: :development
|
132
132
|
prerelease: false
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
137
|
+
version: '3.0'
|
138
138
|
- !ruby/object:Gem::Dependency
|
139
139
|
name: mocha
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: '0
|
144
|
+
version: '1.0'
|
145
145
|
type: :development
|
146
146
|
prerelease: false
|
147
147
|
version_requirements: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: '0
|
151
|
+
version: '1.0'
|
152
152
|
- !ruby/object:Gem::Dependency
|
153
153
|
name: guard-rspec
|
154
154
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,14 +169,14 @@ dependencies:
|
|
169
169
|
requirements:
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version:
|
172
|
+
version: 0.9.11
|
173
173
|
type: :development
|
174
174
|
prerelease: false
|
175
175
|
version_requirements: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version:
|
179
|
+
version: 0.9.11
|
180
180
|
- !ruby/object:Gem::Dependency
|
181
181
|
name: bluecloth
|
182
182
|
requirement: !ruby/object:Gem::Requirement
|
@@ -398,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
398
398
|
version: '0'
|
399
399
|
requirements: []
|
400
400
|
rubyforge_project:
|
401
|
-
rubygems_version: 2.
|
401
|
+
rubygems_version: 2.7.3
|
402
402
|
signing_key:
|
403
403
|
specification_version: 4
|
404
404
|
summary: Simpler XMPP built for speed
|
@@ -459,4 +459,3 @@ test_files:
|
|
459
459
|
- spec/fixtures/pubsub.rb
|
460
460
|
- spec/spec_helper.rb
|
461
461
|
- spec/support/mock_server.rb
|
462
|
-
has_rdoc:
|