feed-normalizer 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ 1.3.2
2
+
3
+ * Add support for applicable dublin core elements. (dc:date and dc:creator)
4
+ * Feeds can now be dumped to YAML.
5
+
1
6
  1.3.1
2
7
 
3
8
  * Small changes to work with hpricot 0.6. This release depends on hpricot 0.6.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'hoe'
2
2
 
3
- Hoe.new("feed-normalizer", "1.3.1") do |s|
3
+ Hoe.new("feed-normalizer", "1.3.2") do |s|
4
4
  s.author = "Andrew A. Smith"
5
5
  s.email = "andy@tinnedfruit.org"
6
6
  s.url = "http://feed-normalizer.rubyforge.org/"
@@ -36,7 +36,7 @@ module FeedNormalizer
36
36
  :description => :description,
37
37
  :copyright => :copyright,
38
38
  :authors => :managingEditor,
39
- :last_updated => [:lastBuildDate, :pubDate],
39
+ :last_updated => [:lastBuildDate, :pubDate, :dc_date],
40
40
  :id => :guid
41
41
  }
42
42
 
@@ -49,12 +49,12 @@ module FeedNormalizer
49
49
 
50
50
  # item elements
51
51
  item_mapping = {
52
- :date_published => :pubDate,
52
+ :date_published => [:pubDate, :dc_date],
53
53
  :urls => :link,
54
54
  :description => :description,
55
55
  :content => :description,
56
56
  :title => :title,
57
- :authors => :author
57
+ :authors => [:author, :dc_creator]
58
58
  }
59
59
 
60
60
  rss.items.each do |rss_item|
@@ -34,7 +34,7 @@ module FeedNormalizer
34
34
  feed_mapping = {
35
35
  :generator => :generator,
36
36
  :title => :title,
37
- :last_updated => [:updated, :lastBuildDate, :pubDate],
37
+ :last_updated => [:updated, :lastBuildDate, :pubDate, :dc_date],
38
38
  :copyright => [:copyright, :rights],
39
39
  :authors => [:author, :webMaster, :managingEditor, :contributor],
40
40
  :urls => :link,
@@ -50,12 +50,12 @@ module FeedNormalizer
50
50
 
51
51
  # entry elements
52
52
  entry_mapping = {
53
- :date_published => [:pubDate, :published],
53
+ :date_published => [:pubDate, :published, :dc_date],
54
54
  :urls => :link,
55
55
  :description => [:description, :summary],
56
56
  :content => [:content, :description],
57
57
  :title => :title,
58
- :authors => [:author, :contributor]
58
+ :authors => [:author, :contributor, :dc_creator]
59
59
  }
60
60
 
61
61
  atomrss.entries.each do |atomrss_entry|
@@ -85,7 +85,7 @@ module FeedNormalizer
85
85
  end
86
86
 
87
87
  def self.feed_id(parser)
88
- overridden_value(parser, :id) || "#{parser.link}"
88
+ overridden_value(parser, :id) || ("#{parser.link}" if parser.respond_to?(:link))
89
89
  end
90
90
 
91
91
  # gets the value returned from the method if it overriden, otherwise nil.
@@ -160,7 +160,7 @@ module FeedNormalizer
160
160
  @urls = []
161
161
  @authors = []
162
162
  @items = []
163
- @parser = wrapper.parser
163
+ @parser = wrapper.parser.to_s
164
164
  end
165
165
 
166
166
  def channel() self end
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'feed-normalizer'
3
+ require 'yaml'
3
4
 
4
5
  include FeedNormalizer
5
6
 
@@ -44,7 +45,7 @@ class FeedNormalizerTest < Test::Unit::TestCase
44
45
  end
45
46
 
46
47
  def test_parser_failover_order
47
- assert_equal SimpleRSS, FeedNormalizer::FeedNormalizer.parse(XML_FILES[:atom10], :force_parser => RubyRssParser).parser
48
+ assert_equal 'SimpleRSS', FeedNormalizer::FeedNormalizer.parse(XML_FILES[:atom10], :force_parser => RubyRssParser).parser
48
49
  end
49
50
 
50
51
  def test_force_parser_fail
@@ -56,8 +57,8 @@ class FeedNormalizerTest < Test::Unit::TestCase
56
57
  end
57
58
 
58
59
  def test_correct_parser_used
59
- assert_equal RSS::Parser, FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rss20]).parser
60
- assert_equal SimpleRSS, FeedNormalizer::FeedNormalizer.parse(XML_FILES[:atom10]).parser
60
+ assert_equal 'RSS::Parser', FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rss20]).parser
61
+ assert_equal 'SimpleRSS', FeedNormalizer::FeedNormalizer.parse(XML_FILES[:atom10]).parser
61
62
  end
