jubjub 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.mdown +6 -1
- data/lib/jubjub/connection/xmpp_gateway/muc.rb +14 -2
- data/lib/jubjub/muc.rb +7 -0
- data/spec/connection/xmpp_gateway_spec.rb +22 -0
- data/spec/fixtures/vcr_cassettes/muc_exit.yml +91 -0
- data/spec/models/muc_spec.rb +28 -0
- metadata +6 -4
data/README.mdown
CHANGED
@@ -62,11 +62,16 @@ Examples
|
|
62
62
|
room = u.mucs.create('customjub'){|c|
|
63
63
|
c['muc#roomconfig_allowinvites'] = false
|
64
64
|
}
|
65
|
-
|
65
|
+
|
66
66
|
# Destroy a room
|
67
67
|
room.destroy
|
68
68
|
=> true
|
69
69
|
|
70
|
+
# Create a persistent room and exit it
|
71
|
+
u.mucs.create('persistent'){|c|
|
72
|
+
c['muc#roomconfig_persistentroom'] = true
|
73
|
+
}.exit
|
74
|
+
|
70
75
|
TODO
|
71
76
|
====
|
72
77
|
|
@@ -327,11 +327,23 @@ module Jubjub
|
|
327
327
|
}
|
328
328
|
end
|
329
329
|
|
330
|
+
# http://xmpp.org/extensions/xep-0045.html#exit
|
331
|
+
# <presence
|
332
|
+
# from='hag66@shakespeare.lit/pda'
|
333
|
+
# to='darkcave@chat.shakespeare.lit/thirdwitch'
|
334
|
+
# type='unavailable'/>
|
335
|
+
def exit(full_jid)
|
336
|
+
presence full_jid, :unavailable
|
337
|
+
end
|
338
|
+
|
330
339
|
private
|
331
340
|
|
332
|
-
def presence(full_jid)
|
341
|
+
def presence(full_jid, availability = :available)
|
342
|
+
options = { :to => full_jid }
|
343
|
+
options[:type] = availability unless availability == :available
|
344
|
+
|
333
345
|
request = Nokogiri::XML::Builder.new do |xml|
|
334
|
-
xml.presence_(
|
346
|
+
xml.presence_(options) {
|
335
347
|
xml.x_('xmlns' => 'http://jabber.org/protocol/muc')
|
336
348
|
}
|
337
349
|
end
|
data/lib/jubjub/muc.rb
CHANGED
@@ -9,6 +9,13 @@ module Jubjub
|
|
9
9
|
@connection = connection
|
10
10
|
end
|
11
11
|
|
12
|
+
def exit(nick = nil)
|
13
|
+
full_jid = Jubjub::Jid.new @jid.node, @jid.domain, nick || @connection.jid.node
|
14
|
+
|
15
|
+
@connection.muc.exit(full_jid)
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
12
19
|
def destroy
|
13
20
|
@connection.muc.destroy(@jid)
|
14
21
|
end
|
@@ -115,6 +115,28 @@ describe Jubjub::Connection::XmppGateway do
|
|
115
115
|
|
116
116
|
end
|
117
117
|
|
118
|
+
describe "exit" do
|
119
|
+
use_vcr_cassette 'muc exit', :record => :new_episodes
|
120
|
+
|
121
|
+
before do
|
122
|
+
@full_jid = Jubjub::Jid.new 'extra@conference.theo-template.local/nick'
|
123
|
+
@jid = Jubjub::Jid.new 'extra@conference.theo-template.local'
|
124
|
+
@connection.muc.create(@full_jid)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should send correct stanza" do
|
128
|
+
# will attempt to create new vcr cassette if the stanza is wrong
|
129
|
+
# relies on cassette being manually checked
|
130
|
+
@connection.muc.exit(@full_jid)
|
131
|
+
end
|
132
|
+
|
133
|
+
after do
|
134
|
+
# Just incase the room is persistent
|
135
|
+
@connection.muc.destroy(@jid)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
118
140
|
describe "destroy" do
|
119
141
|
|
120
142
|
use_vcr_cassette 'muc destroy', :record => :new_episodes
|
@@ -0,0 +1,91 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :post
|
5
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
6
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20to%3d%22extra%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
7
|
+
headers:
|
8
|
+
content-type:
|
9
|
+
- application/x-www-form-urlencoded
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: ...
|
14
|
+
headers:
|
15
|
+
content-type:
|
16
|
+
- application/xml
|
17
|
+
content-length:
|
18
|
+
- "40"
|
19
|
+
body: |
|
20
|
+
#<EventMachine::Timer:0x00000100b29d90>
|
21
|
+
|
22
|
+
http_version: "1.1"
|
23
|
+
- !ruby/struct:VCR::HTTPInteraction
|
24
|
+
request: !ruby/struct:VCR::Request
|
25
|
+
method: :post
|
26
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
27
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22extra%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cx%20xmlns%3d%22jabber%3ax%3adata%22%20type%3d%22submit%22%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
28
|
+
headers:
|
29
|
+
content-type:
|
30
|
+
- application/x-www-form-urlencoded
|
31
|
+
response: !ruby/struct:VCR::Response
|
32
|
+
status: !ruby/struct:VCR::ResponseStatus
|
33
|
+
code: 200
|
34
|
+
message: ...
|
35
|
+
headers:
|
36
|
+
content-type:
|
37
|
+
- application/xml
|
38
|
+
content-length:
|
39
|
+
- "204"
|
40
|
+
body: |
|
41
|
+
<iq type="result" id="blather0175" from="extra@conference.theo-template.local" to="theozaurus@theo-template.local/7633460851296657831415060">
|
42
|
+
<query xmlns="http://jabber.org/protocol/muc#owner"/>
|
43
|
+
</iq>
|
44
|
+
|
45
|
+
http_version: "1.1"
|
46
|
+
- !ruby/struct:VCR::HTTPInteraction
|
47
|
+
request: !ruby/struct:VCR::Request
|
48
|
+
method: :post
|
49
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
50
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3cpresence%20type%3d%22unavailable%22%20to%3d%22extra%40conference.theo-template.local%2fnick%22%3e%0a%20%20%3cx%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%22%2f%3e%0a%3c%2fpresence%3e%0a
|
51
|
+
headers:
|
52
|
+
content-type:
|
53
|
+
- application/x-www-form-urlencoded
|
54
|
+
response: !ruby/struct:VCR::Response
|
55
|
+
status: !ruby/struct:VCR::ResponseStatus
|
56
|
+
code: 200
|
57
|
+
message: ...
|
58
|
+
headers:
|
59
|
+
content-type:
|
60
|
+
- application/xml
|
61
|
+
content-length:
|
62
|
+
- "40"
|
63
|
+
body: |
|
64
|
+
#<EventMachine::Timer:0x00000100ade610>
|
65
|
+
|
66
|
+
http_version: "1.1"
|
67
|
+
- !ruby/struct:VCR::HTTPInteraction
|
68
|
+
request: !ruby/struct:VCR::Request
|
69
|
+
method: :post
|
70
|
+
uri: http://theozaurus%40theo-template.local:secret@127.0.0.1:8000/
|
71
|
+
body: stanza=%3c%3fxml%20version%3d%221.0%22%3f%3e%0a%3ciq%20type%3d%22set%22%20to%3d%22extra%40conference.theo-template.local%22%3e%0a%20%20%3cquery%20xmlns%3d%22http%3a%2f%2fjabber.org%2fprotocol%2fmuc%23owner%22%3e%0a%20%20%20%20%3cdestroy%2f%3e%0a%20%20%3c%2fquery%3e%0a%3c%2fiq%3e%0a
|
72
|
+
headers:
|
73
|
+
content-type:
|
74
|
+
- application/x-www-form-urlencoded
|
75
|
+
response: !ruby/struct:VCR::Response
|
76
|
+
status: !ruby/struct:VCR::ResponseStatus
|
77
|
+
code: 200
|
78
|
+
message: ...
|
79
|
+
headers:
|
80
|
+
content-type:
|
81
|
+
- application/xml
|
82
|
+
content-length:
|
83
|
+
- "426"
|
84
|
+
body: |
|
85
|
+
<iq type="error" id="blather0177" from="extra@conference.theo-template.local" to="theozaurus@theo-template.local/7633460851296657831415060" lang="en">
|
86
|
+
<query xmlns="http://jabber.org/protocol/muc#owner">
|
87
|
+
<destroy/>
|
88
|
+
</query>
|
89
|
+
<error code="404" type="cancel"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">Conference room does not exist</text></error></iq>
|
90
|
+
|
91
|
+
http_version: "1.1"
|
data/spec/models/muc_spec.rb
CHANGED
@@ -39,6 +39,34 @@ describe Jubjub::Muc do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
describe "exit" do
|
43
|
+
before do
|
44
|
+
muc_mock = mock
|
45
|
+
muc_mock.stub(:exit) # exit doesn't work in a stub chain, manually build it
|
46
|
+
|
47
|
+
@mock_connection = mock
|
48
|
+
@mock_connection.stub(:jid).and_return( Jubjub::Jid.new 'nick@foo.com' )
|
49
|
+
@mock_connection.stub(:muc).and_return( muc_mock )
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should call muc.exit on connection" do
|
53
|
+
@mock_connection.muc.should_receive(:exit).with( Jubjub::Jid.new 'room@conference.foo.com/nick' )
|
54
|
+
|
55
|
+
Jubjub::Muc.new("room@conference.foo.com",nil,@mock_connection).exit
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should support custom nick name" do
|
59
|
+
@mock_connection.muc.should_receive(:exit).with( Jubjub::Jid.new 'room@conference.foo.com/custom_nick' )
|
60
|
+
|
61
|
+
Jubjub::Muc.new("room@conference.foo.com",nil,@mock_connection).exit('custom_nick')
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be chainable" do
|
65
|
+
room = Jubjub::Muc.new("room@conference.foo.com",nil,@mock_connection)
|
66
|
+
room.exit.should eql room
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
42
70
|
describe "destroy" do
|
43
71
|
|
44
72
|
it "should call muc.destroy on connection" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jubjub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Theo Cushion
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-02 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- spec/fixtures/vcr_cassettes/muc_create.yml
|
115
115
|
- spec/fixtures/vcr_cassettes/muc_create_with_configuration.yml
|
116
116
|
- spec/fixtures/vcr_cassettes/muc_destroy.yml
|
117
|
+
- spec/fixtures/vcr_cassettes/muc_exit.yml
|
117
118
|
- spec/fixtures/vcr_cassettes/muc_list.yml
|
118
119
|
- spec/mixins/user_spec.rb
|
119
120
|
- spec/models/jid_spec.rb
|
@@ -165,6 +166,7 @@ test_files:
|
|
165
166
|
- spec/fixtures/vcr_cassettes/muc_create.yml
|
166
167
|
- spec/fixtures/vcr_cassettes/muc_create_with_configuration.yml
|
167
168
|
- spec/fixtures/vcr_cassettes/muc_destroy.yml
|
169
|
+
- spec/fixtures/vcr_cassettes/muc_exit.yml
|
168
170
|
- spec/fixtures/vcr_cassettes/muc_list.yml
|
169
171
|
- spec/mixins/user_spec.rb
|
170
172
|
- spec/models/jid_spec.rb
|