atomutil 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/Manifest.txt +35 -0
- data/README.txt +632 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/lib/atomutil.rb +1717 -0
- data/log/debug.log +0 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/spec/categories_spec.rb +44 -0
- data/spec/category_spec.rb +27 -0
- data/spec/content_spec.rb +56 -0
- data/spec/customfeed_spec.rb +68 -0
- data/spec/feed_spec.rb +227 -0
- data/spec/link_spec.rb +58 -0
- data/spec/namespace_spec.rb +40 -0
- data/spec/opensearch_spec.rb +22 -0
- data/spec/person_spec.rb +61 -0
- data/spec/samples/feed.atom +60 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/threading_spec.rb +47 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +17 -0
- data/website/index.html +11 -0
- data/website/index.txt +39 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- metadata +85 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Categories, "categories handler" do
|
4
|
+
|
5
|
+
it "should handle attributes and elements collectly with each accessor" do
|
6
|
+
cats = Atom::Categories.new
|
7
|
+
cats.fixed = 'yes'
|
8
|
+
cats.fixed.should == 'yes'
|
9
|
+
cats.scheme = 'http://example.org/extra-cats/'
|
10
|
+
cats.scheme.should == 'http://example.org/extra-cats/'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should handle attributes and elements collectly with hash-type parameter" do
|
14
|
+
cats = Atom::Categories.new :fixed => 'yes', :scheme => 'http://example.org/extra-cats/'
|
15
|
+
cats.fixed.should == 'yes'
|
16
|
+
cats.scheme.should == 'http://example.org/extra-cats/'
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
it "should handle Atom::Category objects collectly" do
|
21
|
+
cats = Atom::Categories.new
|
22
|
+
cats.fixed = 'yes'
|
23
|
+
cats.scheme = 'http://example.org/extra-cats/'
|
24
|
+
cat = Atom::Category.new
|
25
|
+
cat.scheme = "http://example.org/extra-cats/"
|
26
|
+
cat.term = "joke"
|
27
|
+
cats.add_category cat
|
28
|
+
first = cats.categories.first
|
29
|
+
first.scheme.should == "http://example.org/extra-cats/"
|
30
|
+
first.term.should == "joke"
|
31
|
+
cat2 = Atom::Category.new
|
32
|
+
cat2.scheme = "http://example.org/extra-cats/"
|
33
|
+
cat2.term = "serious"
|
34
|
+
cats.add_category cat2
|
35
|
+
cats2 = cats.categories
|
36
|
+
cats2[0].scheme.should == "http://example.org/extra-cats/"
|
37
|
+
cats2[0].term.should == "joke"
|
38
|
+
cats2[1].scheme.should == "http://example.org/extra-cats/"
|
39
|
+
cats2[1].term.should == "serious"
|
40
|
+
cats_xml = cats.to_s
|
41
|
+
cats_xml.should =~ %r{<categories(?: xmlns='http://www.w3.org/2007/app')?}
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Category, "category object" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@cat = Atom::Category.new
|
7
|
+
@cat.term = "foo"
|
8
|
+
@cat.label = "bar"
|
9
|
+
@cat.scheme = "http://example.com/"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should handle parameters collectly" do
|
13
|
+
@cat.term.should == "foo"
|
14
|
+
@cat.label.should == "bar"
|
15
|
+
@cat.scheme.should == "http://example.com/"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should build xml collectly" do
|
19
|
+
cat_xml = @cat.to_s
|
20
|
+
cat_xml.should =~ /<category\s.*\/>/
|
21
|
+
cat_xml.should =~ /term='foo'/
|
22
|
+
cat_xml.should =~ /label='bar'/
|
23
|
+
cat_xml.should =~ /scheme='http:\/\/example\.com\/'/
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Content, "setter/getter and building xml" do
|
4
|
+
|
5
|
+
it "should set and get type" do
|
6
|
+
content = Atom::Content.new
|
7
|
+
content.type = "image/jpeg"
|
8
|
+
content.type.should == "image/jpeg"
|
9
|
+
content.type = "application/gzip"
|
10
|
+
content.type.should == "application/gzip"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should construct with body collectly" do
|
14
|
+
content = Atom::Content.new :body => 'This is a test'
|
15
|
+
content.body.should == 'This is a test'
|
16
|
+
content.type.should == 'text'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set body and type collectly" do
|
20
|
+
content = Atom::Content.new :body => 'This is a test', :type => 'text/bar'
|
21
|
+
content.body.should == 'This is a test'
|
22
|
+
content.type.should == 'text/bar'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should handle text body collectly" do
|
26
|
+
content = Atom::Content.new
|
27
|
+
content.body = 'This is a test'
|
28
|
+
content.body.should == 'This is a test'
|
29
|
+
content.type = 'foo/bar'
|
30
|
+
content.type.should == 'foo/bar'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should handle xhtml body collectly" do
|
34
|
+
content = Atom::Content.new
|
35
|
+
content.body = '<p>This is a test with XHTML</p>'
|
36
|
+
content.body.should == '<p>This is a test with XHTML</p>'
|
37
|
+
content.type.should == 'xhtml'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should handle invalid xhtml body collectly" do
|
41
|
+
content = Atom::Content.new
|
42
|
+
content.body = '<p>This is a test with invalid XHTML'
|
43
|
+
content.body.should == '<p>This is a test with invalid XHTML'
|
44
|
+
content.type.should == 'html'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should handle image data collectly" do
|
48
|
+
content = Atom::Content.new
|
49
|
+
content.type = 'image/jpeg'
|
50
|
+
content.body = "\xff\xde\xde\xde"
|
51
|
+
content.type.should == 'image/jpeg'
|
52
|
+
content.body.should == "\xff\xde\xde\xde"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Feed, "customized with other namespace" do
|
4
|
+
|
5
|
+
it "should parse and handle openSearch elements collectly" do
|
6
|
+
xmlstring = <<-EOS
|
7
|
+
<feed xmlns="http://www.w3.org/2005/Atom"
|
8
|
+
xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.1/">
|
9
|
+
<title>Example</title>
|
10
|
+
<icon>http://example.org/feed/icon.jpeg</icon>
|
11
|
+
<openSearch:totalResult>153</openSearch:totalResult>
|
12
|
+
<openSearch:startIndex>40</openSearch:startIndex>
|
13
|
+
<openSearch:itemsPerPage>20</openSearch:itemsPerPage>
|
14
|
+
</feed>
|
15
|
+
EOS
|
16
|
+
feed = Atom::Feed.new :stream => xmlstring
|
17
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'totalResult').text.to_i.should == 153
|
18
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'startIndex').text.to_i.should == 40
|
19
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'itemsPerPage').text.to_i.should == 20
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should build and handle openSearch elements collectly" do
|
23
|
+
feed = Atom::Feed.new
|
24
|
+
feed.title = 'Example'
|
25
|
+
feed.set(Atom::Namespace::OPEN_SEARCH, 'totalResult', 153)
|
26
|
+
feed.set(Atom::Namespace::OPEN_SEARCH, 'startIndex', 40)
|
27
|
+
feed.set(Atom::Namespace::OPEN_SEARCH, 'itemsPerPage', 20)
|
28
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'totalResult').text.to_i.should == 153
|
29
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'startIndex').text.to_i.should == 40
|
30
|
+
feed.get(Atom::Namespace::OPEN_SEARCH, 'itemsPerPage').text.to_i.should == 20
|
31
|
+
end
|
32
|
+
|
33
|
+
it "shoudl parse and handle more complex elements" do
|
34
|
+
xmlstring = <<-EOS
|
35
|
+
<feed xmlns="http://www.w3.org/2005/Atom"
|
36
|
+
xmlns:myns="http://example.org/2007/example">
|
37
|
+
<title>Example</title>
|
38
|
+
<icon>http://example.org/feed/icon.jpg</icon>
|
39
|
+
<myns:foo><myns:bar buz="Buz">Bar</myns:bar></myns:foo>
|
40
|
+
</feed>
|
41
|
+
EOS
|
42
|
+
myns = Atom::Namespace.new :prefix => 'myns', :uri => 'http://example.org/2007/example'
|
43
|
+
feed = Atom::Feed.new :stream => xmlstring
|
44
|
+
foo = feed.get(myns, 'foo')
|
45
|
+
foo.class.should == REXML::Element
|
46
|
+
bar = foo.elements[1]
|
47
|
+
bar.class.should == REXML::Element
|
48
|
+
bar.attributes['buz'].should == 'Buz'
|
49
|
+
bar.text.should == 'Bar'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should build and handle more complex elements" do
|
53
|
+
myns = Atom::Namespace.new :prefix => 'myns', :uri => 'http://example.org/2007/example'
|
54
|
+
feed = Atom::Feed.new :title => 'Example'
|
55
|
+
bar = REXML::Element.new("#{myns.prefix}:bar")
|
56
|
+
bar.text = 'Bar'
|
57
|
+
bar.add_attribute(REXML::Attribute.new("buz", 'Buz'))
|
58
|
+
feed.set(myns, 'foo', bar)
|
59
|
+
foo = feed.get(myns, 'foo')
|
60
|
+
foo.class.should == REXML::Element
|
61
|
+
bar2 = foo.elements[1]
|
62
|
+
bar2.class.should == REXML::Element
|
63
|
+
bar2.attributes['buz'].should == 'Buz'
|
64
|
+
bar.text.should == 'Bar'
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
data/spec/feed_spec.rb
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Feed, "feed object" do
|
4
|
+
|
5
|
+
it "should handle feed from file with filepath" do
|
6
|
+
path = File.join(File.dirname(__FILE__), 'samples', 'feed.atom')
|
7
|
+
feed = Atom::Feed.new :file => path
|
8
|
+
feed.title.should == 'dive into mark'
|
9
|
+
feed.id.should == 'tag:example.org,2003:3'
|
10
|
+
feed.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
11
|
+
feed.alternate_link.should == 'http://example.org/'
|
12
|
+
feed.self_link.should == 'http://example.org/feed.atom'
|
13
|
+
feed.rights.should == 'Copyright (c) 2003, Mark Pilgrim'
|
14
|
+
feed.generator.name.gsub(/^[\s\n]*(.+)[\s\n]*$/, '\1').should == 'Example Toolkit'
|
15
|
+
entry = feed.entries[0]
|
16
|
+
entry.title.should == 'Atom draft-07 snapshot'
|
17
|
+
entry.id.should == 'tag:example.org,2003:3.2397'
|
18
|
+
entry.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
19
|
+
entry.published.iso8601.should == Time.iso8601('2003-12-13T08:29:29-04:00').iso8601
|
20
|
+
entry.alternate_link.should == 'http://example.org/2005/04/02/atom'
|
21
|
+
entry.enclosure_link.should == 'http://example.org/audio/ph34r_my_podcast.mp3'
|
22
|
+
author = entry.author
|
23
|
+
author.name.should == 'Mark Pilgrim'
|
24
|
+
author.uri.should == 'http://example.org/'
|
25
|
+
author.email.should == 'f8dy@example.com'
|
26
|
+
homepage = author.get(Atom::Namespace::FOAF, 'homepage')
|
27
|
+
homepage.class.should == REXML::Element
|
28
|
+
homepage.attributes['rdf:resource'].should == 'http://www.example.org/blog'
|
29
|
+
img = author.get(Atom::Namespace::FOAF, 'img')
|
30
|
+
img.class.should == REXML::Element
|
31
|
+
img.attributes['rdf:resource'].should == 'http://www.example.org/mypic.png'
|
32
|
+
|
33
|
+
contributors = entry.contributors
|
34
|
+
contributors.size.should == 2
|
35
|
+
contributors[0].name.should == 'Sam Ruby'
|
36
|
+
contributors[1].name.should == 'Joe Gregorio'
|
37
|
+
|
38
|
+
content = entry.content
|
39
|
+
content.type.should == 'xhtml'
|
40
|
+
body = content.body
|
41
|
+
body.gsub(/^[\n\s]*(.+)[\n\s]*$/, '\1').should == '<p><i>[Update: The Atom draft is finished.]</i></p>'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should handle feed from file with Pathname object" do
|
45
|
+
path = Pathname.new(File.join(File.dirname(__FILE__), 'samples', 'feed.atom'))
|
46
|
+
feed = Atom::Feed.new :file => path
|
47
|
+
feed.title.should == 'dive into mark'
|
48
|
+
feed.id.should == 'tag:example.org,2003:3'
|
49
|
+
feed.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
50
|
+
feed.alternate_link.should == 'http://example.org/'
|
51
|
+
feed.self_link.should == 'http://example.org/feed.atom'
|
52
|
+
feed.rights.should == 'Copyright (c) 2003, Mark Pilgrim'
|
53
|
+
feed.generator.name.gsub(/^[\s\n]*(.+)[\s\n]*$/, '\1').should == 'Example Toolkit'
|
54
|
+
entry = feed.entries[0]
|
55
|
+
entry.title.should == 'Atom draft-07 snapshot'
|
56
|
+
entry.id.should == 'tag:example.org,2003:3.2397'
|
57
|
+
entry.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
58
|
+
entry.published.iso8601.should == Time.iso8601('2003-12-13T08:29:29-04:00').iso8601
|
59
|
+
entry.alternate_link.should == 'http://example.org/2005/04/02/atom'
|
60
|
+
entry.enclosure_link.should == 'http://example.org/audio/ph34r_my_podcast.mp3'
|
61
|
+
author = entry.author
|
62
|
+
author.name.should == 'Mark Pilgrim'
|
63
|
+
author.uri.should == 'http://example.org/'
|
64
|
+
author.email.should == 'f8dy@example.com'
|
65
|
+
homepage = author.get(Atom::Namespace::FOAF, 'homepage')
|
66
|
+
homepage.class.should == REXML::Element
|
67
|
+
homepage.attributes['rdf:resource'].should == 'http://www.example.org/blog'
|
68
|
+
img = author.get(Atom::Namespace::FOAF, 'img')
|
69
|
+
img.class.should == REXML::Element
|
70
|
+
img.attributes['rdf:resource'].should == 'http://www.example.org/mypic.png'
|
71
|
+
|
72
|
+
contributors = entry.contributors
|
73
|
+
contributors.size.should == 2
|
74
|
+
contributors[0].name.should == 'Sam Ruby'
|
75
|
+
contributors[1].name.should == 'Joe Gregorio'
|
76
|
+
|
77
|
+
content = entry.content
|
78
|
+
content.type.should == 'xhtml'
|
79
|
+
body = content.body
|
80
|
+
body.gsub(/^[\n\s]*(.+)[\n\s]*$/, '\1').should == '<p><i>[Update: The Atom draft is finished.]</i></p>'
|
81
|
+
end
|
82
|
+
#it "should handle feed from uri" do
|
83
|
+
# feed = Atom::Feed.new :uri => ''
|
84
|
+
#end
|
85
|
+
|
86
|
+
it "should handle feed from stream" do
|
87
|
+
xmlstring = <<-EOS
|
88
|
+
<?xml version="1.0" encoding="utf-8"?>
|
89
|
+
|
90
|
+
<feed xmlns="http://www.w3.org/2005/Atom"
|
91
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
92
|
+
xmlns:foaf="http://xmlns.com/foaf/0.1">
|
93
|
+
|
94
|
+
<title type="text">dive into mark</title>
|
95
|
+
<id>tag:example.org,2003:3</id>
|
96
|
+
|
97
|
+
<updated>2005-07-31T12:29:29Z</updated>
|
98
|
+
|
99
|
+
<link rel="alternate" type="text/html"
|
100
|
+
hreflang="en" href="http://example.org/"/>
|
101
|
+
<link rel="self" type="application/atom+xml"
|
102
|
+
href="http://example.org/feed.atom"/>
|
103
|
+
|
104
|
+
<rights>Copyright (c) 2003, Mark Pilgrim</rights>
|
105
|
+
<generator uri="http://www.example.com/" version="1.0">
|
106
|
+
Example Toolkit
|
107
|
+
</generator>
|
108
|
+
|
109
|
+
<entry>
|
110
|
+
<title>Atom draft-07 snapshot</title>
|
111
|
+
<id>tag:example.org,2003:3.2397</id>
|
112
|
+
|
113
|
+
<updated>2005-07-31T12:29:29Z</updated>
|
114
|
+
<published>2003-12-13T08:29:29-04:00</published>
|
115
|
+
|
116
|
+
<link rel="alternate" type="text/html"
|
117
|
+
href="http://example.org/2005/04/02/atom"/>
|
118
|
+
|
119
|
+
<link rel="enclosure" type="audio/mpeg" length="1337"
|
120
|
+
href="http://example.org/audio/ph34r_my_podcast.mp3"/>
|
121
|
+
|
122
|
+
<author>
|
123
|
+
<name>Mark Pilgrim</name>
|
124
|
+
<uri>http://example.org/</uri>
|
125
|
+
<email>f8dy@example.com</email>
|
126
|
+
|
127
|
+
<foaf:homepage rdf:resource="http://www.example.org/blog" />
|
128
|
+
<foaf:img rdf:resource="http://www.example.org/mypic.png" />
|
129
|
+
</author>
|
130
|
+
|
131
|
+
<contributor>
|
132
|
+
<name>Sam Ruby</name>
|
133
|
+
</contributor>
|
134
|
+
<contributor>
|
135
|
+
<name>Joe Gregorio</name>
|
136
|
+
</contributor>
|
137
|
+
|
138
|
+
<content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
|
139
|
+
<div xmlns="http://www.w3.org/1999/xhtml">
|
140
|
+
<p><i>[Update: The Atom draft is finished.]</i></p>
|
141
|
+
</div>
|
142
|
+
</content>
|
143
|
+
|
144
|
+
</entry>
|
145
|
+
|
146
|
+
</feed>
|
147
|
+
|
148
|
+
EOS
|
149
|
+
feed = Atom::Feed.new :stream => xmlstring
|
150
|
+
feed.title.should == 'dive into mark'
|
151
|
+
feed.id.should == 'tag:example.org,2003:3'
|
152
|
+
feed.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
153
|
+
feed.alternate_link.should == 'http://example.org/'
|
154
|
+
feed.self_link.should == 'http://example.org/feed.atom'
|
155
|
+
feed.rights.should == 'Copyright (c) 2003, Mark Pilgrim'
|
156
|
+
feed.generator.name.gsub(/^[\s\n]*(.+)[\s\n]*$/, '\1').should == 'Example Toolkit'
|
157
|
+
entry = feed.entries[0]
|
158
|
+
entry.title.should == 'Atom draft-07 snapshot'
|
159
|
+
entry.id.should == 'tag:example.org,2003:3.2397'
|
160
|
+
entry.updated.iso8601.should == '2005-07-31T12:29:29Z'
|
161
|
+
entry.published.iso8601.should == Time.iso8601('2003-12-13T08:29:29-04:00').iso8601
|
162
|
+
entry.alternate_link.should == 'http://example.org/2005/04/02/atom'
|
163
|
+
entry.enclosure_link.should == 'http://example.org/audio/ph34r_my_podcast.mp3'
|
164
|
+
author = entry.author
|
165
|
+
author.name.should == 'Mark Pilgrim'
|
166
|
+
author.uri.should == 'http://example.org/'
|
167
|
+
author.email.should == 'f8dy@example.com'
|
168
|
+
homepage = author.get(Atom::Namespace::FOAF, 'homepage')
|
169
|
+
homepage.class.should == REXML::Element
|
170
|
+
homepage.attributes['rdf:resource'].should == 'http://www.example.org/blog'
|
171
|
+
img = author.get(Atom::Namespace::FOAF, 'img')
|
172
|
+
img.class.should == REXML::Element
|
173
|
+
img.attributes['rdf:resource'].should == 'http://www.example.org/mypic.png'
|
174
|
+
|
175
|
+
contributors = entry.contributors
|
176
|
+
contributors.size.should == 2
|
177
|
+
contributors[0].name.should == 'Sam Ruby'
|
178
|
+
contributors[1].name.should == 'Joe Gregorio'
|
179
|
+
|
180
|
+
content = entry.content
|
181
|
+
content.type.should == 'xhtml'
|
182
|
+
body = content.body
|
183
|
+
body.gsub(/^[\n\s]*(.+)[\n\s]*$/, '\1').should == '<p><i>[Update: The Atom draft is finished.]</i></p>'
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should build feed collectly" do
|
187
|
+
|
188
|
+
feed = Atom::Feed.new
|
189
|
+
feed.id = 'tag:example.org,2007:myexample'
|
190
|
+
feed.id.should == 'tag:example.org,2007:myexample'
|
191
|
+
feed.version = '1.00'
|
192
|
+
feed.version.should == '1.00'
|
193
|
+
feed.language = 'en'
|
194
|
+
feed.language.should == 'en'
|
195
|
+
feed.generator = 'MyFeedGenerator'
|
196
|
+
feed.generator.name.should == 'MyFeedGenerator'
|
197
|
+
feed.generator = Atom::Generator.new(
|
198
|
+
:name => 'MySecondGenerator',
|
199
|
+
:uri => 'http://example.org/generator',
|
200
|
+
:version => '1.00'
|
201
|
+
)
|
202
|
+
feed.generator.name.should == 'MySecondGenerator'
|
203
|
+
feed.generator.uri.should == 'http://example.org/generator'
|
204
|
+
feed.generator.version.should == '1.00'
|
205
|
+
feed.rights = 'Copyright(c) 2007, Example.'
|
206
|
+
feed.rights.should == 'Copyright(c) 2007, Example.'
|
207
|
+
|
208
|
+
author = Atom::Author.new
|
209
|
+
author.name = 'Atom User'
|
210
|
+
author.email = 'atom@example.org'
|
211
|
+
author.uri = 'http://example.org/atom'
|
212
|
+
feed.author = author
|
213
|
+
|
214
|
+
feed.language = 'fr'
|
215
|
+
feed.language.should == 'fr'
|
216
|
+
|
217
|
+
xmlstring = feed.to_s
|
218
|
+
xmlstring.should =~ %r{<feed}
|
219
|
+
xmlstring.should =~ %r{<author}
|
220
|
+
xmlstring.should =~ %r{<id}
|
221
|
+
xmlstring.should =~ %r{version='1.00'}
|
222
|
+
xmlstring.should =~ %r{xml:lang='fr'}
|
223
|
+
xmlstring.should =~ %r{<generator}
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
data/spec/link_spec.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Link, "link object" do
|
4
|
+
|
5
|
+
it "should handle each accessors collectly" do
|
6
|
+
link = Atom::Link.new
|
7
|
+
link.title = 'This is a test'
|
8
|
+
link.title.should == 'This is a test'
|
9
|
+
link.title = 'Different title'
|
10
|
+
link.title.should == 'Different title'
|
11
|
+
link.rel = 'alternate'
|
12
|
+
link.rel.should == 'alternate'
|
13
|
+
link.href = 'http://example.org/'
|
14
|
+
link.href.should == 'http://example.org/'
|
15
|
+
link.type = 'text/html'
|
16
|
+
link.type.should == 'text/html'
|
17
|
+
link.length = 100
|
18
|
+
link.length.should == "100"
|
19
|
+
link.hreflang = 'ja'
|
20
|
+
link.hreflang.should == 'ja'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should handle hash-style parameter" do
|
24
|
+
link = Atom::Link.new(
|
25
|
+
:title => 'This is a test',
|
26
|
+
:rel => 'alternate',
|
27
|
+
:href => 'http://example.org/',
|
28
|
+
:type => 'text/html',
|
29
|
+
:length => 100,
|
30
|
+
:hreflang => 'ja'
|
31
|
+
)
|
32
|
+
link.title.should == 'This is a test'
|
33
|
+
link.rel.should == 'alternate'
|
34
|
+
link.href.should == 'http://example.org/'
|
35
|
+
link.type.should == 'text/html'
|
36
|
+
link.length.should == "100"
|
37
|
+
link.hreflang.should == 'ja'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should handle xml collectly" do
|
41
|
+
xmlstring = Atom::Link.new(
|
42
|
+
:title => 'This is a test',
|
43
|
+
:rel => 'alternate',
|
44
|
+
:href => 'http://example.org/',
|
45
|
+
:type => 'text/html',
|
46
|
+
:length => 100,
|
47
|
+
:hreflang => 'ja'
|
48
|
+
).to_s
|
49
|
+
xmlstring.should =~ %r{<link}
|
50
|
+
xmlstring.should =~ %r{rel='alternate'}
|
51
|
+
xmlstring.should =~ %r{href='http://example\.org/'}
|
52
|
+
xmlstring.should =~ %r{type='text/html'}
|
53
|
+
xmlstring.should =~ %r{length='100'}
|
54
|
+
xmlstring.should =~ %r{hreflang='ja'}
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Namespace, "namespace object" do
|
4
|
+
|
5
|
+
it "should handle accessor collectly" do
|
6
|
+
my_ns = Atom::Namespace.new :uri => 'http://example.org/ns', :prefix => 'ex'
|
7
|
+
my_ns.prefix.should == 'ex'
|
8
|
+
my_ns.uri.should == 'http://example.org/ns'
|
9
|
+
my_ns.to_s.should == 'http://example.org/ns'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should handle major namespaces as constans" do
|
13
|
+
Atom::Namespace::ATOM.prefix.should be_nil
|
14
|
+
Atom::Namespace::ATOM.uri.should == 'http://www.w3.org/2005/Atom'
|
15
|
+
Atom::Namespace::ATOM_WITH_PREFIX.prefix.should == 'atom'
|
16
|
+
Atom::Namespace::ATOM_WITH_PREFIX.uri.should == 'http://www.w3.org/2005/Atom'
|
17
|
+
Atom::Namespace::OBSOLETE_ATOM.prefix.should be_nil
|
18
|
+
Atom::Namespace::OBSOLETE_ATOM.uri.should == 'http://purl.org/atom/ns#'
|
19
|
+
Atom::Namespace::OBSOLETE_ATOM_WITH_PREFIX.prefix.should == 'atom'
|
20
|
+
Atom::Namespace::OBSOLETE_ATOM_WITH_PREFIX.uri.should == 'http://purl.org/atom/ns#'
|
21
|
+
Atom::Namespace::APP.prefix.should be_nil
|
22
|
+
Atom::Namespace::APP.uri.should == 'http://www.w3.org/2007/app'
|
23
|
+
Atom::Namespace::APP_WITH_PREFIX.prefix.should == 'app'
|
24
|
+
Atom::Namespace::APP_WITH_PREFIX.uri.should == 'http://www.w3.org/2007/app'
|
25
|
+
Atom::Namespace::OBSOLETE_APP.prefix.should be_nil
|
26
|
+
Atom::Namespace::OBSOLETE_APP.uri.should == 'http://purl.org/atom/app#'
|
27
|
+
Atom::Namespace::OBSOLETE_APP_WITH_PREFIX.prefix.should == 'app'
|
28
|
+
Atom::Namespace::OBSOLETE_APP_WITH_PREFIX.uri.should == 'http://purl.org/atom/app#'
|
29
|
+
Atom::Namespace::OPEN_SEARCH.prefix.should == 'openSearch'
|
30
|
+
Atom::Namespace::OPEN_SEARCH.uri.should == 'http://a9.com/-/spec/opensearchrss/1.1/'
|
31
|
+
Atom::Namespace::FOAF.prefix.should == 'foaf'
|
32
|
+
Atom::Namespace::FOAF.uri.should == 'http://xmlns.com/foaf/0.1'
|
33
|
+
Atom::Namespace::DC.prefix.should == 'dc'
|
34
|
+
Atom::Namespace::DC.uri.should == 'http://purl.org/dc/elements/1.1/'
|
35
|
+
Atom::Namespace::RDF.prefix.should == 'rdf'
|
36
|
+
Atom::Namespace::RDF.uri.should == 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Feed, "extended with openSearch namespace" do
|
4
|
+
|
5
|
+
it "should handle openSearch namespace collectly" do
|
6
|
+
feed = Atom::Feed.new
|
7
|
+
feed.total_results = 30
|
8
|
+
feed.items_per_page = 10
|
9
|
+
feed.start_index = 1
|
10
|
+
|
11
|
+
feed.total_results.should == 30
|
12
|
+
feed.items_per_page.should == 10
|
13
|
+
feed.start_index.should == 1
|
14
|
+
|
15
|
+
xmlstring = feed.to_s
|
16
|
+
xmlstring.should =~ %r{<openSearch:totalResults}
|
17
|
+
xmlstring.should =~ %r{<openSearch:itemsPerPage}
|
18
|
+
xmlstring.should =~ %r{<openSearch:startIndex}
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
data/spec/person_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
describe Atom::Person, "builds" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@person = Atom::Person.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should set and get name" do
|
10
|
+
@person.name = "Lyo Kato"
|
11
|
+
@person.name.should == "Lyo Kato"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should set and get email" do
|
15
|
+
@person.email = "lyo.kato@gmail.com"
|
16
|
+
@person.email.should == "lyo.kato@gmail.com"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set and get uri" do
|
20
|
+
@person.uri = "http://www.lyokato.net/"
|
21
|
+
@person.uri.should == "http://www.lyokato.net/"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should build xml" do
|
25
|
+
@person.name = "Lyo Kato"
|
26
|
+
@person.email = "lyo.kato@gmail.com"
|
27
|
+
@person.uri = "http://www.lyokato.net/"
|
28
|
+
person_xml = @person.to_s
|
29
|
+
person_xml.should =~ /<author(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>/
|
30
|
+
person_xml.should =~ /<name(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>Lyo Kato<\/name>/
|
31
|
+
person_xml.should =~ /<email(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>lyo\.kato\@gmail\.com<\/email>/
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be converted to Author" do
|
35
|
+
@person.name = "Lyo Kato"
|
36
|
+
@person.email = "lyo.kato@gmail.com"
|
37
|
+
@person.uri = "http://www.lyokato.net/"
|
38
|
+
author = @person.to_author
|
39
|
+
author.should be_instance_of(Atom::Author)
|
40
|
+
author.name.should == "Lyo Kato"
|
41
|
+
author_xml = author.to_s
|
42
|
+
author_xml.should =~ /<author(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>/
|
43
|
+
author_xml.should =~ /<name(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>Lyo Kato<\/name>/
|
44
|
+
author_xml.should =~ /<email(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>lyo\.kato\@gmail\.com<\/email>/
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be converted to Contributor" do
|
48
|
+
@person.name = "Lyo Kato"
|
49
|
+
@person.email = "lyo.kato@gmail.com"
|
50
|
+
@person.uri = "http://www.lyokato.net/"
|
51
|
+
contributor = @person.to_contributor
|
52
|
+
contributor.should be_instance_of(Atom::Contributor)
|
53
|
+
contributor.name.should == "Lyo Kato"
|
54
|
+
contributor_xml = contributor.to_s
|
55
|
+
contributor_xml.should =~ /<contributor(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')>/
|
56
|
+
contributor_xml.should =~ /<name(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>Lyo Kato<\/name>/
|
57
|
+
contributor_xml.should =~ /<email(?: xmlns='http:\/\/www\.w3\.org\/2005\/Atom')?>lyo\.kato\@gmail\.com<\/email>/
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
|
3
|
+
<feed xmlns="http://www.w3.org/2005/Atom"
|
4
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
5
|
+
xmlns:foaf="http://xmlns.com/foaf/0.1">
|
6
|
+
|
7
|
+
<title type="text">dive into mark</title>
|
8
|
+
<id>tag:example.org,2003:3</id>
|
9
|
+
|
10
|
+
<updated>2005-07-31T12:29:29Z</updated>
|
11
|
+
|
12
|
+
<link rel="alternate" type="text/html"
|
13
|
+
hreflang="en" href="http://example.org/"/>
|
14
|
+
<link rel="self" type="application/atom+xml"
|
15
|
+
href="http://example.org/feed.atom"/>
|
16
|
+
|
17
|
+
<rights>Copyright (c) 2003, Mark Pilgrim</rights>
|
18
|
+
<generator uri="http://www.example.com/" version="1.0">
|
19
|
+
Example Toolkit
|
20
|
+
</generator>
|
21
|
+
|
22
|
+
<entry>
|
23
|
+
<title>Atom draft-07 snapshot</title>
|
24
|
+
<id>tag:example.org,2003:3.2397</id>
|
25
|
+
|
26
|
+
<updated>2005-07-31T12:29:29Z</updated>
|
27
|
+
<published>2003-12-13T08:29:29-04:00</published>
|
28
|
+
|
29
|
+
<link rel="alternate" type="text/html"
|
30
|
+
href="http://example.org/2005/04/02/atom"/>
|
31
|
+
|
32
|
+
<link rel="enclosure" type="audio/mpeg" length="1337"
|
33
|
+
href="http://example.org/audio/ph34r_my_podcast.mp3"/>
|
34
|
+
|
35
|
+
<author>
|
36
|
+
<name>Mark Pilgrim</name>
|
37
|
+
<uri>http://example.org/</uri>
|
38
|
+
<email>f8dy@example.com</email>
|
39
|
+
|
40
|
+
<foaf:homepage rdf:resource="http://www.example.org/blog" />
|
41
|
+
<foaf:img rdf:resource="http://www.example.org/mypic.png" />
|
42
|
+
</author>
|
43
|
+
|
44
|
+
<contributor>
|
45
|
+
<name>Sam Ruby</name>
|
46
|
+
</contributor>
|
47
|
+
<contributor>
|
48
|
+
<name>Joe Gregorio</name>
|
49
|
+
</contributor>
|
50
|
+
|
51
|
+
<content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
|
52
|
+
<div xmlns="http://www.w3.org/1999/xhtml">
|
53
|
+
<p><i>[Update: The Atom draft is finished.]</i></p>
|
54
|
+
</div>
|
55
|
+
</content>
|
56
|
+
|
57
|
+
</entry>
|
58
|
+
|
59
|
+
</feed>
|
60
|
+
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|