blather 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -5
- data/CHANGELOG +7 -0
- data/lib/blather.rb +1 -0
- data/lib/blather/stanza/message.rb +4 -0
- data/lib/blather/stanza/message/muc_user.rb +117 -0
- data/lib/blather/stanza/muc/muc_user_base.rb +53 -0
- data/lib/blather/stanza/presence/muc.rb +6 -0
- data/lib/blather/stanza/presence/muc_user.rb +14 -21
- data/lib/blather/version.rb +1 -1
- data/spec/blather/stanza/message/muc_user_spec.rb +152 -0
- data/spec/blather/stanza/message_spec.rb +1 -1
- data/spec/blather/stanza/presence/muc_spec.rb +3 -1
- data/spec/blather/stanza/presence/muc_user_spec.rb +25 -4
- metadata +34 -30
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
develop
|
2
2
|
|
3
|
+
v0.6.2
|
4
|
+
Feature(benlangfeld): Add password support to MUCUser
|
5
|
+
Feature(benlangfeld): Add support for invitation elements to MUCUser messages
|
6
|
+
Feature(benlangfeld): Add support for MUC invite declines
|
7
|
+
Bugfix(benlangfeld): Don't implicitly create an invite node when checking invite status
|
8
|
+
Bugfix(benlangfeld): Ensure that form nodes are not duplicated on muc/muc_user presence stanzas
|
9
|
+
|
3
10
|
v0.6.1
|
4
11
|
Bugfix(benlangfeld): Ensure MUC presence nodes (joining) have a form element on creation
|
5
12
|
|
data/lib/blather.rb
CHANGED
@@ -180,6 +180,10 @@ class Stanza
|
|
180
180
|
klass = class_from_registration(e.element_name, ns)
|
181
181
|
end
|
182
182
|
|
183
|
+
if klass == Blather::Stanza::Presence::MUCUser
|
184
|
+
klass = Blather::Stanza::Message::MUCUser
|
185
|
+
end
|
186
|
+
|
183
187
|
if klass && klass != self && ![Blather::Stanza::X, Blather::Stanza::Iq].include?(klass)
|
184
188
|
klass.import(node)
|
185
189
|
else
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'blather/stanza/muc/muc_user_base'
|
2
|
+
|
3
|
+
module Blather
|
4
|
+
class Stanza
|
5
|
+
class Message
|
6
|
+
|
7
|
+
class MUCUser < Message
|
8
|
+
include Blather::Stanza::MUC::MUCUserBase
|
9
|
+
|
10
|
+
def self.new(to = nil, body = nil, type = :normal)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def invite?
|
15
|
+
!!find_invite_node
|
16
|
+
end
|
17
|
+
|
18
|
+
def invite_decline?
|
19
|
+
!!find_decline_node
|
20
|
+
end
|
21
|
+
|
22
|
+
def invite
|
23
|
+
if invite = find_invite_node
|
24
|
+
Invite.new invite
|
25
|
+
else
|
26
|
+
muc_user << (invite = Invite.new nil, nil, nil, self.document)
|
27
|
+
invite
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_invite_node
|
32
|
+
muc_user.find_first 'ns:invite', :ns => self.class.registered_ns
|
33
|
+
end
|
34
|
+
|
35
|
+
def decline
|
36
|
+
if decline = find_decline_node
|
37
|
+
Decline.new decline
|
38
|
+
else
|
39
|
+
muc_user << (decline = Decline.new nil, nil, nil, self.document)
|
40
|
+
decline
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_decline_node
|
45
|
+
muc_user.find_first 'ns:decline', :ns => self.class.registered_ns
|
46
|
+
end
|
47
|
+
|
48
|
+
class InviteBase < XMPPNode
|
49
|
+
def self.new(element_name, to = nil, from = nil, reason = nil, document = nil)
|
50
|
+
new_node = super element_name, document
|
51
|
+
|
52
|
+
case to
|
53
|
+
when self
|
54
|
+
to.document ||= document
|
55
|
+
return to
|
56
|
+
when Nokogiri::XML::Node
|
57
|
+
new_node.inherit to
|
58
|
+
when Hash
|
59
|
+
new_node.to = to[:to]
|
60
|
+
new_node.from = to[:from]
|
61
|
+
new_node.reason = to[:reason]
|
62
|
+
else
|
63
|
+
new_node.to = to
|
64
|
+
new_node.from = from
|
65
|
+
new_node.reason = reason
|
66
|
+
end
|
67
|
+
new_node
|
68
|
+
end
|
69
|
+
|
70
|
+
def to
|
71
|
+
read_attr :to
|
72
|
+
end
|
73
|
+
|
74
|
+
def to=(val)
|
75
|
+
write_attr :to, val
|
76
|
+
end
|
77
|
+
|
78
|
+
def from
|
79
|
+
read_attr :from
|
80
|
+
end
|
81
|
+
|
82
|
+
def from=(val)
|
83
|
+
write_attr :from, val
|
84
|
+
end
|
85
|
+
|
86
|
+
def reason
|
87
|
+
reason_node.content.strip
|
88
|
+
end
|
89
|
+
|
90
|
+
def reason=(val)
|
91
|
+
reason_node.content = val
|
92
|
+
end
|
93
|
+
|
94
|
+
def reason_node
|
95
|
+
unless reason = find_first('ns:reason', :ns => MUCUser.registered_ns)
|
96
|
+
self << (reason = XMPPNode.new('reason', self.document))
|
97
|
+
end
|
98
|
+
reason
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class Invite < InviteBase
|
103
|
+
def self.new(*args)
|
104
|
+
new_node = super :invite, *args
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class Decline < InviteBase
|
109
|
+
def self.new(*args)
|
110
|
+
new_node = super :decline, *args
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end # MUC
|
114
|
+
|
115
|
+
end # Presence
|
116
|
+
end # Stanza
|
117
|
+
end # Blather
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Blather
|
2
|
+
class Stanza
|
3
|
+
class MUC
|
4
|
+
|
5
|
+
module MUCUserBase
|
6
|
+
def self.included(klass)
|
7
|
+
klass.extend ClassMethods
|
8
|
+
klass.register :muc_user, :x, "http://jabber.org/protocol/muc#user"
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def new(*args)
|
13
|
+
super.tap { |e| e.muc_user }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def inherit(node)
|
18
|
+
muc_user.remove
|
19
|
+
super
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def password
|
24
|
+
find_password_node && password_node.content
|
25
|
+
end
|
26
|
+
|
27
|
+
def password=(var)
|
28
|
+
password_node.content = var
|
29
|
+
end
|
30
|
+
|
31
|
+
def muc_user
|
32
|
+
unless muc_user = find_first('ns:x', :ns => self.class.registered_ns)
|
33
|
+
self << (muc_user = XMPPNode.new('x', self.document))
|
34
|
+
muc_user.namespace = self.class.registered_ns
|
35
|
+
end
|
36
|
+
muc_user
|
37
|
+
end
|
38
|
+
|
39
|
+
def password_node
|
40
|
+
unless pw = find_password_node
|
41
|
+
muc_user << (pw = XMPPNode.new('password', self.document))
|
42
|
+
end
|
43
|
+
pw
|
44
|
+
end
|
45
|
+
|
46
|
+
def find_password_node
|
47
|
+
muc_user.find_first 'ns:password', :ns => self.class.registered_ns
|
48
|
+
end
|
49
|
+
end # MUCUserBase
|
50
|
+
|
51
|
+
end # MUC
|
52
|
+
end # Stanza
|
53
|
+
end # Blather
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'blather/stanza/muc/muc_user_base'
|
2
|
+
|
1
3
|
module Blather
|
2
4
|
class Stanza
|
3
5
|
class Presence
|
4
6
|
|
5
7
|
class MUCUser < Status
|
6
|
-
|
8
|
+
include Blather::Stanza::MUC::MUCUserBase
|
7
9
|
|
8
10
|
def affiliation
|
9
11
|
item.affiliation
|
@@ -40,29 +42,20 @@ class Presence
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
muc_user
|
50
|
-
end
|
51
|
-
|
52
|
-
def item
|
53
|
-
if item = muc_user.find_first('ns:item', :ns => self.class.registered_ns)
|
54
|
-
Item.new item
|
55
|
-
else
|
56
|
-
muc_user << (item = Item.new nil, nil, nil, self.document)
|
57
|
-
item
|
58
|
-
end
|
45
|
+
def item
|
46
|
+
if item = muc_user.find_first('ns:item', :ns => self.class.registered_ns)
|
47
|
+
Item.new item
|
48
|
+
else
|
49
|
+
muc_user << (item = Item.new nil, nil, nil, self.document)
|
50
|
+
item
|
59
51
|
end
|
52
|
+
end
|
60
53
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
54
|
+
def status
|
55
|
+
muc_user.find('ns:status', :ns => self.class.registered_ns).map do |status|
|
56
|
+
Status.new status
|
65
57
|
end
|
58
|
+
end
|
66
59
|
|
67
60
|
class Item < XMPPNode
|
68
61
|
def self.new(affiliation = nil, role = nil, jid = nil, document = nil)
|
data/lib/blather/version.rb
CHANGED
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
def muc_invite_xml
|
4
|
+
<<-XML
|
5
|
+
<message
|
6
|
+
from='coven@chat.shakespeare.lit'
|
7
|
+
id='nzd143v8'
|
8
|
+
to='hecate@shakespeare.lit'>
|
9
|
+
<x xmlns='http://jabber.org/protocol/muc#user'>
|
10
|
+
<invite to='hecate@shakespeare.lit' from='crone1@shakespeare.lit/desktop'>
|
11
|
+
<reason>
|
12
|
+
Hey Hecate, this is the place for all good witches!
|
13
|
+
</reason>
|
14
|
+
</invite>
|
15
|
+
<password>foobar</password>
|
16
|
+
</x>
|
17
|
+
</message>
|
18
|
+
XML
|
19
|
+
end
|
20
|
+
|
21
|
+
def muc_decline_xml
|
22
|
+
<<-XML
|
23
|
+
<message
|
24
|
+
from='hecate@shakespeare.lit/broom'
|
25
|
+
id='jk2vs61v'
|
26
|
+
to='coven@chat.shakespeare.lit'>
|
27
|
+
<x xmlns='http://jabber.org/protocol/muc#user'>
|
28
|
+
<decline to='crone1@shakespeare.lit' from='hecate@shakespeare.lit'>
|
29
|
+
<reason>
|
30
|
+
Sorry, I'm too busy right now.
|
31
|
+
</reason>
|
32
|
+
</decline>
|
33
|
+
</x>
|
34
|
+
</message>
|
35
|
+
XML
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'Blather::Stanza::Message::MUCUser' do
|
39
|
+
it 'ensures a form node is present on create' do
|
40
|
+
c = Blather::Stanza::Message::MUCUser.new
|
41
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Message::MUCUser.registered_ns).wont_be_empty
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'ensures a form node exists when calling #muc' do
|
45
|
+
c = Blather::Stanza::Message::MUCUser.new
|
46
|
+
c.remove_children :x
|
47
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Message::MUCUser.registered_ns).must_be_empty
|
48
|
+
|
49
|
+
c.muc_user.wont_be_nil
|
50
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Message::MUCUser.registered_ns).wont_be_empty
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'ensures the message type is :normal' do
|
54
|
+
m = Blather::Stanza::Message::MUCUser.new
|
55
|
+
m.normal?.must_equal true
|
56
|
+
end
|
57
|
+
|
58
|
+
it "must be able to set the password" do
|
59
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
60
|
+
muc_user.password.must_equal nil
|
61
|
+
muc_user.password = 'barbaz'
|
62
|
+
muc_user.password.must_equal 'barbaz'
|
63
|
+
muc_user.password = 'hello_world'
|
64
|
+
muc_user.password.must_equal 'hello_world'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should not be an #invite?" do
|
68
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
69
|
+
muc_user.invite?.must_equal false
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "with an invite element" do
|
73
|
+
it "should be an #invite?" do
|
74
|
+
muc_user = Blather::XMPPNode.import(parse_stanza(muc_invite_xml).root)
|
75
|
+
muc_user.invite?.must_equal true
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should know the invite attributes properly" do
|
79
|
+
muc_user = Blather::XMPPNode.import(parse_stanza(muc_invite_xml).root)
|
80
|
+
muc_user.must_be_instance_of Blather::Stanza::Message::MUCUser
|
81
|
+
invite = muc_user.invite
|
82
|
+
invite.to.must_equal 'hecate@shakespeare.lit'
|
83
|
+
invite.from.must_equal 'crone1@shakespeare.lit/desktop'
|
84
|
+
invite.reason.must_equal 'Hey Hecate, this is the place for all good witches!'
|
85
|
+
muc_user.password.must_equal 'foobar'
|
86
|
+
end
|
87
|
+
|
88
|
+
it "must be able to set the to jid" do
|
89
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
90
|
+
invite = muc_user.invite
|
91
|
+
invite.to.must_equal nil
|
92
|
+
invite.to = 'foo@bar.com'
|
93
|
+
invite.to.must_equal 'foo@bar.com'
|
94
|
+
end
|
95
|
+
|
96
|
+
it "must be able to set the from jid" do
|
97
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
98
|
+
invite = muc_user.invite
|
99
|
+
invite.from.must_equal nil
|
100
|
+
invite.from = 'foo@bar.com'
|
101
|
+
invite.from.must_equal 'foo@bar.com'
|
102
|
+
end
|
103
|
+
|
104
|
+
it "must be able to set the reason" do
|
105
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
106
|
+
invite = muc_user.invite
|
107
|
+
invite.reason.must_equal ''
|
108
|
+
invite.reason = 'Please join'
|
109
|
+
invite.reason.must_equal 'Please join'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "with a decline element" do
|
114
|
+
it "should be an #invite_decline?" do
|
115
|
+
muc_user = Blather::XMPPNode.import(parse_stanza(muc_decline_xml).root)
|
116
|
+
muc_user.must_be_instance_of Blather::Stanza::Message::MUCUser
|
117
|
+
muc_user.invite_decline?.must_equal true
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should know the decline attributes properly" do
|
121
|
+
muc_user = Blather::XMPPNode.import(parse_stanza(muc_decline_xml).root)
|
122
|
+
decline = muc_user.decline
|
123
|
+
decline.to.must_equal 'crone1@shakespeare.lit'
|
124
|
+
decline.from.must_equal 'hecate@shakespeare.lit'
|
125
|
+
decline.reason.must_equal "Sorry, I'm too busy right now."
|
126
|
+
end
|
127
|
+
|
128
|
+
it "must be able to set the to jid" do
|
129
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
130
|
+
decline = muc_user.decline
|
131
|
+
decline.to.must_equal nil
|
132
|
+
decline.to = 'foo@bar.com'
|
133
|
+
decline.to.must_equal 'foo@bar.com'
|
134
|
+
end
|
135
|
+
|
136
|
+
it "must be able to set the from jid" do
|
137
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
138
|
+
decline = muc_user.decline
|
139
|
+
decline.from.must_equal nil
|
140
|
+
decline.from = 'foo@bar.com'
|
141
|
+
decline.from.must_equal 'foo@bar.com'
|
142
|
+
end
|
143
|
+
|
144
|
+
it "must be able to set the reason" do
|
145
|
+
muc_user = Blather::Stanza::Message::MUCUser.new
|
146
|
+
decline = muc_user.decline
|
147
|
+
decline.reason.must_equal ''
|
148
|
+
decline.reason = 'Please join'
|
149
|
+
decline.reason.must_equal 'Please join'
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -275,7 +275,7 @@ describe Blather::Stanza::Message do
|
|
275
275
|
n.delayed?.must_equal true
|
276
276
|
n.delay.must_be_instance_of Blather::Stanza::Message::Delay
|
277
277
|
n.delay.from.must_equal 'coven@chat.shakespeare.lit'
|
278
|
-
n.delay.stamp.must_equal Time.
|
278
|
+
n.delay.stamp.must_equal Time.utc(2002, 10, 13, 23, 58, 37, 0)
|
279
279
|
n.delay.description.must_equal "Too slow"
|
280
280
|
end
|
281
281
|
end
|
@@ -16,7 +16,9 @@ describe 'Blather::Stanza::Presence::MUC' do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'must be importable' do
|
19
|
-
c = Blather::XMPPNode.import(parse_stanza(muc_xml).root)
|
19
|
+
c = Blather::XMPPNode.import(parse_stanza(muc_xml).root)
|
20
|
+
c.must_be_instance_of Blather::Stanza::Presence::MUC
|
21
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Presence::MUC.registered_ns).count.must_equal 1
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'ensures a form node is present on create' do
|
@@ -11,16 +11,13 @@ def muc_user_xml
|
|
11
11
|
role='participant'/>
|
12
12
|
<status code='100'/>
|
13
13
|
<status code='110'/>
|
14
|
+
<password>foobar</password>
|
14
15
|
</x>
|
15
16
|
</presence>
|
16
17
|
XML
|
17
18
|
end
|
18
19
|
|
19
20
|
describe 'Blather::Stanza::Presence::MUCUser' do
|
20
|
-
it 'registers itself' do
|
21
|
-
Blather::XMPPNode.class_from_registration(:x, 'http://jabber.org/protocol/muc#user' ).must_equal Blather::Stanza::Presence::MUCUser
|
22
|
-
end
|
23
|
-
|
24
21
|
it 'must be importable' do
|
25
22
|
muc_user = Blather::XMPPNode.import(parse_stanza(muc_user_xml).root)
|
26
23
|
muc_user.must_be_instance_of Blather::Stanza::Presence::MUCUser
|
@@ -28,6 +25,21 @@ describe 'Blather::Stanza::Presence::MUCUser' do
|
|
28
25
|
muc_user.jid.must_equal 'hag66@shakespeare.lit/pda'
|
29
26
|
muc_user.role.must_equal :participant
|
30
27
|
muc_user.status_codes.must_equal [100, 110]
|
28
|
+
muc_user.password.must_equal 'foobar'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'ensures a form node is present on create' do
|
32
|
+
c = Blather::Stanza::Presence::MUCUser.new
|
33
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Presence::MUCUser.registered_ns).wont_be_empty
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'ensures a form node exists when calling #muc' do
|
37
|
+
c = Blather::Stanza::Presence::MUCUser.new
|
38
|
+
c.remove_children :x
|
39
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Presence::MUCUser.registered_ns).must_be_empty
|
40
|
+
|
41
|
+
c.muc_user.wont_be_nil
|
42
|
+
c.xpath('ns:x', :ns => Blather::Stanza::Presence::MUCUser.registered_ns).wont_be_empty
|
31
43
|
end
|
32
44
|
|
33
45
|
it "must be able to set the affiliation" do
|
@@ -59,4 +71,13 @@ describe 'Blather::Stanza::Presence::MUCUser' do
|
|
59
71
|
muc_user.status_codes = [500]
|
60
72
|
muc_user.status_codes.must_equal [500]
|
61
73
|
end
|
74
|
+
|
75
|
+
it "must be able to set the password" do
|
76
|
+
muc_user = Blather::Stanza::Presence::MUCUser.new
|
77
|
+
muc_user.password.must_equal nil
|
78
|
+
muc_user.password = 'barbaz'
|
79
|
+
muc_user.password.must_equal 'barbaz'
|
80
|
+
muc_user.password = 'hello_world'
|
81
|
+
muc_user.password.must_equal 'hello_world'
|
82
|
+
end
|
62
83
|
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: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156245180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.12.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156245180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156244500 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.4.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156244500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: niceogiri
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156243540 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.1.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156243540
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &2156242620 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 3.0.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2156242620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: minitest
|
60
|
-
requirement: &
|
60
|
+
requirement: &2156241660 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.7.1
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2156241660
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &2156240420 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.9.12
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2156240420
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
requirement: &
|
82
|
+
requirement: &2156239840 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.0.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2156239840
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rcov
|
93
|
-
requirement: &
|
93
|
+
requirement: &2156238560 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.9.9
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2156238560
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: yard
|
104
|
-
requirement: &
|
104
|
+
requirement: &2156237900 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.6.1
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2156237900
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rake
|
115
|
-
requirement: &
|
115
|
+
requirement: &2156237420 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2156237420
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: guard-minitest
|
126
|
-
requirement: &
|
126
|
+
requirement: &2156236560 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *2156236560
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: bluecloth
|
137
|
-
requirement: &
|
137
|
+
requirement: &2156235340 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *2156235340
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: growl_notify
|
148
|
-
requirement: &
|
148
|
+
requirement: &2156233800 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *2156233800
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: rb-fsevent
|
159
|
-
requirement: &
|
159
|
+
requirement: &2156232440 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,7 +164,7 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *2156232440
|
168
168
|
description: An XMPP DSL for Ruby written on top of EventMachine and Nokogiri
|
169
169
|
email: sprsquish@gmail.com
|
170
170
|
executables: []
|
@@ -228,6 +228,8 @@ files:
|
|
228
228
|
- lib/blather/stanza/iq/si.rb
|
229
229
|
- lib/blather/stanza/iq/vcard.rb
|
230
230
|
- lib/blather/stanza/message.rb
|
231
|
+
- lib/blather/stanza/message/muc_user.rb
|
232
|
+
- lib/blather/stanza/muc/muc_user_base.rb
|
231
233
|
- lib/blather/stanza/presence.rb
|
232
234
|
- lib/blather/stanza/presence/c.rb
|
233
235
|
- lib/blather/stanza/presence/muc.rb
|
@@ -283,6 +285,7 @@ files:
|
|
283
285
|
- spec/blather/stanza/iq/si_spec.rb
|
284
286
|
- spec/blather/stanza/iq/vcard_spec.rb
|
285
287
|
- spec/blather/stanza/iq_spec.rb
|
288
|
+
- spec/blather/stanza/message/muc_user_spec.rb
|
286
289
|
- spec/blather/stanza/message_spec.rb
|
287
290
|
- spec/blather/stanza/presence/c_spec.rb
|
288
291
|
- spec/blather/stanza/presence/muc_spec.rb
|
@@ -365,6 +368,7 @@ test_files:
|
|
365
368
|
- spec/blather/stanza/iq/si_spec.rb
|
366
369
|
- spec/blather/stanza/iq/vcard_spec.rb
|
367
370
|
- spec/blather/stanza/iq_spec.rb
|
371
|
+
- spec/blather/stanza/message/muc_user_spec.rb
|
368
372
|
- spec/blather/stanza/message_spec.rb
|
369
373
|
- spec/blather/stanza/presence/c_spec.rb
|
370
374
|
- spec/blather/stanza/presence/muc_spec.rb
|