blather 0.6.1 → 0.6.2

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.
@@ -1,11 +1,13 @@
1
1
  rvm:
2
- - 1.9.2
3
- - rbx
4
- - rbx-2.0
5
- - jruby
6
2
  - 1.8.7
7
3
  - ree
8
- - ruby-head
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - jruby-18mode
7
+ - jruby-19mode
8
+ - rbx-18mode
9
+ - rbx-19mode
10
+ - jruby
9
11
 
10
12
  branches:
11
13
  only:
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
 
@@ -43,6 +43,7 @@
43
43
  blather/stanza/disco/disco_items
44
44
  blather/stanza/disco/capabilities
45
45
  blather/stanza/message
46
+ blather/stanza/message/muc_user
46
47
  blather/stanza/presence
47
48
  blather/stanza/presence/c
48
49
  blather/stanza/presence/status
@@ -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
@@ -11,6 +11,12 @@ class Presence
11
11
  new_node
12
12
  end
13
13
 
14
+ def inherit(node)
15
+ muc.remove
16
+ super
17
+ self
18
+ end
19
+
14
20
  def muc
15
21
  unless muc = find_first('ns:x', :ns => self.class.registered_ns)
16
22
  self << (muc = XMPPNode.new('x', self.document))
@@ -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
- register :muc_user, :x, "http://jabber.org/protocol/muc#user"
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
- private
44
- def muc_user
45
- unless muc_user = find_first('ns:x', :ns => self.class.registered_ns)
46
- self << (muc_user = XMPPNode.new('x', self.document))
47
- muc_user.namespace = self.class.registered_ns
48
- end
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
- def status
62
- muc_user.find('ns:status', :ns => self.class.registered_ns).map do |status|
63
- Status.new status
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)
@@ -1,4 +1,4 @@
1
1
  module Blather
2
2
  # Blather version number
3
- VERSION = '0.6.1'
3
+ VERSION = '0.6.2'
4
4
  end
@@ -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.new(2002, 10, 13, 23, 58, 37, 0)
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).must_be_instance_of Blather::Stanza::Presence::MUC
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.1
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-25 00:00:00.000000000 Z
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: &2164385480 !ruby/object:Gem::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: *2164385480
24
+ version_requirements: *2156245180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &2164384740 !ruby/object:Gem::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: *2164384740
35
+ version_requirements: *2156244500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: niceogiri
38
- requirement: &2164384120 !ruby/object:Gem::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: *2164384120
46
+ version_requirements: *2156243540
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &2164383500 !ruby/object:Gem::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: *2164383500
57
+ version_requirements: *2156242620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: minitest
60
- requirement: &2164382640 !ruby/object:Gem::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: *2164382640
68
+ version_requirements: *2156241660
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &2164381420 !ruby/object:Gem::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: *2164381420
79
+ version_requirements: *2156240420
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &2164380680 !ruby/object:Gem::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: *2164380680
90
+ version_requirements: *2156239840
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rcov
93
- requirement: &2164379680 !ruby/object:Gem::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: *2164379680
101
+ version_requirements: *2156238560
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: yard
104
- requirement: &2164378720 !ruby/object:Gem::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: *2164378720
112
+ version_requirements: *2156237900
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rake
115
- requirement: &2164378200 !ruby/object:Gem::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: *2164378200
123
+ version_requirements: *2156237420
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: guard-minitest
126
- requirement: &2164377560 !ruby/object:Gem::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: *2164377560
134
+ version_requirements: *2156236560
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: bluecloth
137
- requirement: &2164376360 !ruby/object:Gem::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: *2164376360
145
+ version_requirements: *2156235340
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: growl_notify
148
- requirement: &2164373280 !ruby/object:Gem::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: *2164373280
156
+ version_requirements: *2156233800
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rb-fsevent
159
- requirement: &2164372620 !ruby/object:Gem::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: *2164372620
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