rrsimple-rss 1.3.3 → 1.3.4

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/rrsimple-rss.rb CHANGED
@@ -2,7 +2,7 @@ require 'cgi'
2
2
  require 'time'
3
3
 
4
4
  class RRSimpleRSS
5
- VERSION = "1.3.3"
5
+ VERSION = "1.3.4"
6
6
 
7
7
  attr_reader :items, :source
8
8
  alias :entries :items
@@ -18,7 +18,7 @@ class RRSimpleRSS
18
18
  :image, :logo, :icon, :rating,
19
19
  :rights, :copyright,
20
20
  :textInput, :'feedburner:browserFriendly',
21
- :'itunes:author', :'itunes:category', :"full-text"
21
+ :'itunes:author', :'itunes:category', :"full-text", :categories, :keywords
22
22
  ]
23
23
 
24
24
  @@item_tags = [
@@ -27,14 +27,14 @@ class RRSimpleRSS
27
27
  :author, :contributor,
28
28
  :description, :summary, :content, :'content:encoded', :comments,
29
29
  :pubDate, :published, :updated, :expirationDate, :modified, :'dc:date',
30
- :category, :guid,
30
+ :category, :categories, :guid,
31
31
  :'trackback:ping', :'trackback:about',
32
32
  :'dc:creator', :'dc:title', :'dc:subject', :'dc:rights', :'dc:publisher',
33
33
  :'feedburner:origLink',
34
34
  :'media:content#url', :'media:content#type', :'media:content#height', :'media:content#width',
35
35
  :'media:title', :'media:thumbnail#url', :'media:thumbnail#height', :'media:thumbnail#width',
36
36
  :'media:credit', :'media:credit#role',
37
- :'media:category', :'media:category#scheme', :"full-text"
37
+ :'media:category', :'media:category#scheme', :"full-text", :keywords
38
38
  ]
39
39
 
40
40
  def initialize(source, options={})
@@ -109,6 +109,7 @@ class RRSimpleRSS
109
109
  elsif match[3] =~ %r{<(rss:|atom:)?#{tag}(.*?)rel=['"]#{rel}['"](.*?)/\s*>}mi
110
110
  nil
111
111
  end
112
+
112
113
  item[clean_tag("#{tag}+#{rel}")] = clean_content(tag, $3, $4) if $3 || $4
113
114
  elsif tag.to_s.include?("#")
114
115
  tag_data = tag.to_s.split("#")
@@ -119,6 +120,7 @@ class RRSimpleRSS
119
120
  elsif match[3] =~ %r{<(rss:|atom:)?#{tag}(.*?)#{attrib}=['"](.*?)['"](.*?)/\s*>}mi
120
121
  nil
121
122
  end
123
+
122
124
  item[clean_tag("#{tag}_#{attrib}")] = clean_content(tag, attrib, $3) if $3
123
125
  else
124
126
  if match[3] =~ %r{<(rss:|atom:)?#{tag}(.*?)>(.*?)</(rss:|atom:)?#{tag}>}mi
@@ -126,7 +128,13 @@ class RRSimpleRSS
126
128
  elsif match[3] =~ %r{<(rss:|atom:)?#{tag}(.*?)/\s*>}mi
127
129
  nil
128
130
  end
129
- item[clean_tag(tag)] = clean_content(tag, $2, $3) if $2 || $3
131
+
132
+ if tag == :category || tag == :keywords
133
+ item[:categories] = match[3].scan(%r{<(rss:|atom:)?#{tag}(.*?)>(.*?)</(rss:|atom:)?#{tag}>}mi).map {|x| category(x[2])}
134
+ else
135
+ item[clean_tag(tag)] = clean_content(tag, $2, $3) if $2 || $3
136
+ end
137
+
130
138
  end
131
139
  end
132
140
 
@@ -137,6 +145,10 @@ class RRSimpleRSS
137
145
 
138
146
  end
139
147
 
148
+ def category(str)
149
+ str.include?("CDATA") ? str[9..str.length-4] : str
150
+ end
151
+
140
152
  def clean_content(tag, attrs, content)
141
153
  content = content.to_s
142
154
  case tag
data/rrsimple-rss.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "rrsimple-rss"
3
- s.version = "1.3.3"
3
+ s.version = "1.3.4"
4
4
  s.date = "2010-07-06"
5
5
  s.summary = "A simple, flexible, extensible, and liberal RSS and Atom reader for Ruby. It is designed to be backwards compatible with the standard RSS parser, but will never do RSS generation."
6
6
  s.email = "rodrigo@rrmartins.com"
@@ -6,7 +6,9 @@ require 'pry'
6
6
 
7
7
  class BaseTest < Test::Unit::TestCase
8
8
  def setup
9
+ @rss_prnews = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/prnews.xml')
9
10
  @rss_bbc = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/bbc.xml')
11
+ @rss_baboo = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/baboo.xml')
10
12
  @rss09 = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/rss09.rdf')
11
13
  @rss20 = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/rss20.xml')
12
14
  @media_rss = RRSimpleRSS.parse open(File.dirname(__FILE__) + '/../data/media_rss.xml')
@@ -18,15 +20,45 @@ class BaseTest < Test::Unit::TestCase
18
20
  assert_equal @rss09, @rss09.channel
19
21
  assert_equal @rss20, @rss20.channel
20
22
  assert_equal @atom, @atom.feed
23
+ assert_equal @rss_baboo, @rss_baboo.feed
24
+ assert_equal @rss_prnews, @rss_prnews.feed
21
25
  end
22
26
 
23
27
  def test_items
28
+ assert_kind_of Array, @rss_baboo.items
24
29
  assert_kind_of Array, @rss_bbc.items
25
30
  assert_kind_of Array, @rss09.items
26
31
  assert_kind_of Array, @rss20.items
27
32
  assert_kind_of Array, @atom.entries
33
+ assert_kind_of Array, @rss_prnews.items
28
34
  end
29
35
 
36
+ def test_rss_prnews
37
+ assert_equal 20, @rss_prnews.items.size
38
+ assert_equal "PR Newswire Releases", @rss_prnews.title.force_encoding("UTF-8")
39
+ assert_equal "http://www.prnewswire.com/news-releases/sva-promove-exposicao-de-cartazes-que-retrata-a-evolucao-do-design-grafico-nos-ultimos-70-anos-540199401.html", @rss_prnews.channel.link
40
+ assert_equal "http://www.prnewswire.com/news-releases/sva-promove-exposicao-de-cartazes-que-retrata-a-evolucao-do-design-grafico-nos-ultimos-70-anos-540199401.html", @rss_prnews.items.first.link
41
+ assert_equal "http://www.prnewswire.com/news-releases/sva-promove-exposicao-de-cartazes-que-retrata-a-evolucao-do-design-grafico-nos-ultimos-70-anos-540199401.html", @rss_prnews.items.first[:link]
42
+ assert_equal Time.parse("2015-11-04 15:30:00 -0200"), @rss_prnews.items.first.pubDate
43
+ assert_equal Time.parse("2015-11-09 11:55:45 -0200"), @rss_prnews.channel.lastBuildDate
44
+ assert_nil @rss_prnews.items.first.full_text
45
+ assert_not_nil @rss_prnews.items.first.description
46
+ assert_kind_of Array, @rss_prnews.items.first.categories
47
+ end
48
+
49
+ def test_rss_baboo
50
+ assert_equal 21, @rss_baboo.items.size
51
+ assert_equal "BABOO", @rss_baboo.title.force_encoding("UTF-8")
52
+ assert_equal "http://www.baboo.com.br", @rss_baboo.channel.link
53
+ assert_equal "http://www.baboo.com.br/internet/lista-do-procon-sp-com-lojas-online-que-devem-ser-evitadas-e-atualizada/", @rss_baboo.items.first.link
54
+ assert_equal "http://www.baboo.com.br/internet/lista-do-procon-sp-com-lojas-online-que-devem-ser-evitadas-e-atualizada/", @rss_baboo.items.first[:link]
55
+ assert_equal Time.parse("2015-11-05 14:11:24 -0200"), @rss_baboo.items.first.pubDate
56
+ assert_equal Time.parse("2015-11-05 14:11:24 -0200"), @rss_baboo.channel.lastBuildDate
57
+ assert_nil @rss_baboo.items.first.full_text
58
+ assert_not_nil @rss_baboo.items.first.description
59
+ assert_kind_of Array, @rss_baboo.items.first.categories
60
+ end
61
+
30
62
  def test_rss_bbc
31
63
  assert_equal 9, @rss_bbc.items.size
32
64
  assert_equal "BBCBrasil.com | Vídeos e Fotos", @rss_bbc.title.force_encoding("UTF-8")
@@ -36,6 +68,7 @@ class BaseTest < Test::Unit::TestCase
36
68
  assert_equal Time.parse("2015-11-03 08:21:50 -0200"), @rss_bbc.items.first.pubDate
37
69
  assert_equal Time.parse("2015-11-05 07:33:38 -0200"), @rss_bbc.channel.lastBuildDate
38
70
  assert_not_nil @rss_bbc.items.first.full_text
71
+ assert_kind_of Array, @rss_bbc.items.first.categories
39
72
  end
40
73
 
41
74
  def test_rss09
@@ -47,6 +80,7 @@ class BaseTest < Test::Unit::TestCase
47
80
  assert_equal Time.parse("2005-09-09 06:52:31 -0300"), @rss09.items.first.dc_date
48
81
  assert_equal Time.parse("Fri Sep 09 02:52:31 PDT 2005"), @rss09.channel.dc_date
49
82
  assert_nil @rss09.items.first.full_text
83
+ assert_kind_of Array, @rss09.items.first.categories
50
84
  end
51
85
 
52
86
  def test_media_rss
@@ -68,6 +102,7 @@ class BaseTest < Test::Unit::TestCase
68
102
  assert_equal "pets frodo", @media_rss.items.first.media_category
69
103
  assert_equal "urn:flickr:tags", @media_rss.items.first.media_category_scheme
70
104
  assert_nil @media_rss.items.first.full_text
105
+ assert_kind_of Array, @media_rss.items.first.categories
71
106
  end
72
107
 
73
108
  def test_rss20
@@ -78,6 +113,7 @@ class BaseTest < Test::Unit::TestCase
78
113
  assert_equal "http://feeds.feedburner.com/rufytech?m=68", @rss20.items.first[:link]
79
114
  assert_equal "This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.", @rss20.channel.feedburner_browserFriendly
80
115
  assert_nil @rss20.items.first.full_text
116
+ assert_kind_of Array, @rss20.items.first.categories
81
117
  end
82
118
 
83
119
  def test_atom
@@ -87,6 +123,7 @@ class BaseTest < Test::Unit::TestCase
87
123
  assert_equal "http://example.org/2005/04/02/atom", @atom.entries.first.link
88
124
  assert_equal "http://example.org/2005/04/02/atom", @atom.entries.first[:link]
89
125
  assert_nil @atom.entries.first.full_text
126
+ assert_kind_of Array, @atom.entries.first.categories
90
127
  end
91
128
 
92
129
  def test_bad_feed
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrsimple-rss
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: