xommelier 0.1.16 → 0.1.18
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/README.md +3 -1
- data/lib/xommelier.rb +11 -0
- data/lib/xommelier/atom.rb +0 -1
- data/lib/xommelier/atom/entry.rb +0 -2
- data/lib/xommelier/atom/feed.rb +0 -2
- data/lib/xommelier/common.rb +24 -0
- data/lib/xommelier/opml.rb +122 -0
- data/lib/xommelier/rss.rb +237 -0
- data/lib/xommelier/schemas/rss.xsd +500 -0
- data/lib/xommelier/version.rb +1 -1
- data/lib/xommelier/xml.rb +1 -1
- data/lib/xommelier/xml/element.rb +5 -16
- data/lib/xommelier/xml/element/serialization.rb +69 -62
- data/lib/xommelier/xml/element/structure.rb +69 -68
- data/lib/xommelier/xml/element/structure/property.rb +136 -0
- data/lib/xommelier/xml/namespace.rb +5 -1
- data/spec/fixtures/feed.rss2.0.xml +41 -0
- data/spec/fixtures/rss-2.0-namespace.xml +78 -0
- data/spec/fixtures/simple_feed.rss.xml +17 -0
- data/spec/functional/atom_feed_building_spec.rb +5 -13
- data/spec/functional/atom_feed_thread_building_spec.rb +1 -1
- data/spec/functional/build_nested_document_from_hash_spec.rb +1 -1
- data/spec/functional/rss_feed_building_spec.rb +25 -0
- data/spec/functional/rss_feed_parsing_spec.rb +41 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/fixtures.rb +1 -1
- metadata +17 -4
- data/spec/fixtures/atom.xsd.xml +0 -240
@@ -0,0 +1,136 @@
|
|
1
|
+
module Xommelier
|
2
|
+
module Xml
|
3
|
+
class Element
|
4
|
+
module Structure
|
5
|
+
class Property
|
6
|
+
def initialize(name, options)
|
7
|
+
@name = name
|
8
|
+
@options = self.class.const_get(:DEFAULTS).merge(options)
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :name, :options
|
12
|
+
|
13
|
+
def writer
|
14
|
+
@writer ||= "#{name}="
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Xommelier::Xml::Namespace]
|
18
|
+
def ns
|
19
|
+
options[:ns]
|
20
|
+
end
|
21
|
+
|
22
|
+
def default
|
23
|
+
options[:default]
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Class]
|
27
|
+
def type
|
28
|
+
options[:type]
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [true, false] has default value?
|
32
|
+
def default?
|
33
|
+
options.key?(:default) && required?
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect
|
37
|
+
"#<Xommelier::X::E::S::#{self.class.name.demodulize}:0x#{object_id.to_s(16)} #{instance_variables.map { |ivar| "#{ivar}=#{instance_variable_get(ivar).inspect}"}.join(' ')}>"
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def overrides
|
43
|
+
@overrides ||= {}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class Element < Property
|
48
|
+
DEFAULTS = {
|
49
|
+
type: String,
|
50
|
+
count: :one
|
51
|
+
}
|
52
|
+
|
53
|
+
def node_type
|
54
|
+
:element
|
55
|
+
end
|
56
|
+
|
57
|
+
def element_name
|
58
|
+
@element_name ||= options.delete(:as) { name }.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def serializable_element_name
|
62
|
+
@serializable_element_name ||= if %w(class id text).include?(element_name)
|
63
|
+
element_name + '_'
|
64
|
+
else
|
65
|
+
element_name
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def required?
|
70
|
+
options[:count] == :one || options[:count] == :many
|
71
|
+
end
|
72
|
+
|
73
|
+
def multiple?
|
74
|
+
return overrides[:multiple] if overrides.key?(:multiple)
|
75
|
+
options[:count] == :many || options[:count] == :any
|
76
|
+
end
|
77
|
+
|
78
|
+
def plural
|
79
|
+
@plural ||= name.to_s.pluralize.to_sym
|
80
|
+
end
|
81
|
+
|
82
|
+
def plural_writer
|
83
|
+
@plural_writer ||= "#{plural}="
|
84
|
+
end
|
85
|
+
|
86
|
+
def numbers_equal?
|
87
|
+
plural == name
|
88
|
+
end
|
89
|
+
|
90
|
+
def overridden_xmlns
|
91
|
+
overrides[:xmlns]
|
92
|
+
end
|
93
|
+
|
94
|
+
def override(overrides)
|
95
|
+
@overrides = overrides
|
96
|
+
yield
|
97
|
+
@overrides = {}
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Attribute < Property
|
102
|
+
DEFAULTS = {
|
103
|
+
type: String,
|
104
|
+
required: false
|
105
|
+
}
|
106
|
+
|
107
|
+
def node_type
|
108
|
+
:attribute
|
109
|
+
end
|
110
|
+
|
111
|
+
def required?
|
112
|
+
options[:required]
|
113
|
+
end
|
114
|
+
|
115
|
+
def attribute_name
|
116
|
+
@attribute_name ||= options.delete(:as) { name }.to_s
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Text < Property
|
121
|
+
DEFAULTS = {
|
122
|
+
type: String
|
123
|
+
}
|
124
|
+
|
125
|
+
def node_type
|
126
|
+
:text
|
127
|
+
end
|
128
|
+
|
129
|
+
def required?
|
130
|
+
options[:required]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<rss version="2.0">
|
3
|
+
<channel>
|
4
|
+
<title>Liftoff News</title>
|
5
|
+
<link>http://liftoff.msfc.nasa.gov/</link>
|
6
|
+
<description>Liftoff to Space Exploration.</description>
|
7
|
+
<language>en-us</language>
|
8
|
+
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
|
9
|
+
<lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
|
10
|
+
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
|
11
|
+
<generator>Weblog Editor 2.0</generator>
|
12
|
+
<managingEditor>editor@example.com</managingEditor>
|
13
|
+
<webMaster>webmaster@example.com</webMaster>
|
14
|
+
<item>
|
15
|
+
<title>Star City</title>
|
16
|
+
<link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
|
17
|
+
<description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's <a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm">Star City</a>.</description>
|
18
|
+
<pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
|
19
|
+
<guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
|
20
|
+
</item>
|
21
|
+
<item>
|
22
|
+
<description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a <a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm">partial eclipse of the Sun</a> on Saturday, May 31st.</description>
|
23
|
+
<pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
|
24
|
+
<guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
|
25
|
+
</item>
|
26
|
+
<item>
|
27
|
+
<title>The Engine That Does More</title>
|
28
|
+
<link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
|
29
|
+
<description>Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.</description>
|
30
|
+
<pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
|
31
|
+
<guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
|
32
|
+
</item>
|
33
|
+
<item>
|
34
|
+
<title>Astronauts' Dirty Laundry</title>
|
35
|
+
<link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
|
36
|
+
<description>Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.</description>
|
37
|
+
<pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
|
38
|
+
<guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
|
39
|
+
</item>
|
40
|
+
</channel>
|
41
|
+
</rss>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<rss version="2.0"
|
2
|
+
xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
|
3
|
+
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
|
4
|
+
<channel>
|
5
|
+
<creativeCommons:license>http://www.creativecommons.org/licenses/by-nd/1.0</creativeCommons:license>
|
6
|
+
<description>Current headlines from the Dallas Times-Herald newspaper</description>
|
7
|
+
<link>http://dallas.example.com</link>
|
8
|
+
<title>Dallas Times-Herald</title>
|
9
|
+
<category>Media</category>
|
10
|
+
<category domain="Newspapers/Regional/United_States">Texas</category>
|
11
|
+
<cloud domain="server.example.com" path="/rpc" port="80" protocol="xml-rpc" registerProcedure="cloud.notify" />
|
12
|
+
<copyright>Copyright 2006 Dallas Times-Herald</copyright>
|
13
|
+
<docs>http://www.rssboard.org/rss-specification</docs>
|
14
|
+
<generator>Radio UserLand v8.2.1</generator>
|
15
|
+
<image>
|
16
|
+
<link>http://dallas.example.com</link>
|
17
|
+
<title>Dallas Times-Herald</title>
|
18
|
+
<url>http://dallas.example.com/masthead.gif</url>
|
19
|
+
<description>Read the Dallas Times-Herald</description>
|
20
|
+
<height>32</height>
|
21
|
+
<width>96</width>
|
22
|
+
</image>
|
23
|
+
<language>epo</language>
|
24
|
+
<lastBuildDate>Sun, 29 Jan 2006 17:17:44 GMT</lastBuildDate>
|
25
|
+
<managingEditor>jlehrer@dallas.example.com (Jim Lehrer)</managingEditor>
|
26
|
+
<pubDate>Sun, 29 Jan 2006 05:00:00 GMT</pubDate>
|
27
|
+
<rating>(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l by "webmaster@example.com" on "2006.01.29T10:09-0800" r (n 0 s 0 v 0 l 0))</rating>
|
28
|
+
<skipDays>
|
29
|
+
<day>Saturday</day>
|
30
|
+
<day>Sunday</day>
|
31
|
+
</skipDays>
|
32
|
+
<skipHours>
|
33
|
+
<hour>0</hour>
|
34
|
+
<hour>1</hour>
|
35
|
+
<hour>2</hour>
|
36
|
+
<hour>22</hour>
|
37
|
+
<hour>23</hour>
|
38
|
+
</skipHours>
|
39
|
+
<textInput>
|
40
|
+
<description>Your aggregator supports the textInput element. What software are you using?</description>
|
41
|
+
<link>http://www.cadenhead.org/textinput.php</link>
|
42
|
+
<name>query</name>
|
43
|
+
<title>TextInput Inquiry</title>
|
44
|
+
</textInput>
|
45
|
+
<ttl>60</ttl>
|
46
|
+
<webMaster>helpdesk@dallas.example.com</webMaster>
|
47
|
+
<item>
|
48
|
+
<trackback:ping>http://dallas.example.com/trackback/tb.php?id=1991/05/02/nolan.htm</trackback:ping>
|
49
|
+
<title>Seventh Heaven! Ryan Hurls Another No Hitter</title>
|
50
|
+
<link>http://dallas.example.com/1991/05/02/nolan.htm</link>
|
51
|
+
<description>Texas Rangers pitcher Nolan Ryan hurled the seventh no-hitter of his legendary career on Arlington Appreciation Night, defeating the Toronto Blue Jays 3-0. The 44-year-old struck out 16 batters before a crowd of 33,439.</description>
|
52
|
+
<guid>http://dallas.example.com/1991/05/02/nolan.htm</guid>
|
53
|
+
</item>
|
54
|
+
<item>
|
55
|
+
<trackback:ping>http://dallas.example.com/trackback/tb.php?id=1983/06/joebob.htm</trackback:ping>
|
56
|
+
<author>jbb@dallas.example.com (Joe Bob Briggs)</author>
|
57
|
+
<category>rec.arts.movies.reviews</category>
|
58
|
+
<comments>http://dallas.example.com/feedback/1983/06/joebob.htm</comments>
|
59
|
+
<description>I'm headed for France. I wasn't gonna go this year, but then last week "Valley Girl" came out and I said to myself, Joe Bob, you gotta get out of the country for a while.</description>
|
60
|
+
<enclosure length="24986239" type="audio/mpeg" url="http://dallas.example.com/joebob_050689.mp3" />
|
61
|
+
<guid>http://dallas.example.com/1983/05/06/joebob.htm</guid>
|
62
|
+
<link>http://dallas.example.com/1983/05/06/joebob.htm</link>
|
63
|
+
<pubDate>Fri, 06 May 1983 09:00:00 CST</pubDate>
|
64
|
+
<source url="http://la.example.com/rss.xml">Los Angeles Herald-Examiner</source>
|
65
|
+
<title>Joe Bob Goes to the Drive-In</title>
|
66
|
+
</item>
|
67
|
+
<item>
|
68
|
+
<trackback:ping>http://dallas.example.com/trackback/tb.php?id=1983/06/joebob2.htm</trackback:ping>
|
69
|
+
<trackback:about>http://www.imdb.com/title/tt0086525/</trackback:about>
|
70
|
+
<description>I'm headed for France. I wasn't gonna go this year, but then last week <a href="http://www.imdb.com/title/tt0086525/">Valley Girl</a> came out and I said to myself, Joe Bob, you gotta get out of the country for a while.</description>
|
71
|
+
<guid isPermaLink="false">tag:dallas.example.com,4131:news</guid>
|
72
|
+
</item>
|
73
|
+
<item>
|
74
|
+
<description><![CDATA[I'm headed for France. I wasn't gonna go this year, but then last week <a href="http://www.imdb.com/title/tt0086525/">Valley Girl</a> came out and I said to myself, Joe Bob, you gotta get out of the country for a while.]]></description>
|
75
|
+
<guid isPermaLink="false">1983-05-06+lifestyle+joebob+2</guid>
|
76
|
+
</item>
|
77
|
+
</channel>
|
78
|
+
</rss>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<rss version="2.0">
|
3
|
+
<channel>
|
4
|
+
<title>Example Feed</title>
|
5
|
+
<link>http://example.com</link>
|
6
|
+
<managingEditor>john.doe@example.com</managingEditor>
|
7
|
+
<pubDate>Tue, 10 Jun 2003 04:00:00 -0000</pubDate>
|
8
|
+
<lastBuildDate>Sat, 13 Dec 2003 18:30:02 -0000</lastBuildDate>
|
9
|
+
<item>
|
10
|
+
<guid>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid>
|
11
|
+
<title>RSS-Powered Robots Run Amok</title>
|
12
|
+
<description>Some text.</description>
|
13
|
+
<link>http://example.org/2003/12/13/atom03</link>
|
14
|
+
<pubDate>Sat, 13 Dec 2003 18:30:02 -0000</pubDate>
|
15
|
+
</item>
|
16
|
+
</channel>
|
17
|
+
</rss>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Atom feed building' do
|
4
|
-
|
4
|
+
subject(:feed) do
|
5
5
|
Xommelier::Atom::Feed.new.tap do |feed|
|
6
6
|
feed.id = 'urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6'
|
7
7
|
feed.title = 'Example Feed'
|
@@ -19,21 +19,13 @@ describe 'Atom feed building' do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
let(:
|
23
|
-
let(:parsed_xml) { Nokogiri::XML(built_xml) }
|
22
|
+
let(:parsed_xml) { Nokogiri::XML(feed.to_xml) }
|
24
23
|
let(:rng) { Nokogiri::XML::RelaxNG(load_xml_file('atom.rng')) }
|
25
|
-
let(:xsd) {
|
24
|
+
let(:xsd) { Xommelier::Atom.schema }
|
26
25
|
|
27
|
-
|
26
|
+
it { should be_valid }
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
it { should == load_xml_file('simple_feed.atom').read }
|
32
|
-
it do
|
33
|
-
rng.validate(parsed_xml).each do |error|
|
34
|
-
pp error
|
35
|
-
end
|
36
|
-
end
|
28
|
+
its(:to_xml) { should == load_xml_file('simple_feed.atom') }
|
37
29
|
it('should conform to RelaxNG schema') { rng.valid?(parsed_xml).should == true }
|
38
30
|
it('should conform to XML Schema') { xsd.valid?(parsed_xml).should == true }
|
39
31
|
end
|
@@ -35,6 +35,6 @@ describe 'Atom feed building' do
|
|
35
35
|
|
36
36
|
subject { built_xml }
|
37
37
|
|
38
|
-
it { should == load_xml_file('multi_namespace_feed.atom')
|
38
|
+
it { should == load_xml_file('multi_namespace_feed.atom') }
|
39
39
|
it('should conform to RelaxNG schema') { rng.valid?(parsed_xml).should == true }
|
40
40
|
end
|
@@ -26,7 +26,7 @@ describe 'Build document from nested hash' do
|
|
26
26
|
|
27
27
|
subject { doc }
|
28
28
|
|
29
|
-
its(:to_xml) { should == load_xml_file('nested_atom')
|
29
|
+
its(:to_xml) { should == load_xml_file('nested_atom') }
|
30
30
|
it { should have(1).authors }
|
31
31
|
it { should have(3).contributors }
|
32
32
|
it { should have(3).entries }
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'RSS feed building' do
|
4
|
+
subject(:rss) do
|
5
|
+
Xommelier::RSS::Rss.new(
|
6
|
+
channel: {
|
7
|
+
title: 'Example Feed',
|
8
|
+
link: 'http://example.com',
|
9
|
+
pub_date: Time.utc(2003, 6, 10, 04),
|
10
|
+
last_build_date: Time.utc(2003, 12, 13, 18, 30, 02),
|
11
|
+
managing_editor: 'john.doe@example.com',
|
12
|
+
items: [{
|
13
|
+
title: 'RSS-Powered Robots Run Amok',
|
14
|
+
guid: 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a',
|
15
|
+
pub_date: Time.utc(2003, 12, 13, 18, 30, 02),
|
16
|
+
description: 'Some text.',
|
17
|
+
link: 'http://example.org/2003/12/13/atom03'
|
18
|
+
}]
|
19
|
+
}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
it { should be_valid }
|
24
|
+
its(:to_xml) { should == load_xml_file('simple_feed.rss') }
|
25
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'active_support/core_ext/numeric/time'
|
4
|
+
require 'xommelier/rss'
|
5
|
+
|
6
|
+
describe 'RSS feed' do
|
7
|
+
describe 'parsing' do
|
8
|
+
let(:rss_xml) { load_xml_file('feed.rss2.0') }
|
9
|
+
let(:feed) { Xommelier::RSS::Rss.parse(rss_xml) }
|
10
|
+
|
11
|
+
subject { feed }
|
12
|
+
|
13
|
+
it { should be_kind_of(Xommelier::RSS::Rss) }
|
14
|
+
|
15
|
+
its(:title) { should == 'Liftoff News' }
|
16
|
+
its(:last_build_date) { should == Time.utc(2003, 6, 10, 9, 41, 01) }
|
17
|
+
its(:pub_date) { should == Time.utc(2003, 6, 10, 04) }
|
18
|
+
its(:description) { should == 'Liftoff to Space Exploration.' }
|
19
|
+
its(:link) { should == URI.parse('http://liftoff.msfc.nasa.gov/') }
|
20
|
+
its(:docs) { should == 'http://blogs.law.harvard.edu/tech/rss' }
|
21
|
+
its(:description) { should == 'Liftoff to Space Exploration.' }
|
22
|
+
its(:generator) { should == 'Weblog Editor 2.0' }
|
23
|
+
its(:managing_editor) { should == 'editor@example.com' }
|
24
|
+
its(:web_master) { should == 'webmaster@example.com' }
|
25
|
+
|
26
|
+
it { feed.should have(4).items }
|
27
|
+
describe 'Item' do
|
28
|
+
let(:item) { feed.items[0] }
|
29
|
+
subject { item }
|
30
|
+
|
31
|
+
its(:guid) { should be_an Xommelier::RSS::Guid }
|
32
|
+
its('guid.text') { should == 'http://liftoff.msfc.nasa.gov/2003/06/03.html#item573' }
|
33
|
+
its('guid.to_s') { should == 'http://liftoff.msfc.nasa.gov/2003/06/03.html#item573' }
|
34
|
+
its(:guid) { should == 'http://liftoff.msfc.nasa.gov/2003/06/03.html#item573' }
|
35
|
+
its(:title) { should == 'Star City' }
|
36
|
+
its(:pub_date) { should == Time.utc(2003, 6, 3, 9, 39, 21) }
|
37
|
+
its(:description) { should == 'How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia\'s <a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm">Star City</a>.' }
|
38
|
+
its(:link) { should == URI.parse('http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp') }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fixtures.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xommelier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.18
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/xommelier/atom/source.rb
|
94
94
|
- lib/xommelier/atom/threading.rb
|
95
95
|
- lib/xommelier/collection.rb
|
96
|
+
- lib/xommelier/common.rb
|
96
97
|
- lib/xommelier/core_ext.rb
|
97
98
|
- lib/xommelier/core_ext/boolean.rb
|
98
99
|
- lib/xommelier/core_ext/date.rb
|
@@ -103,23 +104,31 @@ files:
|
|
103
104
|
- lib/xommelier/core_ext/time.rb
|
104
105
|
- lib/xommelier/core_ext/uri.rb
|
105
106
|
- lib/xommelier/open_search.rb
|
107
|
+
- lib/xommelier/opml.rb
|
108
|
+
- lib/xommelier/rss.rb
|
106
109
|
- lib/xommelier/schemas/atom.xsd
|
110
|
+
- lib/xommelier/schemas/rss.xsd
|
107
111
|
- lib/xommelier/version.rb
|
108
112
|
- lib/xommelier/xml.rb
|
109
113
|
- lib/xommelier/xml/element.rb
|
110
114
|
- lib/xommelier/xml/element/serialization.rb
|
111
115
|
- lib/xommelier/xml/element/structure.rb
|
116
|
+
- lib/xommelier/xml/element/structure/property.rb
|
112
117
|
- lib/xommelier/xml/namespace.rb
|
113
118
|
- spec/fixtures/atom.rng.xml
|
114
|
-
- spec/fixtures/atom.xsd.xml
|
115
119
|
- spec/fixtures/feed.atom.xml
|
120
|
+
- spec/fixtures/feed.rss2.0.xml
|
116
121
|
- spec/fixtures/multi_namespace_feed.atom.xml
|
117
122
|
- spec/fixtures/nested_atom.xml
|
123
|
+
- spec/fixtures/rss-2.0-namespace.xml
|
118
124
|
- spec/fixtures/simple_feed.atom.xml
|
125
|
+
- spec/fixtures/simple_feed.rss.xml
|
119
126
|
- spec/functional/atom_feed_building_spec.rb
|
120
127
|
- spec/functional/atom_feed_parsing_spec.rb
|
121
128
|
- spec/functional/atom_feed_thread_building_spec.rb
|
122
129
|
- spec/functional/build_nested_document_from_hash_spec.rb
|
130
|
+
- spec/functional/rss_feed_building_spec.rb
|
131
|
+
- spec/functional/rss_feed_parsing_spec.rb
|
123
132
|
- spec/lib/xommelier/atom/entry_spec.rb
|
124
133
|
- spec/lib/xommelier/xml/element/serialization_spec.rb
|
125
134
|
- spec/lib/xommelier/xml/element/structure_spec.rb
|
@@ -156,15 +165,19 @@ specification_version: 3
|
|
156
165
|
summary: Xommelier is an XML Sommelier
|
157
166
|
test_files:
|
158
167
|
- spec/fixtures/atom.rng.xml
|
159
|
-
- spec/fixtures/atom.xsd.xml
|
160
168
|
- spec/fixtures/feed.atom.xml
|
169
|
+
- spec/fixtures/feed.rss2.0.xml
|
161
170
|
- spec/fixtures/multi_namespace_feed.atom.xml
|
162
171
|
- spec/fixtures/nested_atom.xml
|
172
|
+
- spec/fixtures/rss-2.0-namespace.xml
|
163
173
|
- spec/fixtures/simple_feed.atom.xml
|
174
|
+
- spec/fixtures/simple_feed.rss.xml
|
164
175
|
- spec/functional/atom_feed_building_spec.rb
|
165
176
|
- spec/functional/atom_feed_parsing_spec.rb
|
166
177
|
- spec/functional/atom_feed_thread_building_spec.rb
|
167
178
|
- spec/functional/build_nested_document_from_hash_spec.rb
|
179
|
+
- spec/functional/rss_feed_building_spec.rb
|
180
|
+
- spec/functional/rss_feed_parsing_spec.rb
|
168
181
|
- spec/lib/xommelier/atom/entry_spec.rb
|
169
182
|
- spec/lib/xommelier/xml/element/serialization_spec.rb
|
170
183
|
- spec/lib/xommelier/xml/element/structure_spec.rb
|