62
63
 
63
64
  def test_rss
@@ -68,6 +69,7 @@ class FeedNormalizerTest < Test::Unit::TestCase
68
69
  assert_equal "MP3 player court order overturned", feed.entries.last.title
69
70
  assert_equal "SanDisk puts its MP3 players back on display at a German electronics show after overturning a court injunction.", feed.entries.last.description
70
71
  assert_equal "SanDisk puts its MP3 players back on display at a German electronics show after overturning a court injunction.", feed.entries.last.content
72
+ assert_instance_of Time, feed.entries.last.date_published
71
73
  end
72
74
 
73
75
  def test_simplerss
@@ -86,8 +88,7 @@ class FeedNormalizerTest < Test::Unit::TestCase
86
88
  XML_FILES.keys.each do |xml_file|
87
89
  feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[xml_file])
88
90
 
89
- assert [feed.title, feed.url, feed.entries.first.url].collect{|e| e.is_a?(String)}.all?, "Not everything was a String in #{xml_file}"
90
- assert [feed.parser, feed.class].collect{|e| e.is_a?(Class)}.all?
91
+ assert [feed.parser, feed.title, feed.url, feed.entries.first.url].collect{|e| e.is_a?(String)}.all?, "Not everything was a String in #{xml_file}"
91
92
  end
92
93
  end
93
94
 
@@ -121,6 +122,11 @@ class FeedNormalizerTest < Test::Unit::TestCase
121
122
  assert_nothing_raised { Marshal.load(Marshal.dump(feed)) }
122
123
  end
123
124
 
125
+ def test_yaml
126
+ feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rss20])
127
+ assert_nothing_raised { YAML.load(YAML.dump(feed)) }
128
+ end
129
+
124
130
  def test_method_missing
125
131
  assert_raise(NoMethodError) { Feed.new(nil).nonexistant }
126
132
  end
@@ -133,5 +139,33 @@ class FeedNormalizerTest < Test::Unit::TestCase
133
139
  assert feed.entries.first.content =~ /\<p\>/
134
140
  end
135
141
 
142
+ def test_malformed_feed
143
+ assert_nothing_raised { FeedNormalizer::FeedNormalizer.parse('<feed></feed>') }
144
+ end
145
+
146
+ def test_dublin_core_date_ruby_rss
147
+ feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rdf10], :force_parser => RubyRssParser)
148
+ assert_equal 'RSS::Parser', feed.parser
149
+ assert_instance_of Time, feed.entries.first.date_published
150
+ end
151
+
152
+ def test_dublin_core_date_simple_rss
153
+ feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rdf10], :force_parser => SimpleRssParser)
154
+ assert_equal 'SimpleRSS', feed.parser
155
+ assert_instance_of Time, feed.entries.first.date_published
156
+ end
157
+
158
+ def test_dublin_core_creator_ruby_rss
159
+ feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rdf10], :force_parser => RubyRssParser)
160
+ assert_equal 'RSS::Parser', feed.parser
161
+ assert_equal 'Jeff Hecht', feed.entries.last.author
162
+ end
163
+
164
+ def test_dublin_core_creator_simple_rss
165
+ feed = FeedNormalizer::FeedNormalizer.parse(XML_FILES[:rdf10], :force_parser => SimpleRssParser)
166
+ assert_equal 'SimpleRSS', feed.parser
167
+ assert_equal 'Jeff Hecht', feed.entries.last.author
168
+ end
169
+
136
170
  end
137
171
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: feed-normalizer
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.3.1
7
- date: 2007-06-18 00:00:00 -07:00
6
+ version: 1.3.2
7
+ date: 2007-07-02 00:00:00 -07:00
8
8
  summary: Extensible Ruby wrapper for Atom and RSS parsers
9
9
  require_paths:
10
10
  - lib
@@ -50,10 +50,14 @@ files:
50
50
  - test/test_htmlcleaner.rb
51
51
  test_files:
52
52
  - test/test_all.rb
53
- rdoc_options: []
54
-
55
- extra_rdoc_files: []
56
-
53
+ rdoc_options:
54
+ - --main
55
+ - README.txt
56
+ extra_rdoc_files:
57
+ - History.txt
58
+ - License.txt
59
+ - Manifest.txt
60
+ - Readme.txt
57
61
  executables: []
58
62
 
59
63
  extensions: []
@@ -86,5 +90,5 @@ dependencies:
86
90
  requirements:
87
91
  - - ">="
88
92
  - !ruby/object:Gem::Version
89
- version: 1.2.0
93
+ version: 1.2.1
90
94
  version: