skates 0.5.0 → 0.5.3
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.
- data/lib/skates/base/view.rb +1 -1
- data/lib/skates/client_connection.rb +1 -1
- data/lib/skates/component_connection.rb +1 -1
- data/lib/skates/xmpp_connection.rb +4 -2
- data/lib/skates/xmpp_parser.rb +2 -2
- metadata +14 -38
- data/spec/bin/skates_spec.rb +0 -0
- data/spec/em_mock.rb +0 -42
- data/spec/lib/skates/base/controller_spec.rb +0 -205
- data/spec/lib/skates/base/stanza_spec.rb +0 -120
- data/spec/lib/skates/base/view_spec.rb +0 -105
- data/spec/lib/skates/client_connection_spec.rb +0 -309
- data/spec/lib/skates/component_connection_spec.rb +0 -144
- data/spec/lib/skates/generator_spec.rb +0 -10
- data/spec/lib/skates/router/dsl_spec.rb +0 -46
- data/spec/lib/skates/router_spec.rb +0 -252
- data/spec/lib/skates/runner_spec.rb +0 -233
- data/spec/lib/skates/xmpp_connection_spec.rb +0 -222
- data/spec/lib/skates/xmpp_parser_spec.rb +0 -469
- data/spec/spec_helper.rb +0 -37
- data/test/skates_test.rb +0 -7
- data/test/test_helper.rb +0 -10
@@ -1,222 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
require File.dirname(__FILE__) + '/../../em_mock'
|
3
|
-
|
4
|
-
describe Skates::XmppConnection do
|
5
|
-
|
6
|
-
include SkatesSpecHelper
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
@params = {"jid" => "jid@server", "password" => "password", "port" => 1234, "host" => "myhost.com"}
|
10
|
-
@connection = Skates::XmppConnection._connect(@params, handler_mock)
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "_connect" do
|
14
|
-
it "should connect EventMachine and return it" do
|
15
|
-
EventMachine.should_receive(:connect).with(@params["host"], @params["port"], Skates::XmppConnection, hash_including("handler" => handler_mock)).and_return(@connection)
|
16
|
-
Skates::XmppConnection._connect(@params, handler_mock).should == @connection
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should rescue Connection Errors" do
|
20
|
-
EventMachine.stub!(:connect).with(@params["host"], @params["port"], Skates::XmppConnection, hash_including("handler" => handler_mock)).and_raise(RuntimeError)
|
21
|
-
lambda {
|
22
|
-
Skates::XmppConnection._connect(@params, handler_mock)
|
23
|
-
}.should raise_error(Skates::NotConnected)
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "connect" do
|
29
|
-
describe "connect" do
|
30
|
-
it "should not try to resolve the dns if a host IP has been provided" do
|
31
|
-
@params["host"] = "123.123.123.123"
|
32
|
-
Skates::XmppConnection.should_not_receive(:resolve)
|
33
|
-
Skates::XmppConnection.connect(@params, handler_mock)
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "when a host is provided, which is not an IP" do
|
37
|
-
it "should resolve it" do
|
38
|
-
@params["host"] = "domain.tld"
|
39
|
-
Skates::XmppConnection.should_receive(:resolve)
|
40
|
-
Skates::XmppConnection.connect(@params, handler_mock)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "when no host is provided, and no port either" do
|
45
|
-
it "should resolve the host to an IP" do
|
46
|
-
Skates::XmppConnection.should_receive(:resolve)
|
47
|
-
Skates::XmppConnection.connect(@params, handler_mock)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "initialize" do
|
54
|
-
it "should assign @connected to false" do
|
55
|
-
@connection.instance_variable_get("@connected").should be_false
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should assign @jid to params['jid']" do
|
59
|
-
@connection.instance_variable_get("@jid").should == @params["jid"]
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should assign @password to params['password']" do
|
63
|
-
@connection.instance_variable_get("@password").should == @params["password"]
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should assign @host to params['host']" do
|
67
|
-
@connection.instance_variable_get("@host").should == @params["host"]
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should assign @port to params['port']" do
|
71
|
-
@connection.instance_variable_get("@port").should == @params["port"]
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should assign @handler to params['handler']" do
|
75
|
-
@connection.instance_variable_get("@handler").should == handler_mock
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should assign @buffer to ''" do
|
79
|
-
@connection.instance_variable_get("@buffer").should == ""
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe "post_init" do
|
84
|
-
it "assigne a new parser" do
|
85
|
-
parser = Skates::XmppParser.new(@connection.method(:receive_stanza))
|
86
|
-
Skates::XmppParser.should_receive(:new).and_return(parser)
|
87
|
-
@connection.post_init
|
88
|
-
@connection.instance_variable_get("@parser").should == parser
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "connection_completed" do
|
93
|
-
it "should set @connected to true" do
|
94
|
-
@connection.connection_completed
|
95
|
-
@connection.instance_variable_get("@connected").should be_true
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "unbind" do
|
100
|
-
it "should set @connected to false" do
|
101
|
-
@connection.connection_completed
|
102
|
-
@connection.unbind
|
103
|
-
@connection.instance_variable_get("@connected").should be_false
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "receive_stanza" do
|
108
|
-
|
109
|
-
before(:each) do
|
110
|
-
@doc = Nokogiri::XML::Document.new
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "with an stanza that starts with stream:error" do
|
114
|
-
|
115
|
-
before(:each) do
|
116
|
-
@error_stanza = Nokogiri::XML::Node.new("stream:error", @doc)
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should close the connection" do
|
120
|
-
@connection.should_receive(:close_connection)
|
121
|
-
@connection.receive_stanza(@error_stanza)
|
122
|
-
end
|
123
|
-
|
124
|
-
describe "with a malformed stanza error" do
|
125
|
-
before(:each) do
|
126
|
-
@xml_not_well_formed_stanza = Nokogiri::XML::Node.new("xml-not-well-formed", @doc)
|
127
|
-
@xml_not_well_formed_stanza.add_namespace("xmlns", "urn:ietf:params:xml:ns:xmpp-streams")
|
128
|
-
@error_stanza.add_child(@xml_not_well_formed_stanza)
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe "with a stanza that is not an error" do
|
135
|
-
it "should call the on_stanza block" do
|
136
|
-
stanza = Nokogiri::XML::Node.new("message", @doc)
|
137
|
-
handler_mock.should_receive(:on_stanza)
|
138
|
-
@connection.receive_stanza(stanza)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
describe "send_chunk" do
|
145
|
-
it "should raise an error if not connected" do
|
146
|
-
@connection.instance_variable_set("@connected", false)
|
147
|
-
lambda {
|
148
|
-
@connection.__send__(:send_chunk, "hello world")
|
149
|
-
}.should raise_error(Skates::NotConnected)
|
150
|
-
end
|
151
|
-
|
152
|
-
it "should raise an error if the stanza size is above the limit" do
|
153
|
-
@connection.instance_variable_set("@connected", true)
|
154
|
-
string = "a" * (Skates::XmppConnection.max_stanza_size + 1)
|
155
|
-
lambda {
|
156
|
-
@connection.__send__(:send_chunk, string)
|
157
|
-
}.should raise_error(Skates::StanzaTooBig)
|
158
|
-
end
|
159
|
-
|
160
|
-
it "should return if the string is blank" do
|
161
|
-
@connection.instance_variable_set("@connected", true)
|
162
|
-
@connection.should_not_receive(:send_data)
|
163
|
-
@connection.__send__(:send_chunk, "")
|
164
|
-
end
|
165
|
-
|
166
|
-
it "should cann send_data with the string" do
|
167
|
-
@connection.instance_variable_set("@connected", true)
|
168
|
-
string = "hello world"
|
169
|
-
@connection.should_receive(:send_data).with(string)
|
170
|
-
@connection.__send__(:send_chunk, string)
|
171
|
-
end
|
172
|
-
|
173
|
-
end
|
174
|
-
|
175
|
-
describe "send_xml" do
|
176
|
-
|
177
|
-
before(:each) do
|
178
|
-
@connection.instance_variable_set("@connected", true)
|
179
|
-
@connection.stub!(:send_chunk).and_return(true)
|
180
|
-
@doc = Nokogiri::XML::Document.new
|
181
|
-
end
|
182
|
-
|
183
|
-
describe "with a nodeset as argument" do
|
184
|
-
before(:each) do
|
185
|
-
iq = Nokogiri::XML::Node.new("iq", @doc)
|
186
|
-
message = Nokogiri::XML::Node.new("message", @doc)
|
187
|
-
presence = Nokogiri::XML::Node.new("presence", @doc)
|
188
|
-
@node_set = Nokogiri::XML::NodeSet.new(@doc, [message, presence, iq])
|
189
|
-
end
|
190
|
-
|
191
|
-
it "should call send_chunk for each of the nodes in the set" do
|
192
|
-
@node_set.each do |node|
|
193
|
-
@connection.should_receive(:send_chunk).with(node.to_s)
|
194
|
-
end
|
195
|
-
@connection.send_xml(@node_set)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
describe "with an argument with is not a NodeSet" do
|
200
|
-
before(:each) do
|
201
|
-
@message = Nokogiri::XML::Node.new("message", @doc)
|
202
|
-
end
|
203
|
-
it "should call send_chunk for the node" do
|
204
|
-
@connection.should_receive(:send_chunk).with(@message.to_s)
|
205
|
-
@connection.send_xml(@message)
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
describe "receive_data" do
|
211
|
-
before(:each) do
|
212
|
-
@connection.instance_variable_get("@parser").stub!(:push).and_return(true)
|
213
|
-
end
|
214
|
-
|
215
|
-
it "should push the received data to the parser" do
|
216
|
-
data = "<hello>hello world!</hello>"
|
217
|
-
@connection.instance_variable_get("@parser").should_receive(:push).with(data).and_return(true)
|
218
|
-
@connection.__send__(:receive_data, data)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
end
|
@@ -1,469 +0,0 @@
|
|
1
|
-
$: << "." # Adding the local directory to the path, so we can safely require models, controllers and views.
|
2
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
3
|
-
|
4
|
-
describe Skates::XmppParser do
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
@last_stanza = ""
|
8
|
-
@proc = mock(Proc, :call => true)
|
9
|
-
@parser = Skates::XmppParser.new(@proc)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe ".reset" do
|
13
|
-
it "should reset the document to nil" do
|
14
|
-
@parser.reset
|
15
|
-
@parser.elem.should be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should reset the element to nil (no element is being parsed)" do
|
19
|
-
@parser.reset
|
20
|
-
@parser.elem.should be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should reset the parser to a parser" do
|
24
|
-
new_parser = Nokogiri::XML::SAX::PushParser.new(@parser, "UTF-8")
|
25
|
-
Nokogiri::XML::SAX::PushParser.should_receive(:new).with(@parser, "UTF-8").and_return(new_parser)
|
26
|
-
@parser.reset
|
27
|
-
@parser.parser.should == new_parser
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe ".push" do
|
32
|
-
it "should send the data to the parser" do
|
33
|
-
data = "<name>me</name>"
|
34
|
-
@parser.parser.should_receive(:<<).with(data)
|
35
|
-
@parser.push(data)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe ".characters" do
|
40
|
-
before(:each) do
|
41
|
-
@parser.doc = Nokogiri::XML::Document.new
|
42
|
-
@parser.elem = Nokogiri::XML::Element.new("element", @parser.doc)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should add the characters to the buffer" do
|
46
|
-
chars = "hello my name is julien"
|
47
|
-
@parser.characters(chars)
|
48
|
-
@parser.instance_variable_get("@buffer").should == chars
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should concatenate the text if we receive in both pieces" do
|
52
|
-
chars = "hello my name is julien"
|
53
|
-
@parser.characters(chars)
|
54
|
-
@parser.instance_variable_get("@buffer").should == chars
|
55
|
-
chars2 = "and I'm french!"
|
56
|
-
@parser.characters(chars2)
|
57
|
-
@parser.instance_variable_get("@buffer").should == chars + chars2
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should not parse text content as XML" do
|
61
|
-
stanza = "<message><body>&#187;</body></message>"
|
62
|
-
@parser.push stanza
|
63
|
-
# Not "\273":
|
64
|
-
(@parser.elem / 'message/body')[0].content.should == '»'
|
65
|
-
(@parser.elem / 'message/body').to_xml.should == "<body>&#187;</body>"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe ".start_element" do
|
70
|
-
|
71
|
-
before(:each) do
|
72
|
-
@new_elem_name = "new"
|
73
|
-
@new_elem_attributes = [["to", "you@yourserver.com/home"], ["xmlns", "http://ns.com"]]
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should create a new doc if we don't have one" do
|
77
|
-
new_doc = Nokogiri::XML::Document.new
|
78
|
-
@parser.doc = nil
|
79
|
-
Nokogiri::XML::Document.should_receive(:new).and_return(new_doc)
|
80
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
81
|
-
@parser.doc.should == new_doc
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should not create a new doc we already have one" do
|
85
|
-
@parser.doc = Nokogiri::XML::Document.new
|
86
|
-
Nokogiri::XML::Document.should_not_receive(:new)
|
87
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should create a new element" do
|
91
|
-
@doc = Nokogiri::XML::Document.new
|
92
|
-
@parser.doc = @doc
|
93
|
-
@new_elem = Nokogiri::XML::Element.new(@new_elem_name, @parser.doc)
|
94
|
-
Nokogiri::XML::Element.should_receive(:new).and_return(@new_elem)
|
95
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should add the new element as a child to the current element if there is one" do
|
99
|
-
@doc = Nokogiri::XML::Document.new
|
100
|
-
@parser.doc = @doc
|
101
|
-
@current = Nokogiri::XML::Element.new("element", @parser.doc)
|
102
|
-
@parser.elem = @current
|
103
|
-
@new_elem = Nokogiri::XML::Element.new(@new_elem_name, @parser.doc)
|
104
|
-
Nokogiri::XML::Element.stub!(:new).and_return(@new_elem)
|
105
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
106
|
-
@new_elem.parent.should == @current
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should add the new element as the child of the doc if there is none" do
|
110
|
-
@doc = Nokogiri::XML::Document.new
|
111
|
-
@parser.doc = @doc
|
112
|
-
@new_elem = Nokogiri::XML::Element.new(@new_elem_name, @parser.doc)
|
113
|
-
Nokogiri::XML::Element.stub!(:new).and_return(@new_elem)
|
114
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
115
|
-
@new_elem.parent.should == @doc
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should add the right attributes and namespaces to the newly created element" do
|
119
|
-
@parser.start_element(@new_elem_name, @new_elem_attributes)
|
120
|
-
@parser.elem["to"].should == "you@yourserver.com/home"
|
121
|
-
@parser.elem.namespaces.should == {"xmlns"=>"http://ns.com"}
|
122
|
-
end
|
123
|
-
|
124
|
-
describe "when the new element is of name stream:stream" do
|
125
|
-
it "should callback" do
|
126
|
-
@proc.should_receive(:call)
|
127
|
-
@parser.start_element("stream:stream", [])
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should reinit to nil the doc and the elem" do
|
131
|
-
@parser.start_element("stream:stream", [])
|
132
|
-
@parser.doc.should == nil
|
133
|
-
@parser.elem.should == nil
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe ".end_element" do
|
139
|
-
before(:each) do
|
140
|
-
@doc = Nokogiri::XML::Document.new
|
141
|
-
@parser.doc = @doc
|
142
|
-
@current = Nokogiri::XML::Element.new("element", @parser.doc)
|
143
|
-
@parser.elem = @current
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should add the content of the buffer to the @elem" do
|
147
|
-
@elem = Nokogiri::XML::Element.new("element", @parser.doc)
|
148
|
-
chars = "hello world"
|
149
|
-
@parser.instance_variable_set("@buffer", chars)
|
150
|
-
@parser.elem = @elem
|
151
|
-
@parser.end_element("element")
|
152
|
-
@elem.content.should == chars
|
153
|
-
end
|
154
|
-
|
155
|
-
describe "when we're finishing the doc's root" do
|
156
|
-
before(:each) do
|
157
|
-
@parser.doc.root = @current
|
158
|
-
end
|
159
|
-
|
160
|
-
it "should callback" do
|
161
|
-
@proc.should_receive(:call)
|
162
|
-
@parser.end_element("element")
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should reinit to nil the doc and the elem" do
|
166
|
-
@parser.end_element("element")
|
167
|
-
@parser.doc.should == nil
|
168
|
-
@parser.elem.should == nil
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe "when we're finishing another element" do
|
173
|
-
before(:each) do
|
174
|
-
@parser.doc.root = Nokogiri::XML::Element.new("root", @parser.doc)
|
175
|
-
@current.parent = @parser.doc.root
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should go back up one level" do
|
179
|
-
@parser.end_element("element")
|
180
|
-
@parser.elem = @current.parent
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
describe "a communication with an XMPP Client" do
|
186
|
-
|
187
|
-
before(:each) do
|
188
|
-
@stanzas = []
|
189
|
-
@proc = Proc.new { |stanza|
|
190
|
-
@stanzas << stanza
|
191
|
-
}
|
192
|
-
@parser = Skates::XmppParser.new(@proc)
|
193
|
-
end
|
194
|
-
|
195
|
-
it "should parse the right information" do
|
196
|
-
string = "<stream:stream
|
197
|
-
xmlns:stream='http://etherx.jabber.org/streams'
|
198
|
-
xmlns='jabber:component:accept'
|
199
|
-
from='plays.shakespeare.lit'
|
200
|
-
id='3BF96D32'>
|
201
|
-
<handshake/>
|
202
|
-
<message from='juliet@example.com'
|
203
|
-
to='romeo@example.net'
|
204
|
-
xml:lang='en'>
|
205
|
-
<body>Art thou not Romeo, and a Montague?</body>
|
206
|
-
<link href='http://sfbay.craigslist.org/search/sss?query=%2522mac+mini%2522+Intel+Core+Duo&minAsk=min&maxAsk=max&format=rss&format=rss' />
|
207
|
-
</message>"
|
208
|
-
pieces = rand(string.size/30)
|
209
|
-
# So we have to pick 'pieces' number between 0 and string.size
|
210
|
-
indices = []
|
211
|
-
pieces.times do |i|
|
212
|
-
indices[i] = rand(string.size)
|
213
|
-
end
|
214
|
-
# Now let's sort indices
|
215
|
-
indices.sort!
|
216
|
-
substrings = []
|
217
|
-
prev_index = 0
|
218
|
-
indices.each do |index|
|
219
|
-
substrings << string[prev_index, (index-prev_index)]
|
220
|
-
prev_index = index
|
221
|
-
end
|
222
|
-
substrings << string[prev_index, string.size]
|
223
|
-
#Just to make sure we split the string the right way!
|
224
|
-
substrings.join("").should == string
|
225
|
-
|
226
|
-
substrings.each do |s|
|
227
|
-
@parser.push(s)
|
228
|
-
end
|
229
|
-
|
230
|
-
@stanzas.map(&:to_xml).join("").should == "<stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" from=\"plays.shakespeare.lit\" id=\"3BF96D32\"/><handshake/><message from=\"juliet@example.com\" to=\"romeo@example.net\" xml:lang=\"en\">\n <body>Art thou not Romeo, and a Montague?</body>\n <link href=\"http://sfbay.craigslist.org/search/sss?query=%2522mac+mini%2522+Intel+Core+Duo&minAsk=min&maxAsk=max&format=rss&format=rss\"/>\n</message>"
|
231
|
-
@stanzas.last.at("link")["href"].should == "http://sfbay.craigslist.org/search/sss?query=%2522mac+mini%2522+Intel+Core+Duo&minAsk=min&maxAsk=max&format=rss&format=rss"
|
232
|
-
end
|
233
|
-
|
234
|
-
end
|
235
|
-
|
236
|
-
describe "when parsing a complex stanza" do
|
237
|
-
before(:each) do
|
238
|
-
@xml =<<-EOXML
|
239
|
-
<iq id="pub-296" to="test-track.superfeedr.com" type="set">
|
240
|
-
<feed xmlns="http://superfeedr.com/xmpp-superfeedr-ext" id="368">
|
241
|
-
<url>http://superfeedr.com/dummy.xml</url>
|
242
|
-
<http_code>200</http_code>
|
243
|
-
<etag>"eb8dfc6fa342dc8326851907efe35cda"</etag>
|
244
|
-
<number_of_new_entries>10</number_of_new_entries>
|
245
|
-
<last_error_message>7462B in 1.036602s, 10/10 new entries</last_error_message>
|
246
|
-
<last_fetch>2011-02-21T14:34:52-05:00</last_fetch>
|
247
|
-
<next_fetch>2011-02-21T14:38:37-05:00</next_fetch>
|
248
|
-
<period>225</period>
|
249
|
-
<last_maintenance_at>2011-02-21T14:34:52-05:00</last_maintenance_at>
|
250
|
-
<entries_count>10</entries_count>
|
251
|
-
<perform_maintenance>true</perform_maintenance>
|
252
|
-
<title>The Dummy Time Feed</title>
|
253
|
-
<format>feed</format>
|
254
|
-
<link href="http://superfeedr.com" rel="alternate" type="text/html"/>
|
255
|
-
<link href="http://superfeedr.com/dummy.xml" rel="self" type="application/atom+xml"/>
|
256
|
-
<last_parse>2011-02-21T14:34:52-05:00</last_parse>
|
257
|
-
<headers>
|
258
|
-
<server>nginx/0.8.52</server>
|
259
|
-
<date>Mon, 21 Feb 2011 19:35:41 GMT</date>
|
260
|
-
<content_type>application/xml; charset=utf-8</content_type>
|
261
|
-
<connection>close</connection>
|
262
|
-
<status>200 OK</status>
|
263
|
-
<etag>"eb8dfc6fa342dc8326851907efe35cda"</etag>
|
264
|
-
<x_runtime>858</x_runtime>
|
265
|
-
<content_length>7462</content_length>
|
266
|
-
<set_cookie/>
|
267
|
-
<cache_control>private, max-age=0, must-revalidate</cache_control>
|
268
|
-
</headers>
|
269
|
-
<id>tag:superfeedr.com,2005:/hubbub/dummy</id>
|
270
|
-
</feed>
|
271
|
-
<pubsub xmlns="http://jabber.org/protocol/pubsub">
|
272
|
-
<publish node="368">
|
273
|
-
<item>
|
274
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
275
|
-
<id>tag:superfeedr.com,2005:String/1298307758</id>
|
276
|
-
<published>2011-02-21T12:02:38-05:00</published>
|
277
|
-
<updated>2011-02-21T12:02:38-05:00</updated>
|
278
|
-
<title>17:02:38</title>
|
279
|
-
<summary type="text"/>
|
280
|
-
<content type="text">Monday February 21 17:02:38 UTC 2011 Somebody wanted to know what time it was.</content>
|
281
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
282
|
-
<link href="http://superfeedr.com/?1298307758" title="17:02:38" rel="alternate" type="text/html"/>
|
283
|
-
<category term="tests"/>
|
284
|
-
<author>
|
285
|
-
<name>Superfeedr</name>
|
286
|
-
<uri>http://superfeedr.com/</uri>
|
287
|
-
<email>julien@superfeedr.com</email>
|
288
|
-
</author>
|
289
|
-
</entry>
|
290
|
-
</item>
|
291
|
-
<item>
|
292
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
293
|
-
<id>tag:superfeedr.com,2005:String/1298307618</id>
|
294
|
-
<published>2011-02-21T12:00:18-05:00</published>
|
295
|
-
<updated>2011-02-21T12:00:18-05:00</updated>
|
296
|
-
<title>17:00:18</title>
|
297
|
-
<summary type="text"/>
|
298
|
-
<content type="text">Monday February 21 17:00:18 UTC 2011 Somebody wanted to know what time it was.</content>
|
299
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
300
|
-
<link href="http://superfeedr.com/?1298307618" title="17:00:18" rel="alternate" type="text/html"/>
|
301
|
-
<category term="tests"/>
|
302
|
-
<author>
|
303
|
-
<name>Superfeedr</name>
|
304
|
-
<uri>http://superfeedr.com/</uri>
|
305
|
-
<email>julien@superfeedr.com</email>
|
306
|
-
</author>
|
307
|
-
</entry>
|
308
|
-
</item>
|
309
|
-
<item>
|
310
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
311
|
-
<id>tag:superfeedr.com,2005:String/1298307454</id>
|
312
|
-
<published>2011-02-21T11:57:34-05:00</published>
|
313
|
-
<updated>2011-02-21T11:57:34-05:00</updated>
|
314
|
-
<title>16:57:34</title>
|
315
|
-
<summary type="text"/>
|
316
|
-
<content type="text">Monday February 21 16:57:34 UTC 2011 Somebody wanted to know what time it was.</content>
|
317
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
318
|
-
<link href="http://superfeedr.com/?1298307454" title="16:57:34" rel="alternate" type="text/html"/>
|
319
|
-
<category term="tests"/>
|
320
|
-
<author>
|
321
|
-
<name>Superfeedr</name>
|
322
|
-
<uri>http://superfeedr.com/</uri>
|
323
|
-
<email>julien@superfeedr.com</email>
|
324
|
-
</author>
|
325
|
-
</entry>
|
326
|
-
</item>
|
327
|
-
<item>
|
328
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
329
|
-
<id>tag:superfeedr.com,2005:String/1298307099</id>
|
330
|
-
<published>2011-02-21T11:51:39-05:00</published>
|
331
|
-
<updated>2011-02-21T11:51:39-05:00</updated>
|
332
|
-
<title>16:51:39</title>
|
333
|
-
<summary type="text"/>
|
334
|
-
<content type="text">Monday February 21 16:51:39 UTC 2011 Somebody wanted to know what time it was.</content>
|
335
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
336
|
-
<link href="http://superfeedr.com/?1298307099" title="16:51:39" rel="alternate" type="text/html"/>
|
337
|
-
<category term="tests"/>
|
338
|
-
<author>
|
339
|
-
<name>Superfeedr</name>
|
340
|
-
<uri>http://superfeedr.com/</uri>
|
341
|
-
<email>julien@superfeedr.com</email>
|
342
|
-
</author>
|
343
|
-
</entry>
|
344
|
-
</item>
|
345
|
-
<item>
|
346
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
347
|
-
<id>tag:superfeedr.com,2005:String/1298305317</id>
|
348
|
-
<published>2011-02-21T11:21:57-05:00</published>
|
349
|
-
<updated>2011-02-21T11:21:57-05:00</updated>
|
350
|
-
<title>16:21:57</title>
|
351
|
-
<summary type="text"/>
|
352
|
-
<content type="text">Monday February 21 16:21:57 UTC 2011 Somebody wanted to know what time it was.</content>
|
353
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
354
|
-
<link href="http://superfeedr.com/?1298305317" title="16:21:57" rel="alternate" type="text/html"/>
|
355
|
-
<category term="tests"/>
|
356
|
-
<author>
|
357
|
-
<name>Superfeedr</name>
|
358
|
-
<uri>http://superfeedr.com/</uri>
|
359
|
-
<email>julien@superfeedr.com</email>
|
360
|
-
</author>
|
361
|
-
</entry>
|
362
|
-
</item>
|
363
|
-
<item>
|
364
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
365
|
-
<id>tag:superfeedr.com,2005:String/1298305151</id>
|
366
|
-
<published>2011-02-21T11:19:11-05:00</published>
|
367
|
-
<updated>2011-02-21T11:19:11-05:00</updated>
|
368
|
-
<title>16:19:11</title>
|
369
|
-
<summary type="text"/>
|
370
|
-
<content type="text">Monday February 21 16:19:11 UTC 2011 Somebody wanted to know what time it was.</content>
|
371
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
372
|
-
<link href="http://superfeedr.com/?1298305151" title="16:19:11" rel="alternate" type="text/html"/>
|
373
|
-
<category term="tests"/>
|
374
|
-
<author>
|
375
|
-
<name>Superfeedr</name>
|
376
|
-
<uri>http://superfeedr.com/</uri>
|
377
|
-
<email>julien@superfeedr.com</email>
|
378
|
-
</author>
|
379
|
-
</entry>
|
380
|
-
</item>
|
381
|
-
<item>
|
382
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
383
|
-
<id>tag:superfeedr.com,2005:String/1298304372</id>
|
384
|
-
<published>2011-02-21T11:06:12-05:00</published>
|
385
|
-
<updated>2011-02-21T11:06:12-05:00</updated>
|
386
|
-
<title>16:06:12</title>
|
387
|
-
<summary type="text"/>
|
388
|
-
<content type="text">Monday February 21 16:06:12 UTC 2011 Somebody wanted to know what time it was.</content>
|
389
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
390
|
-
<link href="http://superfeedr.com/?1298304372" title="16:06:12" rel="alternate" type="text/html"/>
|
391
|
-
<category term="tests"/>
|
392
|
-
<author>
|
393
|
-
<name>Superfeedr</name>
|
394
|
-
<uri>http://superfeedr.com/</uri>
|
395
|
-
<email>julien@superfeedr.com</email>
|
396
|
-
</author>
|
397
|
-
</entry>
|
398
|
-
</item>
|
399
|
-
<item>
|
400
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
401
|
-
<id>tag:superfeedr.com,2005:String/1298304371</id>
|
402
|
-
<published>2011-02-21T11:06:11-05:00</published>
|
403
|
-
<updated>2011-02-21T11:06:11-05:00</updated>
|
404
|
-
<title>16:06:11</title>
|
405
|
-
<summary type="text"/>
|
406
|
-
<content type="text">Monday February 21 16:06:11 UTC 2011 Somebody wanted to know what time it was.</content>
|
407
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
408
|
-
<link href="http://superfeedr.com/?1298304371" title="16:06:11" rel="alternate" type="text/html"/>
|
409
|
-
<category term="tests"/>
|
410
|
-
<author>
|
411
|
-
<name>Superfeedr</name>
|
412
|
-
<uri>http://superfeedr.com/</uri>
|
413
|
-
<email>julien@superfeedr.com</email>
|
414
|
-
</author>
|
415
|
-
</entry>
|
416
|
-
</item>
|
417
|
-
<item>
|
418
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
419
|
-
<id>tag:superfeedr.com,2005:String/1298304085</id>
|
420
|
-
<published>2011-02-21T11:01:25-05:00</published>
|
421
|
-
<updated>2011-02-21T11:01:25-05:00</updated>
|
422
|
-
<title>16:01:25</title>
|
423
|
-
<summary type="text"/>
|
424
|
-
<content type="text">Monday February 21 16:01:25 UTC 2011 Somebody wanted to know what time it was.</content>
|
425
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
426
|
-
<link href="http://superfeedr.com/?1298304085" title="16:01:25" rel="alternate" type="text/html"/>
|
427
|
-
<category term="tests"/>
|
428
|
-
<author>
|
429
|
-
<name>Superfeedr</name>
|
430
|
-
<uri>http://superfeedr.com/</uri>
|
431
|
-
<email>julien@superfeedr.com</email>
|
432
|
-
</author>
|
433
|
-
</entry>
|
434
|
-
</item>
|
435
|
-
<item>
|
436
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.georss.org/georss" xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:sf="http://superfeedr.com/xmpp-pubsub-ext" xml:lang="en-US">
|
437
|
-
<id>tag:superfeedr.com,2005:String/1298303653</id>
|
438
|
-
<published>2011-02-21T10:54:13-05:00</published>
|
439
|
-
<updated>2011-02-21T10:54:13-05:00</updated>
|
440
|
-
<title>15:54:13</title>
|
441
|
-
<summary type="text"/>
|
442
|
-
<content type="text">Monday February 21 15:54:13 UTC 2011 Somebody wanted to know what time it was.</content>
|
443
|
-
<geo:point>37.773721,-122.414957</geo:point>
|
444
|
-
<link href="http://superfeedr.com/?1298303653" title="15:54:13" rel="alternate" type="text/html"/>
|
445
|
-
<category term="tests"/>
|
446
|
-
<author>
|
447
|
-
<name>Superfeedr</name>
|
448
|
-
<uri>http://superfeedr.com/</uri>
|
449
|
-
<email>julien@superfeedr.com</email>
|
450
|
-
</author>
|
451
|
-
</entry>
|
452
|
-
</item>
|
453
|
-
</publish>
|
454
|
-
</pubsub>
|
455
|
-
</iq>
|
456
|
-
EOXML
|
457
|
-
|
458
|
-
@proc = Proc.new { |stanza|
|
459
|
-
stanza.to_xml.should == @xml.strip
|
460
|
-
}
|
461
|
-
@parser = Skates::XmppParser.new(@proc)
|
462
|
-
end
|
463
|
-
|
464
|
-
it "should parse correctly the namespaces and the attributes" do
|
465
|
-
@parser.push(@xml)
|
466
|
-
end
|
467
|
-
end
|
468
|
-
|
469
|
-
end
|