syndication 0.5.0 → 0.5.1
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/CHANGES +6 -2
- data/examples/apple.rb +24 -0
- data/lib/syndication/common.rb +11 -1
- data/lib/syndication/content.rb +7 -4
- data/rakefile +1 -1
- data/test/rsstest.rb +4 -1
- metadata +40 -35
data/CHANGES
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
# == Changes in 0.5.1
|
2
|
+
#
|
3
|
+
# - Fixes for handling of CDATA-encoded text.
|
4
|
+
#
|
1
5
|
# == Changes in 0.5
|
2
6
|
#
|
3
|
-
# - Fixed problem with syndication/dublincore reported by Ura Takefumi
|
7
|
+
# - Fixed problem with syndication/dublincore reported by Ura Takefumi.
|
4
8
|
#
|
5
9
|
# - Added new TagSoup completely-non-validating parser, tests for same,
|
6
|
-
# and option to use it for parsing feeds
|
10
|
+
# and option to use it for parsing feeds.
|
data/examples/apple.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Example of using RSS 1.0 content module in RSS 2.0.
|
2
|
+
# (Naughty, but there you go.)
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'syndication/rss'
|
6
|
+
require 'syndication/content'
|
7
|
+
require 'open-uri'
|
8
|
+
|
9
|
+
url = 'http://docs.info.apple.com/rss/allproducts.rss'
|
10
|
+
|
11
|
+
parser = Syndication::RSS::Parser.new
|
12
|
+
|
13
|
+
xml = nil
|
14
|
+
|
15
|
+
open(url) { |http|
|
16
|
+
xml = http.read
|
17
|
+
}
|
18
|
+
|
19
|
+
feed = parser.parse(xml)
|
20
|
+
|
21
|
+
for i in feed.items
|
22
|
+
puts i.content_encoded
|
23
|
+
puts
|
24
|
+
end
|
data/lib/syndication/common.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Copyright � mathew <meta@pobox.com> 2005.
|
4
4
|
# Licensed under the same terms as Ruby.
|
5
5
|
#
|
6
|
-
# $Header: /var/cvs/syndication/syndication/lib/syndication/common.rb,v 1.
|
6
|
+
# $Header: /var/cvs/syndication/syndication/lib/syndication/common.rb,v 1.4 2005/10/23 22:51:17 meta Exp $
|
7
7
|
|
8
8
|
require 'uri'
|
9
9
|
require 'rexml/parsers/streamparser'
|
@@ -268,5 +268,15 @@ module Syndication
|
|
268
268
|
@textstack.last << s
|
269
269
|
end
|
270
270
|
end
|
271
|
+
|
272
|
+
# Supposed to be called when REXML finds a CDATA-encoded piece of text.
|
273
|
+
def cdata(s)
|
274
|
+
# We re-encode, because (a) the API for RSS content module provides both
|
275
|
+
# encoded and decoded results to the user, and (b) REXML doesn't always
|
276
|
+
# seem to pass CDATA via this callback method.
|
277
|
+
if @textstack.last
|
278
|
+
@textstack.last << "<![CDATA[#{s}]]>"
|
279
|
+
end
|
280
|
+
end
|
271
281
|
end
|
272
282
|
end
|
data/lib/syndication/content.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Copyright � mathew <meta@pobox.com> 2005.
|
2
2
|
# Licensed under the same terms as Ruby.
|
3
3
|
#
|
4
|
-
# $Header: /var/cvs/syndication/syndication/lib/syndication/content.rb,v 1.
|
4
|
+
# $Header: /var/cvs/syndication/syndication/lib/syndication/content.rb,v 1.5 2005/11/11 22:01:46 meta Exp $
|
5
5
|
|
6
6
|
module Syndication
|
7
7
|
|
@@ -20,11 +20,11 @@ module Syndication
|
|
20
20
|
if !@content_encoded or @content_encoded == ''
|
21
21
|
return @content_encoded
|
22
22
|
end
|
23
|
-
# CDATA is the easier
|
24
|
-
if @content_encoded.match(/<!\[CDATA\[(.*)\]\]
|
23
|
+
# CDATA is the easier case
|
24
|
+
if @content_encoded.match(/<!\[CDATA\[(.*)\]\]>/m)
|
25
25
|
return $1
|
26
26
|
end
|
27
|
-
#
|
27
|
+
# Decode escaped entities
|
28
28
|
x = @content_encoded.gsub(/</, '<')
|
29
29
|
x.gsub!(/>/, '>')
|
30
30
|
return x.gsub(/&/, '&')
|
@@ -36,6 +36,9 @@ module Syndication
|
|
36
36
|
class Item
|
37
37
|
include Content
|
38
38
|
end
|
39
|
+
class Channel
|
40
|
+
include Content
|
41
|
+
end
|
39
42
|
end
|
40
43
|
|
41
44
|
end
|
data/rakefile
CHANGED
data/test/rsstest.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Copyright � mathew <meta@pobox.com> 2005.
|
2
2
|
# Licensed under the same terms as Ruby.
|
3
3
|
#
|
4
|
-
# $Header: /var/cvs/syndication/syndication/test/rsstest.rb,v 1.
|
4
|
+
# $Header: /var/cvs/syndication/syndication/test/rsstest.rb,v 1.4 2005/10/23 23:00:59 meta Exp $
|
5
5
|
|
6
6
|
require 'syndication/rss'
|
7
7
|
require 'test/unit'
|
@@ -290,9 +290,12 @@ class Tests < Test::Unit::TestCase
|
|
290
290
|
i2 = il.last
|
291
291
|
assert_not_nil(i1.content_encoded, "content_encoded nil, shouldn't be")
|
292
292
|
assert_not_nil(i2.content_encoded, "content_encoded nil, shouldn't be")
|
293
|
+
assert(i1.content_encoded == 'The enticingly cute <i>enhydra lontris</i>')
|
293
294
|
assert(i1.content_decoded == 'The enticingly cute <i>enhydra lontris</i>')
|
294
295
|
assert(i2.content_decoded == "There's this language called <strong>Ruby</strong>, you <em>may</em> have heard of it.")
|
295
296
|
c = f.channel
|
297
|
+
assert(c.content_encoded == '<![CDATA[<p><cite>OtterNet</cite> has <em>dozens</em> of pages of information about otters.</p>]]>')
|
298
|
+
assert(c.content_decoded == '<p><cite>OtterNet</cite> has <em>dozens</em> of pages of information about otters.</p>')
|
296
299
|
assert_not_nil(c)
|
297
300
|
assert_kind_of(Syndication::RSS::Channel, c)
|
298
301
|
assert_not_nil(c.title)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
|
1
|
+
!ruby/object:Gem::Specification
|
2
2
|
rubygems_version: 0.8.11
|
3
3
|
specification_version: 1
|
4
4
|
name: syndication
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.5.1
|
7
|
+
date: 2005-11-11 00:00:00 -06:00
|
8
8
|
summary: A web syndication parser for Atom and RSS with a uniform API
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: meta@pobox.com
|
12
12
|
homepage: http://www.pobox.com/~meta/
|
13
13
|
rubyforge_project:
|
@@ -18,46 +18,51 @@ bindir: bin
|
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
29
28
|
authors:
|
30
|
-
|
29
|
+
- mathew
|
31
30
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
31
|
+
- lib/syndication
|
32
|
+
- lib/syndication/dublincore.rb
|
33
|
+
- lib/syndication/common.rb
|
34
|
+
- lib/syndication/podcast.rb
|
35
|
+
- lib/syndication/content.rb
|
36
|
+
- lib/syndication/tagsoup.rb
|
37
|
+
- lib/syndication/rss.rb
|
38
|
+
- lib/syndication/syndication.rb
|
39
|
+
- lib/syndication/atom.rb
|
40
|
+
- test/tagsouptest.rb
|
41
|
+
- test/rsstest.rb
|
42
|
+
- test/atomtest.rb
|
43
|
+
- examples/apple.rb
|
44
|
+
- examples/yahoo.rb
|
45
|
+
- rakefile
|
46
|
+
- README
|
47
|
+
- IMPLEMENTATION
|
48
|
+
- CHANGES
|
49
|
+
- DEVELOPER
|
50
50
|
test_files:
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
- test/atomtest.rb
|
52
|
+
- test/rsstest.rb
|
53
|
+
- test/tagsouptest.rb
|
54
54
|
rdoc_options: []
|
55
|
+
|
55
56
|
extra_rdoc_files:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
- README
|
58
|
+
- IMPLEMENTATION
|
59
|
+
- CHANGES
|
60
|
+
- DEVELOPER
|
60
61
|
executables: []
|
62
|
+
|
61
63
|
extensions: []
|
64
|
+
|
62
65
|
requirements: []
|
63
|
-
|
66
|
+
|
67
|
+
dependencies: []
|
68
|
+
|