blather 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -2
- data/Rakefile +30 -18
- data/ext/Makefile +149 -0
- data/ext/mkmf.log +30 -0
- data/ext/push_parser.bundle +0 -0
- data/ext/push_parser.c +231 -0
- data/ext/push_parser.o +0 -0
- data/lib/blather.rb +3 -7
- data/lib/blather/client.rb +247 -4
- data/lib/blather/roster.rb +0 -9
- data/lib/blather/stanza/{disco.rb → iq/disco.rb} +3 -1
- data/lib/blather/stanza/{disco → iq/discos}/disco_info.rb +5 -3
- data/lib/blather/stanza/{disco → iq/discos}/disco_items.rb +2 -0
- data/lib/blather/stanza/iq/query.rb +1 -1
- data/lib/blather/stanza/iq/roster.rb +2 -2
- data/lib/blather/xmpp_node.rb +1 -1
- data/spec/blather/stanza/{discos → iq/discos}/disco_info_spec.rb +12 -12
- data/spec/blather/stanza/{discos → iq/discos}/disco_items_spec.rb +1 -1
- data/spec/blather/stanza/iq/query_spec.rb +0 -7
- data/spec/blather/stanza/iq/roster_spec.rb +21 -21
- data/spec/blather/stanza/pubsub/event_spec.rb +13 -0
- data/spec/build_safe.rb +20 -0
- metadata +19 -68
- data/VERSION.yml +0 -4
- data/examples/pubsub/cli.rb +0 -64
- data/examples/pubsub/ping_pong.rb +0 -18
- data/examples/pubsub/pubsub_dsl.rb +0 -52
- data/examples/pubsub_client.rb +0 -39
- data/examples/rosterprint.rb +0 -14
- data/examples/xmpp4r/echo.rb +0 -35
- data/lib/blather/client/client.rb +0 -165
- data/lib/blather/client/dsl.rb +0 -99
- data/lib/blather/client/pubsub.rb +0 -53
- data/lib/blather/client/pubsub/node.rb +0 -27
- data/lib/blather/stanza/pubsub.rb +0 -33
- data/lib/blather/stanza/pubsub/affiliations.rb +0 -52
- data/lib/blather/stanza/pubsub/errors.rb +0 -9
- data/lib/blather/stanza/pubsub/event.rb +0 -21
- data/lib/blather/stanza/pubsub/items.rb +0 -59
- data/lib/blather/stanza/pubsub/owner.rb +0 -9
- data/lib/blather/stanza/pubsub/subscriptions.rb +0 -57
- data/spec/blather/stanza/pubsub/affiliations_spec.rb +0 -46
- data/spec/blather/stanza/pubsub/items_spec.rb +0 -59
- data/spec/blather/stanza/pubsub/subscriptions_spec.rb +0 -63
- data/spec/blather/stanza/pubsub_spec.rb +0 -26
- data/spec/fixtures/pubsub.rb +0 -157
@@ -1,21 +0,0 @@
|
|
1
|
-
module Blather
|
2
|
-
class Stanza
|
3
|
-
class PubSub
|
4
|
-
|
5
|
-
class Event < Message
|
6
|
-
register :pubsub_event, nil, 'http://jabber.org/protocol/pubsub#event'
|
7
|
-
|
8
|
-
def items
|
9
|
-
end
|
10
|
-
|
11
|
-
class Item
|
12
|
-
attribute_accessor :id, :node, :to_sym => false
|
13
|
-
|
14
|
-
alias_method :payload, :content
|
15
|
-
alias_method :payload=, :content=
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
end #PubSub
|
20
|
-
end #Stanza
|
21
|
-
end #Blather
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Blather
|
2
|
-
class Stanza
|
3
|
-
class PubSub
|
4
|
-
|
5
|
-
class Items < PubSub
|
6
|
-
register :pubsub_items, :pubsub_items, self.ns
|
7
|
-
|
8
|
-
include Enumerable
|
9
|
-
|
10
|
-
def self.request(host, path, list = [], max = nil)
|
11
|
-
node = self.new :get, host
|
12
|
-
|
13
|
-
node.items.attributes[:node] = path
|
14
|
-
node.items.attributes[:max_items] = max
|
15
|
-
|
16
|
-
(list || []).each do |id|
|
17
|
-
item = XMPPNode.new 'item'
|
18
|
-
item.attributes[:id] = id
|
19
|
-
node.items << item
|
20
|
-
end
|
21
|
-
|
22
|
-
node
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize(type = nil, host = nil)
|
26
|
-
super
|
27
|
-
items
|
28
|
-
end
|
29
|
-
|
30
|
-
##
|
31
|
-
# Kill the items node before running inherit
|
32
|
-
def inherit(node)
|
33
|
-
items.remove!
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
def [](id)
|
38
|
-
items[id]
|
39
|
-
end
|
40
|
-
|
41
|
-
def each(&block)
|
42
|
-
items.each &block
|
43
|
-
end
|
44
|
-
|
45
|
-
def size
|
46
|
-
items.size
|
47
|
-
end
|
48
|
-
|
49
|
-
def items
|
50
|
-
items = pubsub.find_first('//items', self.class.ns)
|
51
|
-
items = pubsub.find_first('//pubsub_ns:items', :pubsub_ns => self.class.ns) unless items
|
52
|
-
(self.pubsub << (items = XMPPNode.new('items'))) unless items
|
53
|
-
items
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
end #PubSub
|
58
|
-
end #Stanza
|
59
|
-
end #Blather
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module Blather
|
2
|
-
class Stanza
|
3
|
-
class PubSub
|
4
|
-
|
5
|
-
class Subscriptions < PubSub
|
6
|
-
register :pubsub_subscriptions, :pubsub_subscriptions, self.ns
|
7
|
-
|
8
|
-
include Enumerable
|
9
|
-
|
10
|
-
##
|
11
|
-
# Ensure the namespace is set to the query node
|
12
|
-
def initialize(type = nil, host = nil)
|
13
|
-
super type
|
14
|
-
self.to = host
|
15
|
-
subscriptions
|
16
|
-
end
|
17
|
-
|
18
|
-
##
|
19
|
-
# Kill the pubsub node before running inherit
|
20
|
-
def inherit(node)
|
21
|
-
subscriptions.remove!
|
22
|
-
super
|
23
|
-
end
|
24
|
-
|
25
|
-
def subscriptions
|
26
|
-
aff = pubsub.find_first('//pubsub_ns:subscriptions', :pubsub_ns => self.class.ns)
|
27
|
-
(self.pubsub << (aff = XMPPNode.new('subscriptions'))) unless aff
|
28
|
-
aff
|
29
|
-
end
|
30
|
-
|
31
|
-
def [](subscription)
|
32
|
-
list[subscription]
|
33
|
-
end
|
34
|
-
|
35
|
-
def each(&block)
|
36
|
-
list.each &block
|
37
|
-
end
|
38
|
-
|
39
|
-
def size
|
40
|
-
list.size
|
41
|
-
end
|
42
|
-
|
43
|
-
def list
|
44
|
-
@subscription_list ||= begin
|
45
|
-
items = subscriptions.find('//pubsub_ns:subscription', :pubsub_ns => self.class.ns)
|
46
|
-
items.inject({}) do |hash, item|
|
47
|
-
hash[item.attributes[:subscription].to_sym] ||= []
|
48
|
-
hash[item.attributes[:subscription].to_sym] << item.attributes[:node]
|
49
|
-
hash
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end #Subscriptions
|
54
|
-
|
55
|
-
end #PubSub
|
56
|
-
end #Stanza
|
57
|
-
end #Blather
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. .. spec_helper])
|
2
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. .. fixtures pubsub])
|
3
|
-
|
4
|
-
describe 'Blather::Stanza::PubSub::Affiliations' do
|
5
|
-
it 'registers itself' do
|
6
|
-
XMPPNode.class_from_registration(:pubsub_affiliations, 'http://jabber.org/protocol/pubsub').must_equal Stanza::PubSub::Affiliations
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'ensures an affiliations node is present on create' do
|
10
|
-
affiliations = Stanza::PubSub::Affiliations.new
|
11
|
-
affiliations.pubsub.children.detect { |n| n.element_name == 'affiliations' }.wont_be_nil
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'ensures an affiliations node exists when calling #affiliations' do
|
15
|
-
affiliations = Stanza::PubSub::Affiliations.new
|
16
|
-
affiliations.pubsub.remove_child :affiliations
|
17
|
-
affiliations.pubsub.children.detect { |n| n.element_name == 'affiliations' }.must_be_nil
|
18
|
-
|
19
|
-
affiliations.affiliations.wont_be_nil
|
20
|
-
affiliations.pubsub.children.detect { |n| n.element_name == 'affiliations' }.wont_be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'defaults to a get node' do
|
24
|
-
aff = Stanza::PubSub::Affiliations.new
|
25
|
-
aff.type.must_equal :get
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'sets the host if requested' do
|
29
|
-
aff = Stanza::PubSub::Affiliations.new :get, 'pubsub.jabber.local'
|
30
|
-
aff.to.must_equal JID.new('pubsub.jabber.local')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'can import an affiliates result node' do
|
34
|
-
node = XML::Document.string(affiliations_xml).root
|
35
|
-
|
36
|
-
affiliations = Stanza::PubSub::Affiliations.new.inherit node
|
37
|
-
affiliations.size.must_equal 5
|
38
|
-
affiliations.list.must_equal({
|
39
|
-
:owner => ['node1', 'node2'],
|
40
|
-
:publisher => ['node3'],
|
41
|
-
:outcast => ['node4'],
|
42
|
-
:member => ['node5'],
|
43
|
-
:none => ['node6']
|
44
|
-
})
|
45
|
-
end
|
46
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. .. spec_helper])
|
2
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. .. fixtures pubsub])
|
3
|
-
|
4
|
-
describe 'Blather::Stanza::PubSub::Items' do
|
5
|
-
it 'registers itself' do
|
6
|
-
XMPPNode.class_from_registration(:pubsub_items, 'http://jabber.org/protocol/pubsub').must_equal Stanza::PubSub::Items
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'ensures an items node is present on create' do
|
10
|
-
items = Stanza::PubSub::Items.new
|
11
|
-
items.pubsub.children.detect { |n| n.element_name == 'items' }.wont_be_nil
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'ensures an items node exists when calling #items' do
|
15
|
-
items = Stanza::PubSub::Items.new
|
16
|
-
items.pubsub.remove_child :items
|
17
|
-
items.pubsub.children.detect { |n| n.element_name == 'items' }.must_be_nil
|
18
|
-
|
19
|
-
items.items.wont_be_nil
|
20
|
-
items.pubsub.children.detect { |n| n.element_name == 'items' }.wont_be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'defaults to a get node' do
|
24
|
-
aff = Stanza::PubSub::Items.new
|
25
|
-
aff.type.must_equal :get
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'can create an items request node to request all items' do
|
29
|
-
host = 'pubsub.jabber.local'
|
30
|
-
node = 'princely_musings'
|
31
|
-
|
32
|
-
items = Stanza::PubSub::Items.request host, node
|
33
|
-
items.find("//pubsub/items[@node=\"#{node}\"]").size.must_equal 1
|
34
|
-
items.to.must_equal JID.new(host)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'can create an items request node to request some items' do
|
38
|
-
host = 'pubsub.jabber.local'
|
39
|
-
node = 'princely_musings'
|
40
|
-
items = %w[item1 item2]
|
41
|
-
|
42
|
-
items_xpath = items.map { |i| "@id=\"#{i}\"" } * ' or '
|
43
|
-
|
44
|
-
items = Stanza::PubSub::Items.request host, node, items
|
45
|
-
items.find("//pubsub/items[@node=\"#{node}\"]/item[#{items_xpath}]").size.must_equal 2
|
46
|
-
items.to.must_equal JID.new(host)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'can create an items request node to request "max_number" of items' do
|
50
|
-
host = 'pubsub.jabber.local'
|
51
|
-
node = 'princely_musings'
|
52
|
-
max = 3
|
53
|
-
|
54
|
-
items = Stanza::PubSub::Items.request host, node, nil, max
|
55
|
-
items.find("//pubsub/items[@node=\"#{node}\" and @max_items=\"#{max}\"]").size.must_equal 1
|
56
|
-
items.to.must_equal JID.new(host)
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. .. spec_helper])
|
2
|
-
|
3
|
-
def subscriptions_xml
|
4
|
-
<<-NODE
|
5
|
-
<iq type='result'
|
6
|
-
from='pubsub.shakespeare.lit'
|
7
|
-
to='francisco@denmark.lit'
|
8
|
-
id='affil1'>
|
9
|
-
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
10
|
-
<subscriptions>
|
11
|
-
<subscription node='node1' subscription='subscribed'/>
|
12
|
-
<subscription node='node2' subscription='subscribed'/>
|
13
|
-
<subscription node='node3' subscription='unconfigured'/>
|
14
|
-
<subscription node='node4' subscription='pending'/>
|
15
|
-
<subscription node='node5' subscription='none'/>
|
16
|
-
</subscriptions>
|
17
|
-
</pubsub>
|
18
|
-
</iq>
|
19
|
-
NODE
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'Blather::Stanza::PubSub::Subscriptions' do
|
23
|
-
it 'registers itself' do
|
24
|
-
XMPPNode.class_from_registration(:pubsub_subscriptions, 'http://jabber.org/protocol/pubsub').must_equal Stanza::PubSub::Subscriptions
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'ensures an subscriptions node is present on create' do
|
28
|
-
subscriptions = Stanza::PubSub::Subscriptions.new
|
29
|
-
subscriptions.pubsub.children.detect { |n| n.element_name == 'subscriptions' }.wont_be_nil
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'ensures an subscriptions node exists when calling #subscriptions' do
|
33
|
-
subscriptions = Stanza::PubSub::Subscriptions.new
|
34
|
-
subscriptions.pubsub.remove_child :subscriptions
|
35
|
-
subscriptions.pubsub.children.detect { |n| n.element_name == 'subscriptions' }.must_be_nil
|
36
|
-
|
37
|
-
subscriptions.list.wont_be_nil
|
38
|
-
subscriptions.pubsub.children.detect { |n| n.element_name == 'subscriptions' }.wont_be_nil
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'defaults to a get node' do
|
42
|
-
aff = Stanza::PubSub::Subscriptions.new
|
43
|
-
aff.type.must_equal :get
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'sets the host if requested' do
|
47
|
-
aff = Stanza::PubSub::Subscriptions.new :get, 'pubsub.jabber.local'
|
48
|
-
aff.to.must_equal JID.new('pubsub.jabber.local')
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'can import a subscriptions result node' do
|
52
|
-
node = XML::Document.string(subscriptions_xml).root
|
53
|
-
|
54
|
-
subscriptions = Stanza::PubSub::Subscriptions.new.inherit node
|
55
|
-
subscriptions.size.must_equal 4
|
56
|
-
subscriptions.list.must_equal({
|
57
|
-
:subscribed => ['node1', 'node2'],
|
58
|
-
:unconfigured => ['node3'],
|
59
|
-
:pending => ['node4'],
|
60
|
-
:none => ['node5']
|
61
|
-
})
|
62
|
-
end
|
63
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
|
2
|
-
|
3
|
-
describe 'Blather::Stanza::PubSub' do
|
4
|
-
it 'registers itself' do
|
5
|
-
XMPPNode.class_from_registration(:pubsub, 'http://jabber.org/protocol/pubsub').must_equal Stanza::PubSub
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'ensures a pubusb node is present on create' do
|
9
|
-
pubsub = Stanza::PubSub.new
|
10
|
-
pubsub.children.detect { |n| n.element_name == 'pubsub' }.wont_be_nil
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'ensures a pubsub node exists when calling #pubsub' do
|
14
|
-
pubsub = Stanza::PubSub.new
|
15
|
-
pubsub.remove_child :pubsub
|
16
|
-
pubsub.children.detect { |n| n.element_name == 'pubsub' }.must_be_nil
|
17
|
-
|
18
|
-
pubsub.pubsub.wont_be_nil
|
19
|
-
pubsub.children.detect { |n| n.element_name == 'pubsub' }.wont_be_nil
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'sets the host if requested' do
|
23
|
-
aff = Stanza::PubSub.new :get, 'pubsub.jabber.local'
|
24
|
-
aff.to.must_equal JID.new('pubsub.jabber.local')
|
25
|
-
end
|
26
|
-
end
|
data/spec/fixtures/pubsub.rb
DELETED
@@ -1,157 +0,0 @@
|
|
1
|
-
def items_all_nodes_xml
|
2
|
-
<<-ITEMS
|
3
|
-
<iq type='result'
|
4
|
-
from='pubsub.shakespeare.lit'
|
5
|
-
to='francisco@denmark.lit/barracks'
|
6
|
-
id='items1'>
|
7
|
-
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
8
|
-
<items node='princely_musings'>
|
9
|
-
<item id='368866411b877c30064a5f62b917cffe'>
|
10
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
11
|
-
<title>The Uses of This World</title>
|
12
|
-
<summary>
|
13
|
-
O, that this too too solid flesh would melt
|
14
|
-
Thaw and resolve itself into a dew!
|
15
|
-
</summary>
|
16
|
-
<link rel='alternate' type='text/html'
|
17
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
18
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
19
|
-
<published>2003-12-12T17:47:23Z</published>
|
20
|
-
<updated>2003-12-12T17:47:23Z</updated>
|
21
|
-
</entry>
|
22
|
-
</item>
|
23
|
-
<item id='3300659945416e274474e469a1f0154c'>
|
24
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
25
|
-
<title>Ghostly Encounters</title>
|
26
|
-
<summary>
|
27
|
-
O all you host of heaven! O earth! what else?
|
28
|
-
And shall I couple hell? O, fie! Hold, hold, my heart;
|
29
|
-
And you, my sinews, grow not instant old,
|
30
|
-
But bear me stiffly up. Remember thee!
|
31
|
-
</summary>
|
32
|
-
<link rel='alternate' type='text/html'
|
33
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
34
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
35
|
-
<published>2003-12-12T23:21:34Z</published>
|
36
|
-
<updated>2003-12-12T23:21:34Z</updated>
|
37
|
-
</entry>
|
38
|
-
</item>
|
39
|
-
<item id='4e30f35051b7b8b42abe083742187228'>
|
40
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
41
|
-
<title>Alone</title>
|
42
|
-
<summary>
|
43
|
-
Now I am alone.
|
44
|
-
O, what a rogue and peasant slave am I!
|
45
|
-
</summary>
|
46
|
-
<link rel='alternate' type='text/html'
|
47
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
48
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
49
|
-
<published>2003-12-13T11:09:53Z</published>
|
50
|
-
<updated>2003-12-13T11:09:53Z</updated>
|
51
|
-
</entry>
|
52
|
-
</item>
|
53
|
-
<item id='ae890ac52d0df67ed7cfdf51b644e901'>
|
54
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
55
|
-
<title>Soliloquy</title>
|
56
|
-
<summary>
|
57
|
-
To be, or not to be: that is the question:
|
58
|
-
Whether 'tis nobler in the mind to suffer
|
59
|
-
The slings and arrows of outrageous fortune,
|
60
|
-
Or to take arms against a sea of troubles,
|
61
|
-
And by opposing end them?
|
62
|
-
</summary>
|
63
|
-
<link rel='alternate' type='text/html'
|
64
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
65
|
-
<id>tag:denmark.lit,2003:entry-32397</id>
|
66
|
-
<published>2003-12-13T18:30:02Z</published>
|
67
|
-
<updated>2003-12-13T18:30:02Z</updated>
|
68
|
-
</entry>
|
69
|
-
</item>
|
70
|
-
</items>
|
71
|
-
</pubsub>
|
72
|
-
</iq>
|
73
|
-
ITEMS
|
74
|
-
end
|
75
|
-
|
76
|
-
def pubsub_items_some_xml
|
77
|
-
<<-ITEMS
|
78
|
-
<iq type='result'
|
79
|
-
from='pubsub.shakespeare.lit'
|
80
|
-
to='francisco@denmark.lit/barracks'
|
81
|
-
id='items1'>
|
82
|
-
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
83
|
-
<items node='princely_musings'>
|
84
|
-
<item id='368866411b877c30064a5f62b917cffe'>
|
85
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
86
|
-
<title>The Uses of This World</title>
|
87
|
-
<summary>
|
88
|
-
O, that this too too solid flesh would melt
|
89
|
-
Thaw and resolve itself into a dew!
|
90
|
-
</summary>
|
91
|
-
<link rel='alternate' type='text/html'
|
92
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
93
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
94
|
-
<published>2003-12-12T17:47:23Z</published>
|
95
|
-
<updated>2003-12-12T17:47:23Z</updated>
|
96
|
-
</entry>
|
97
|
-
</item>
|
98
|
-
<item id='3300659945416e274474e469a1f0154c'>
|
99
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
100
|
-
<title>Ghostly Encounters</title>
|
101
|
-
<summary>
|
102
|
-
O all you host of heaven! O earth! what else?
|
103
|
-
And shall I couple hell? O, fie! Hold, hold, my heart;
|
104
|
-
And you, my sinews, grow not instant old,
|
105
|
-
But bear me stiffly up. Remember thee!
|
106
|
-
</summary>
|
107
|
-
<link rel='alternate' type='text/html'
|
108
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
109
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
110
|
-
<published>2003-12-12T23:21:34Z</published>
|
111
|
-
<updated>2003-12-12T23:21:34Z</updated>
|
112
|
-
</entry>
|
113
|
-
</item>
|
114
|
-
<item id='4e30f35051b7b8b42abe083742187228'>
|
115
|
-
<entry xmlns='http://www.w3.org/2005/Atom'>
|
116
|
-
<title>Alone</title>
|
117
|
-
<summary>
|
118
|
-
Now I am alone.
|
119
|
-
O, what a rogue and peasant slave am I!
|
120
|
-
</summary>
|
121
|
-
<link rel='alternate' type='text/html'
|
122
|
-
href='http://denmark.lit/2003/12/13/atom03'/>
|
123
|
-
<id>tag:denmark.lit,2003:entry-32396</id>
|
124
|
-
<published>2003-12-13T11:09:53Z</published>
|
125
|
-
<updated>2003-12-13T11:09:53Z</updated>
|
126
|
-
</entry>
|
127
|
-
</item>
|
128
|
-
</items>
|
129
|
-
<set xmlns='http://jabber.org/protocol/rsm'>
|
130
|
-
<first index='0'>368866411b877c30064a5f62b917cffe</first>
|
131
|
-
<last>4e30f35051b7b8b42abe083742187228</last>
|
132
|
-
<count>19</count>
|
133
|
-
</set>
|
134
|
-
</pubsub>
|
135
|
-
</iq>
|
136
|
-
ITEMS
|
137
|
-
end
|
138
|
-
|
139
|
-
def affiliations_xml
|
140
|
-
<<-NODE
|
141
|
-
<iq type='result'
|
142
|
-
from='pubsub.shakespeare.lit'
|
143
|
-
to='francisco@denmark.lit'
|
144
|
-
id='affil1'>
|
145
|
-
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
146
|
-
<affiliations>
|
147
|
-
<affiliation node='node1' affiliation='owner'/>
|
148
|
-
<affiliation node='node2' affiliation='owner'/>
|
149
|
-
<affiliation node='node3' affiliation='publisher'/>
|
150
|
-
<affiliation node='node4' affiliation='outcast'/>
|
151
|
-
<affiliation node='node5' affiliation='member'/>
|
152
|
-
<affiliation node='node6' affiliation='none'/>
|
153
|
-
</affiliations>
|
154
|
-
</pubsub>
|
155
|
-
</iq>
|
156
|
-
NODE
|
157
|
-
end
|