atom-tools 0.9.0 → 2.0.5
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/COPYING +3 -3
- data/README +9 -49
- data/Rakefile +65 -62
- data/bin/atom-cp +159 -0
- data/bin/atom-grep +78 -0
- data/bin/atom-post +73 -0
- data/bin/atom-purge +82 -0
- data/doc/classes/Atom/AttrEl.html +163 -0
- data/doc/classes/Atom/Author.html +2 -19
- data/doc/classes/Atom/AutodiscoveryFailure.html +111 -0
- data/doc/classes/Atom/Categories.html +168 -0
- data/doc/classes/Atom/Category.html +10 -1
- data/doc/classes/Atom/Collection.html +194 -91
- data/doc/classes/Atom/Content.html +42 -1
- data/doc/classes/Atom/Contributor.html +2 -8
- data/doc/classes/Atom/Control.html +126 -0
- data/doc/classes/Atom/Converters.html +571 -0
- data/doc/classes/Atom/DigestAuth.html +285 -0
- data/doc/classes/Atom/Element.html +673 -106
- data/doc/classes/Atom/FileCache.html +287 -0
- data/doc/classes/Atom/HTTP.html +211 -95
- data/doc/classes/Atom/HTTPResponse.html +190 -0
- data/doc/classes/Atom/HasCategories.html +187 -0
- data/doc/classes/Atom/HasLinks.html +168 -0
- data/doc/classes/Atom/Link.html +80 -3
- data/doc/classes/Atom/NilCache.html +202 -0
- data/doc/classes/Atom/ParseError.html +111 -0
- data/doc/classes/Atom/Parsers.html +311 -0
- data/doc/classes/Atom/Person.html +130 -0
- data/doc/classes/Atom/Rights.html +113 -0
- data/doc/classes/Atom/Service.html +298 -0
- data/doc/{files/lib/atom/yaml_rb.html → classes/Atom/Source.html} +26 -24
- data/doc/classes/Atom/Subtitle.html +113 -0
- data/doc/classes/Atom/Summary.html +113 -0
- data/doc/classes/Atom/Text.html +196 -53
- data/doc/classes/Atom/Title.html +113 -0
- data/doc/classes/Atom/Tools.html +525 -0
- data/doc/classes/Atom/Workspace.html +121 -0
- data/doc/classes/Object.html +204 -0
- data/doc/created.rid +1 -1
- data/doc/files/README.html +9 -49
- data/doc/files/lib/atom/cache_rb.html +302 -0
- data/doc/files/lib/atom/collection_rb.html +1 -2
- data/doc/files/lib/atom/element_rb.html +2 -1
- data/doc/files/lib/atom/entry_rb.html +2 -2
- data/doc/files/lib/atom/feed_rb.html +1 -2
- data/doc/files/lib/atom/http_rb.html +6 -1
- data/doc/files/lib/atom/{xml_rb.html → service_rb.html} +8 -6
- data/doc/files/lib/atom/text_rb.html +2 -1
- data/doc/files/lib/atom/{app_rb.html → tools_rb.html} +4 -6
- data/doc/fr_class_index.html +23 -3
- data/doc/fr_file_index.html +3 -3
- data/doc/fr_method_index.html +111 -36
- data/lib/atom/cache.rb +178 -0
- data/lib/atom/collection.rb +90 -40
- data/lib/atom/element.rb +569 -161
- data/lib/atom/entry.rb +63 -89
- data/lib/atom/feed.rb +65 -67
- data/lib/atom/http.rb +421 -49
- data/lib/atom/service.rb +106 -0
- data/lib/atom/text.rb +138 -61
- data/lib/atom/tools.rb +163 -0
- data/spec/entry_spec.rb +364 -0
- data/spec/ext_spec.rb +42 -0
- data/spec/feed_spec.rb +39 -0
- data/spec/fixtures/contacts-feed.xml +34 -0
- data/spec/fixtures/entry-w-ext.xml +15 -0
- data/spec/fixtures/entry-w-xml.xml +24 -0
- data/spec/fixtures/entry.xml +42 -0
- data/spec/fixtures/feed-w-ext.xml +33 -0
- data/spec/fixtures/service-w-xhtml-ns.xml +21 -0
- data/spec/fixtures/service.xml +36 -0
- data/spec/service_spec.rb +108 -0
- data/spec/spec_helper.rb +9 -0
- data/test/conformance/order.rb +11 -10
- data/test/conformance/title.rb +9 -9
- data/test/conformance/updated.rb +2 -1
- data/test/runtests.rb +0 -0
- data/test/test_constructs.rb +78 -8
- data/test/test_feed.rb +35 -29
- data/test/test_general.rb +3 -30
- data/test/test_http.rb +248 -34
- data/test/test_protocol.rb +143 -24
- data/test/test_xml.rb +145 -53
- metadata +116 -62
- data/bin/atom-client.rb +0 -246
- data/bin/atom-server.rb~ +0 -71
- data/doc/classes/Atom/App.html +0 -217
- data/doc/classes/Atom/Entry.html +0 -365
- data/doc/classes/Atom/Feed.html +0 -585
- data/lib/atom/app.rb +0 -87
- data/lib/atom/xml.rb +0 -200
- data/lib/atom/yaml.rb +0 -101
data/test/test_xml.rb
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
|
+
$:.unshift 'lib/', File.dirname(__FILE__) + '/../lib'
|
|
1
2
|
require "test/unit"
|
|
2
|
-
|
|
3
|
-
# for entry.edit_url
|
|
4
|
-
require "atom/app"
|
|
3
|
+
require "atom/service"
|
|
5
4
|
|
|
6
5
|
class AtomTest < Test::Unit::TestCase
|
|
7
6
|
def test_text_type_text
|
|
8
7
|
entry = get_entry
|
|
9
|
-
|
|
10
|
-
entry.title = "
|
|
8
|
+
|
|
9
|
+
entry.title = "Let's talk about <html>"
|
|
11
10
|
assert_equal("text", entry.title["type"])
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
assert_match('<', entry.title.xml.to_s)
|
|
13
|
+
|
|
14
|
+
xml = entry.to_xml
|
|
15
|
+
|
|
16
|
+
b = Atom::Entry.parse(xml).to_s
|
|
17
|
+
|
|
18
|
+
base_check xml
|
|
19
|
+
|
|
20
|
+
assert_equal("Let's talk about <html>", xml.elements["title"].text)
|
|
21
|
+
|
|
22
|
+
assert_match('<', entry.to_s)
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
def test_text_type_html
|
|
@@ -23,8 +30,10 @@ class AtomTest < Test::Unit::TestCase
|
|
|
23
30
|
|
|
24
31
|
xml = get_elements entry
|
|
25
32
|
|
|
26
|
-
assert_equal("Atom-drunk pirates<br>run amok!", xml.elements["
|
|
27
|
-
assert_equal("html", xml.elements["
|
|
33
|
+
assert_equal("Atom-drunk pirates<br>run amok!", xml.elements["title"].text)
|
|
34
|
+
assert_equal("html", xml.elements["title"].attributes["type"])
|
|
35
|
+
|
|
36
|
+
assert_match('<', entry.to_s)
|
|
28
37
|
end
|
|
29
38
|
|
|
30
39
|
def test_text_type_xhtml
|
|
@@ -34,25 +43,34 @@ class AtomTest < Test::Unit::TestCase
|
|
|
34
43
|
entry.title["type"] = "xhtml"
|
|
35
44
|
|
|
36
45
|
xml = get_elements entry
|
|
37
|
-
|
|
38
|
-
base_check xml
|
|
39
46
|
|
|
40
|
-
assert_equal(XHTML::NS, xml.elements["
|
|
41
|
-
assert_equal("run amok", xml.elements["
|
|
47
|
+
assert_equal(XHTML::NS, xml.elements["title/div"].namespace)
|
|
48
|
+
assert_equal("run amok", xml.elements["title/div/em"].text)
|
|
49
|
+
|
|
50
|
+
assert_match('<em>', entry.to_s)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_html_text_with_entities
|
|
54
|
+
entry = get_entry
|
|
55
|
+
|
|
56
|
+
entry.title = "Atoms discovered to be smaller than 1μm"
|
|
57
|
+
entry.title["type"] = "html"
|
|
58
|
+
|
|
59
|
+
assert_match(/&mu;/, entry.to_s)
|
|
42
60
|
end
|
|
43
61
|
|
|
44
62
|
def test_author
|
|
45
63
|
entry = get_entry
|
|
46
64
|
a = entry.authors.new
|
|
47
|
-
|
|
65
|
+
|
|
48
66
|
a.name= "Brendan Taylor"
|
|
49
67
|
a.uri = "http://necronomicorp.com/blog/"
|
|
50
68
|
|
|
51
69
|
xml = get_elements entry
|
|
52
70
|
|
|
53
|
-
assert_equal("http://necronomicorp.com/blog/", xml.elements["
|
|
54
|
-
assert_equal("Brendan Taylor", xml.elements["
|
|
55
|
-
assert_nil(xml.elements["
|
|
71
|
+
assert_equal("http://necronomicorp.com/blog/", xml.elements["author/uri"].text)
|
|
72
|
+
assert_equal("Brendan Taylor", xml.elements["author/name"].text)
|
|
73
|
+
assert_nil(xml.elements["author/email"])
|
|
56
74
|
end
|
|
57
75
|
|
|
58
76
|
def test_tags
|
|
@@ -70,17 +88,38 @@ class AtomTest < Test::Unit::TestCase
|
|
|
70
88
|
entry.updated = "1970-01-01"
|
|
71
89
|
entry.content = "blah"
|
|
72
90
|
|
|
73
|
-
|
|
91
|
+
assert entry.updated.is_a?(Time)
|
|
74
92
|
|
|
75
|
-
xml =
|
|
93
|
+
xml = entry.to_xml
|
|
94
|
+
|
|
95
|
+
b = Atom::Entry.parse(xml).to_s
|
|
76
96
|
|
|
77
|
-
|
|
97
|
+
base_check xml
|
|
98
|
+
|
|
99
|
+
assert_match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, xml.elements["updated"].text, "atom:updated isn't in xsd:datetime format")
|
|
78
100
|
|
|
79
101
|
entry.updated!
|
|
80
102
|
|
|
81
103
|
assert((Time.parse("1970-01-01") < entry.updated), "<updated/> is not updated")
|
|
82
104
|
end
|
|
83
105
|
|
|
106
|
+
def test_edited
|
|
107
|
+
entry = get_entry
|
|
108
|
+
|
|
109
|
+
assert_nil entry.edited
|
|
110
|
+
|
|
111
|
+
entry.edited = "1990-04-07"
|
|
112
|
+
assert entry.edited.is_a?(Time)
|
|
113
|
+
|
|
114
|
+
xml = get_elements entry
|
|
115
|
+
assert_equal(Atom::PP_NS, xml.elements["app:edited"].namespace)
|
|
116
|
+
assert_match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, xml.elements["app:edited"].text,
|
|
117
|
+
"atom:edited isn't in xsd:datetime format")
|
|
118
|
+
|
|
119
|
+
entry.edited!
|
|
120
|
+
assert((Time.parse("1990-04-07") < entry.edited), "<edited/> is not updated")
|
|
121
|
+
end
|
|
122
|
+
|
|
84
123
|
def test_out_of_line
|
|
85
124
|
entry = get_entry
|
|
86
125
|
|
|
@@ -90,28 +129,56 @@ class AtomTest < Test::Unit::TestCase
|
|
|
90
129
|
|
|
91
130
|
xml = get_elements(entry)
|
|
92
131
|
|
|
93
|
-
assert_nil
|
|
94
|
-
assert_equal("http://example.org/test.png", xml.elements["
|
|
95
|
-
assert_equal("image/png", xml.elements["
|
|
132
|
+
assert_nil xml.elements["content"].text
|
|
133
|
+
assert_equal("http://example.org/test.png", xml.elements["content"].attributes["src"])
|
|
134
|
+
assert_equal("image/png", xml.elements["content"].attributes["type"])
|
|
96
135
|
end
|
|
97
136
|
|
|
98
137
|
def test_extensions
|
|
99
138
|
entry = get_entry
|
|
100
139
|
|
|
101
|
-
assert(entry.extensions.
|
|
140
|
+
assert(entry.extensions.empty?)
|
|
102
141
|
|
|
103
142
|
element = REXML::Element.new("test")
|
|
104
143
|
element.add_namespace "http://purl.org/"
|
|
105
144
|
|
|
106
145
|
entry.extensions << element
|
|
107
146
|
|
|
147
|
+
assert entry.extensions.member?(element)
|
|
148
|
+
|
|
149
|
+
xml = get_elements entry
|
|
150
|
+
|
|
151
|
+
assert_equal(REXML::Element, xml.elements["test"].class)
|
|
152
|
+
assert_equal("http://purl.org/", xml.elements["test"].namespace)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_roundtrip_extension
|
|
156
|
+
entry = Atom::Entry.parse("<entry xmlns='http://www.w3.org/2005/Atom' xmlns:nil='http://necronomicorp.com/nil'><nil:ext/></entry>")
|
|
157
|
+
|
|
158
|
+
assert_match(/xmlns:nil='http:\/\/necronomicorp.com\/nil'/, entry.to_s)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_app_control
|
|
162
|
+
entry = get_entry
|
|
163
|
+
|
|
164
|
+
assert !entry.draft
|
|
165
|
+
|
|
166
|
+
assert_nil get_elements(entry).elements["control"]
|
|
167
|
+
|
|
168
|
+
entry.draft = true
|
|
169
|
+
|
|
108
170
|
xml = get_elements entry
|
|
109
171
|
|
|
110
|
-
assert_equal
|
|
111
|
-
assert_equal
|
|
172
|
+
assert_equal Atom::PP_NS, xml.elements["app:control"].namespace
|
|
173
|
+
assert_equal Atom::PP_NS, xml.elements["app:control/app:draft"].namespace
|
|
174
|
+
assert_equal "yes", xml.elements["app:control/app:draft"].text
|
|
175
|
+
|
|
176
|
+
entry2 = Atom::Entry.parse xml
|
|
177
|
+
|
|
178
|
+
assert entry.draft
|
|
112
179
|
end
|
|
113
180
|
|
|
114
|
-
def
|
|
181
|
+
def test_extensive_entry_parsing
|
|
115
182
|
str = '<entry xmlns="http://www.w3.org/2005/Atom">
|
|
116
183
|
<title>Atom draft-07 snapshot</title>
|
|
117
184
|
<link rel="alternate" type="text/html"
|
|
@@ -141,10 +208,10 @@ str = '<entry xmlns="http://www.w3.org/2005/Atom">
|
|
|
141
208
|
</entry>'
|
|
142
209
|
|
|
143
210
|
entry = Atom::Entry.parse(str)
|
|
144
|
-
|
|
211
|
+
|
|
145
212
|
assert_equal("Atom draft-07 snapshot", entry.title.to_s)
|
|
146
213
|
assert_equal("tag:example.org,2003:3.2397", entry.id)
|
|
147
|
-
|
|
214
|
+
|
|
148
215
|
assert_equal(Time.parse("2005-07-31T12:29:29Z"), entry.updated)
|
|
149
216
|
assert_equal(Time.parse("2003-12-13T08:29:29-04:00"), entry.published)
|
|
150
217
|
|
|
@@ -162,16 +229,16 @@ str = '<entry xmlns="http://www.w3.org/2005/Atom">
|
|
|
162
229
|
assert_equal("Mark Pilgrim", entry.authors.first.name)
|
|
163
230
|
assert_equal("http://example.org/", entry.authors.first.uri)
|
|
164
231
|
assert_equal("f8dy@example.com", entry.authors.first.email)
|
|
165
|
-
|
|
232
|
+
|
|
166
233
|
assert_equal(2, entry.contributors.length)
|
|
167
234
|
assert_equal("Sam Ruby", entry.contributors.first.name)
|
|
168
235
|
assert_equal("Joe Gregorio", entry.contributors.last.name)
|
|
169
|
-
|
|
236
|
+
|
|
170
237
|
assert_equal("xhtml", entry.content["type"])
|
|
171
|
-
|
|
238
|
+
|
|
172
239
|
assert_match("<p><i>[Update: The Atom draft is finished.]</i></p>",
|
|
173
240
|
entry.content.to_s)
|
|
174
|
-
|
|
241
|
+
|
|
175
242
|
assert_equal("http://diveintomark.org/", entry.content.base)
|
|
176
243
|
# XXX unimplemented
|
|
177
244
|
# assert_equal("en", entry.content.lang)
|
|
@@ -225,7 +292,7 @@ END
|
|
|
225
292
|
assert_equal("tag:example.org,2003:3", feed.id)
|
|
226
293
|
|
|
227
294
|
assert_equal([], feed.authors)
|
|
228
|
-
|
|
295
|
+
|
|
229
296
|
alt = feed.links.find { |l| l["rel"] == "alternate" }
|
|
230
297
|
assert_equal("alternate", alt["rel"])
|
|
231
298
|
assert_equal("text/html", alt["type"])
|
|
@@ -239,7 +306,7 @@ END
|
|
|
239
306
|
# XXX unimplemented
|
|
240
307
|
# assert_equal("http://www.example.com/", feed.generator["uri"])
|
|
241
308
|
# assert_equal("1.0", feed.generator["version"])
|
|
242
|
-
|
|
309
|
+
|
|
243
310
|
assert_equal(1, feed.entries.length)
|
|
244
311
|
assert_equal "Atom draft-07 snapshot", feed.entries.first.title.to_s
|
|
245
312
|
end
|
|
@@ -259,20 +326,19 @@ END
|
|
|
259
326
|
assert_equal "<p>...& as a result of this, I submit that <var>pi</var> < 4", entry.summary.html.strip
|
|
260
327
|
end
|
|
261
328
|
|
|
262
|
-
def
|
|
263
|
-
|
|
329
|
+
def test_parse_goofy_entries
|
|
330
|
+
xml = <<END
|
|
264
331
|
<entry xmlns="http://www.w3.org/2005/Atom">
|
|
265
|
-
|
|
266
|
-
Summary doesn't have src.
|
|
267
|
-
</summary>
|
|
332
|
+
<content type="html"></content>
|
|
268
333
|
</entry>
|
|
269
334
|
END
|
|
270
|
-
|
|
271
|
-
entry = Atom::Entry.parse xml
|
|
272
335
|
|
|
273
|
-
|
|
274
|
-
assert_equal "Summary doesn't have src.", entry.summary.to_s.strip
|
|
336
|
+
entry = Atom::Entry.parse(xml)
|
|
275
337
|
|
|
338
|
+
assert_equal("", entry.content.to_s)
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
def test_parse_outofline_content
|
|
276
342
|
xml = <<END
|
|
277
343
|
<entry xmlns="http://www.w3.org/2005/Atom">
|
|
278
344
|
<content src="http://necronomicorp.com/nil">
|
|
@@ -287,14 +353,36 @@ END
|
|
|
287
353
|
assert_equal "", entry.content.to_s
|
|
288
354
|
end
|
|
289
355
|
|
|
356
|
+
def test_serialize_base
|
|
357
|
+
entry = Atom::Entry.new
|
|
358
|
+
|
|
359
|
+
entry.base = "http://necronomicorp.com/nil"
|
|
360
|
+
|
|
361
|
+
base = get_elements(entry).root.attributes["xml:base"]
|
|
362
|
+
assert_equal "http://necronomicorp.com/nil", base
|
|
363
|
+
|
|
364
|
+
entry.base = URI.parse("http://necronomicorp.com/nil")
|
|
365
|
+
|
|
366
|
+
base = get_elements(entry).root.attributes["xml:base"]
|
|
367
|
+
assert_equal "http://necronomicorp.com/nil", base
|
|
368
|
+
end
|
|
369
|
+
|
|
290
370
|
def test_relative_base
|
|
291
371
|
base_url = "http://www.tbray.org/ongoing/ongoing.atom"
|
|
292
372
|
doc = "<entry xmlns='http://www.w3.org/2005/Atom' xml:base='When/200x/2006/10/11/'/>"
|
|
293
|
-
|
|
373
|
+
|
|
294
374
|
entry = Atom::Entry.parse(doc, base_url)
|
|
295
375
|
assert_equal("http://www.tbray.org/ongoing/When/200x/2006/10/11/", entry.base)
|
|
296
376
|
end
|
|
297
|
-
|
|
377
|
+
|
|
378
|
+
def test_relative_src
|
|
379
|
+
base_url = "http://example.org/foo/"
|
|
380
|
+
doc = "<entry xmlns='http://www.w3.org/2005/Atom'><content src='./bar'/></entry>"
|
|
381
|
+
|
|
382
|
+
entry = Atom::Entry.parse(doc, base_url)
|
|
383
|
+
assert_equal("http://example.org/foo/bar", entry.content['src'])
|
|
384
|
+
end
|
|
385
|
+
|
|
298
386
|
def test_edit_url
|
|
299
387
|
doc = <<END
|
|
300
388
|
<entry xmlns="http://www.w3.org/2005/Atom"><link rel="edit"/></entry>
|
|
@@ -310,7 +398,7 @@ END
|
|
|
310
398
|
entry = Atom::Entry.parse(doc)
|
|
311
399
|
|
|
312
400
|
assert_nil(entry.edit_url)
|
|
313
|
-
|
|
401
|
+
|
|
314
402
|
doc = <<END
|
|
315
403
|
<entry xmlns="http://www.w3.org/2005/Atom">
|
|
316
404
|
<link rel="edit" href="http://necronomicorp.com/nil"/>
|
|
@@ -320,15 +408,17 @@ END
|
|
|
320
408
|
entry = Atom::Entry.parse(doc)
|
|
321
409
|
|
|
322
410
|
assert_equal("http://necronomicorp.com/nil", entry.edit_url)
|
|
323
|
-
end
|
|
324
411
|
|
|
412
|
+
entry.edit_url = "http://necronomicorp.com/foo"
|
|
413
|
+
assert_equal "http://necronomicorp.com/foo", entry.edit_url
|
|
414
|
+
end
|
|
325
415
|
|
|
326
416
|
def assert_has_category xml, term
|
|
327
417
|
assert_not_nil(REXML::XPath.match(xml, "/entry/category[@term = #{term}]"))
|
|
328
418
|
end
|
|
329
419
|
|
|
330
420
|
def assert_has_content_type xml, type
|
|
331
|
-
assert_equal(type, xml.elements["
|
|
421
|
+
assert_equal(type, xml.elements["content"].attributes["type"])
|
|
332
422
|
end
|
|
333
423
|
|
|
334
424
|
def get_entry
|
|
@@ -339,10 +429,12 @@ END
|
|
|
339
429
|
def get_elements entry
|
|
340
430
|
xml = entry.to_xml
|
|
341
431
|
|
|
342
|
-
|
|
343
|
-
|
|
432
|
+
b = Atom::Entry.parse(xml)
|
|
433
|
+
|
|
434
|
+
assert_equal(xml.to_s, b.to_s)
|
|
435
|
+
|
|
344
436
|
base_check xml
|
|
345
|
-
|
|
437
|
+
|
|
346
438
|
xml
|
|
347
439
|
end
|
|
348
440
|
|
metadata
CHANGED
|
@@ -1,107 +1,161 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
|
-
rubygems_version: 0.8.11
|
|
3
|
-
specification_version: 1
|
|
4
2
|
name: atom-tools
|
|
5
3
|
version: !ruby/object:Gem::Version
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
rubyforge_project:
|
|
14
|
-
description:
|
|
15
|
-
autorequire:
|
|
16
|
-
default_executable:
|
|
17
|
-
bindir: bin
|
|
18
|
-
has_rdoc: true
|
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
20
|
-
requirements:
|
|
21
|
-
- - ">"
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: 0.0.0
|
|
24
|
-
version:
|
|
4
|
+
hash: 5
|
|
5
|
+
prerelease: false
|
|
6
|
+
segments:
|
|
7
|
+
- 2
|
|
8
|
+
- 0
|
|
9
|
+
- 5
|
|
10
|
+
version: 2.0.5
|
|
25
11
|
platform: ruby
|
|
26
|
-
signing_key:
|
|
27
|
-
cert_chain:
|
|
28
12
|
authors:
|
|
29
13
|
- Brendan Taylor
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2010-08-31 00:00:00 -06:00
|
|
19
|
+
default_executable:
|
|
20
|
+
dependencies: []
|
|
21
|
+
|
|
22
|
+
description: |-
|
|
23
|
+
atom-tools is an all-in-one Atom library. It parses and builds Atom (RFC 4287) entries and feeds, and manipulates Atom Publishing Protocol (RFC 5023) Collections.
|
|
24
|
+
|
|
25
|
+
It also comes with a set of commandline utilities for working with AtomPub Collections.
|
|
26
|
+
|
|
27
|
+
It is not the fastest Ruby Atom library, but it is comprehensive and makes handling extensions to the Atom format very easy.
|
|
28
|
+
email: whateley@gmail.com
|
|
29
|
+
executables: []
|
|
30
|
+
|
|
31
|
+
extensions: []
|
|
32
|
+
|
|
33
|
+
extra_rdoc_files:
|
|
34
|
+
- README
|
|
30
35
|
files:
|
|
31
36
|
- COPYING
|
|
32
37
|
- README
|
|
33
38
|
- Rakefile
|
|
34
39
|
- setup.rb
|
|
35
|
-
- bin/atom-
|
|
36
|
-
- bin/atom-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- doc/
|
|
40
|
-
- doc/fr_method_index.html
|
|
41
|
-
- doc/fr_class_index.html
|
|
42
|
-
- doc/fr_file_index.html
|
|
43
|
-
- doc/created.rid
|
|
44
|
-
- doc/classes
|
|
45
|
-
- doc/files/lib
|
|
46
|
-
- doc/files/README.html
|
|
47
|
-
- doc/files/lib/atom
|
|
40
|
+
- bin/atom-grep
|
|
41
|
+
- bin/atom-post
|
|
42
|
+
- bin/atom-purge
|
|
43
|
+
- bin/atom-cp
|
|
44
|
+
- doc/files/lib/atom/tools_rb.html
|
|
48
45
|
- doc/files/lib/atom/feed_rb.html
|
|
49
46
|
- doc/files/lib/atom/text_rb.html
|
|
50
|
-
- doc/files/lib/atom/
|
|
51
|
-
- doc/files/lib/atom/
|
|
47
|
+
- doc/files/lib/atom/cache_rb.html
|
|
48
|
+
- doc/files/lib/atom/service_rb.html
|
|
52
49
|
- doc/files/lib/atom/element_rb.html
|
|
53
|
-
- doc/files/lib/atom/app_rb.html
|
|
54
50
|
- doc/files/lib/atom/entry_rb.html
|
|
55
51
|
- doc/files/lib/atom/http_rb.html
|
|
56
52
|
- doc/files/lib/atom/collection_rb.html
|
|
57
|
-
- doc/
|
|
58
|
-
- doc/
|
|
53
|
+
- doc/files/README.html
|
|
54
|
+
- doc/index.html
|
|
55
|
+
- doc/rdoc-style.css
|
|
56
|
+
- doc/fr_method_index.html
|
|
57
|
+
- doc/fr_class_index.html
|
|
58
|
+
- doc/fr_file_index.html
|
|
59
|
+
- doc/created.rid
|
|
60
|
+
- doc/classes/Atom/Categories.html
|
|
61
|
+
- doc/classes/Atom/Parsers.html
|
|
62
|
+
- doc/classes/Atom/Service.html
|
|
59
63
|
- doc/classes/Atom/Author.html
|
|
60
64
|
- doc/classes/Atom/Element.html
|
|
61
|
-
- doc/classes/Atom/
|
|
62
|
-
- doc/classes/Atom/
|
|
65
|
+
- doc/classes/Atom/Tools.html
|
|
66
|
+
- doc/classes/Atom/FileCache.html
|
|
67
|
+
- doc/classes/Atom/DigestAuth.html
|
|
63
68
|
- doc/classes/Atom/Text.html
|
|
69
|
+
- doc/classes/Atom/ParseError.html
|
|
64
70
|
- doc/classes/Atom/Contributor.html
|
|
71
|
+
- doc/classes/Atom/Control.html
|
|
72
|
+
- doc/classes/Atom/HTTPResponse.html
|
|
65
73
|
- doc/classes/Atom/HTTP.html
|
|
74
|
+
- doc/classes/Atom/NilCache.html
|
|
75
|
+
- doc/classes/Atom/AutodiscoveryFailure.html
|
|
76
|
+
- doc/classes/Atom/Source.html
|
|
66
77
|
- doc/classes/Atom/Link.html
|
|
67
78
|
- doc/classes/Atom/Collection.html
|
|
68
79
|
- doc/classes/Atom/Content.html
|
|
69
80
|
- doc/classes/Atom/Category.html
|
|
70
|
-
- doc/classes/Atom/
|
|
81
|
+
- doc/classes/Atom/Converters.html
|
|
82
|
+
- doc/classes/Atom/Person.html
|
|
83
|
+
- doc/classes/Atom/Workspace.html
|
|
84
|
+
- doc/classes/Atom/HasCategories.html
|
|
85
|
+
- doc/classes/Atom/Title.html
|
|
86
|
+
- doc/classes/Atom/Rights.html
|
|
87
|
+
- doc/classes/Atom/AttrEl.html
|
|
88
|
+
- doc/classes/Atom/Subtitle.html
|
|
89
|
+
- doc/classes/Atom/Summary.html
|
|
90
|
+
- doc/classes/Atom/HasLinks.html
|
|
91
|
+
- doc/classes/Object.html
|
|
92
|
+
- doc/classes/XHTML.html
|
|
71
93
|
- test/test_constructs.rb
|
|
72
94
|
- test/runtests.rb
|
|
73
95
|
- test/test_feed.rb
|
|
74
96
|
- test/test_protocol.rb
|
|
75
|
-
- test/conformance
|
|
76
|
-
- test/test_xml.rb
|
|
77
|
-
- test/test_http.rb
|
|
78
|
-
- test/test_general.rb
|
|
79
97
|
- test/conformance/updated.rb
|
|
80
98
|
- test/conformance/xmlnamespace.rb
|
|
81
99
|
- test/conformance/title.rb
|
|
82
100
|
- test/conformance/order.rb
|
|
83
101
|
- test/conformance/xhtmlcontentdiv.rb
|
|
84
|
-
-
|
|
85
|
-
-
|
|
102
|
+
- test/test_xml.rb
|
|
103
|
+
- test/test_http.rb
|
|
104
|
+
- test/test_general.rb
|
|
105
|
+
- spec/entry_spec.rb
|
|
106
|
+
- spec/ext_spec.rb
|
|
107
|
+
- spec/spec_helper.rb
|
|
108
|
+
- spec/feed_spec.rb
|
|
109
|
+
- spec/fixtures/feed-w-ext.xml
|
|
110
|
+
- spec/fixtures/service-w-xhtml-ns.xml
|
|
111
|
+
- spec/fixtures/entry-w-xml.xml
|
|
112
|
+
- spec/fixtures/entry-w-ext.xml
|
|
113
|
+
- spec/fixtures/contacts-feed.xml
|
|
114
|
+
- spec/fixtures/service.xml
|
|
115
|
+
- spec/fixtures/entry.xml
|
|
116
|
+
- spec/service_spec.rb
|
|
117
|
+
- lib/atom/cache.rb
|
|
86
118
|
- lib/atom/feed.rb
|
|
87
119
|
- lib/atom/text.rb
|
|
88
|
-
- lib/atom/app.rb
|
|
89
120
|
- lib/atom/collection.rb
|
|
121
|
+
- lib/atom/service.rb
|
|
90
122
|
- lib/atom/entry.rb
|
|
91
|
-
- lib/atom/
|
|
123
|
+
- lib/atom/tools.rb
|
|
92
124
|
- lib/atom/element.rb
|
|
93
125
|
- lib/atom/http.rb
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
extra_rdoc_files:
|
|
99
|
-
- README
|
|
100
|
-
executables: []
|
|
126
|
+
has_rdoc: true
|
|
127
|
+
homepage: http://github.com/bct/atom-tools/wikis
|
|
128
|
+
licenses: []
|
|
101
129
|
|
|
102
|
-
|
|
130
|
+
post_install_message:
|
|
131
|
+
rdoc_options: []
|
|
103
132
|
|
|
133
|
+
require_paths:
|
|
134
|
+
- lib
|
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
|
+
none: false
|
|
137
|
+
requirements:
|
|
138
|
+
- - ">="
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
hash: 3
|
|
141
|
+
segments:
|
|
142
|
+
- 0
|
|
143
|
+
version: "0"
|
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ">="
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
hash: 3
|
|
150
|
+
segments:
|
|
151
|
+
- 0
|
|
152
|
+
version: "0"
|
|
104
153
|
requirements: []
|
|
105
154
|
|
|
106
|
-
|
|
107
|
-
|
|
155
|
+
rubyforge_project: ibes
|
|
156
|
+
rubygems_version: 1.3.7
|
|
157
|
+
signing_key:
|
|
158
|
+
specification_version: 3
|
|
159
|
+
summary: Tools for working with Atom Entries, Feeds and Collections.
|
|
160
|
+
test_files:
|
|
161
|
+
- test/runtests.rb
|