blather 1.2.0 → 2.0.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.
- 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:
|