syndication 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|