feedutils 0.4.0 → 0.5.0
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.
- checksums.yaml +7 -0
- data/{History.md → HISTORY.md} +0 -0
- data/Manifest.txt +4 -1
- data/README.md +1 -0
- data/Rakefile +5 -6
- data/lib/feedutils.rb +2 -16
- data/lib/feedutils/builder/atom.rb +30 -1
- data/lib/feedutils/version.rb +22 -2
- data/test/feeds/googlegroups.atom +18 -0
- data/test/feeds/googlegroups2.atom +20 -0
- data/test/helper.rb +10 -5
- data/test/test_atom.rb +10 -4
- data/test/test_atom_from_file.rb +28 -0
- data/test/test_rss.rb +1 -1
- metadata +41 -28
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fc27ca90a5876fa6ae3ca6abaad1dba94d95a19b
|
4
|
+
data.tar.gz: 704c4187ca9e9b903fe99ecee3f45c7e5d0150cc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19f0245d4dd3e01403ef6d822ddca5022178b6718201af402fcdd9f7963252acea856cdc45b3e28103f1e5efc92f9be5c2ee4abd78d2896d85af2f7929c96584
|
7
|
+
data.tar.gz: 8b684e82f2ba8473dc80ec5f4a02a0c10df15e0342aa4b182aaba6a55746dc8fd343d620e864a718056e1c6df4253c1e7d10e8e3d169d3551711e9c7a31c706f
|
data/{History.md → HISTORY.md}
RENAMED
File without changes
|
data/Manifest.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
HISTORY.md
|
2
2
|
Manifest.txt
|
3
3
|
README.md
|
4
4
|
Rakefile
|
@@ -9,6 +9,9 @@ lib/feedutils/feed.rb
|
|
9
9
|
lib/feedutils/item.rb
|
10
10
|
lib/feedutils/parser.rb
|
11
11
|
lib/feedutils/version.rb
|
12
|
+
test/feeds/googlegroups.atom
|
13
|
+
test/feeds/googlegroups2.atom
|
12
14
|
test/helper.rb
|
13
15
|
test/test_atom.rb
|
16
|
+
test/test_atom_from_file.rb
|
14
17
|
test/test_rss.rb
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -15,19 +15,18 @@ Hoe.spec 'feedutils' do
|
|
15
15
|
|
16
16
|
# switch extension to .markdown for gihub formatting
|
17
17
|
self.readme_file = 'README.md'
|
18
|
-
self.history_file = '
|
18
|
+
self.history_file = 'HISTORY.md'
|
19
19
|
|
20
20
|
self.extra_deps = [
|
21
|
-
['logutils', '>= 0.
|
21
|
+
['logutils', '>= 0.6.1']
|
22
22
|
]
|
23
|
-
|
23
|
+
|
24
24
|
### todo: add fetcher dep for testing (e.g. development only)
|
25
25
|
|
26
26
|
self.licenses = ['Public Domain']
|
27
27
|
|
28
28
|
self.spec_extras = {
|
29
|
-
:
|
29
|
+
required_ruby_version: '>= 1.9.2'
|
30
30
|
}
|
31
31
|
|
32
|
-
|
33
|
-
end
|
32
|
+
end
|
data/lib/feedutils.rb
CHANGED
@@ -20,20 +20,6 @@ require 'feedutils/item'
|
|
20
20
|
require 'feedutils/parser'
|
21
21
|
|
22
22
|
|
23
|
-
module FeedUtils
|
24
|
-
|
25
|
-
def self.banner
|
26
|
-
"feedutils/#{VERSION} (with stdlib rss/#{RSS::VERSION}) on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
27
|
-
end
|
28
|
-
|
29
|
-
=begin
|
30
|
-
def self.root
|
31
|
-
"#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
|
32
|
-
end
|
33
|
-
=end
|
34
|
-
|
35
|
-
end # module FeedUtils
|
36
|
-
|
37
|
-
|
38
|
-
puts FeedUtils.banner # say hello
|
39
23
|
|
24
|
+
# say hello
|
25
|
+
puts FeedUtils.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
|
@@ -27,6 +27,34 @@ class AtomFeedBuilder
|
|
27
27
|
feed.title = atom_feed.title.content
|
28
28
|
logger.debug " atom | title.content >#{atom_feed.title.content}< : #{atom_feed.title.content.class.name}"
|
29
29
|
|
30
|
+
|
31
|
+
## note: for now assume id is feed (html)url
|
32
|
+
## use url only if starts_with http
|
33
|
+
## might not be link e.g blogger uses for ids =>
|
34
|
+
## <id>tag:blogger.com,1999:blog-4704664917418794835</id>
|
35
|
+
##
|
36
|
+
## Note: remove (strip) leading and trailing spaces and newlines
|
37
|
+
|
38
|
+
if atom_feed.id.content.strip.start_with?( 'http' )
|
39
|
+
feed.url = atom_feed.id.content.strip
|
40
|
+
else
|
41
|
+
feed.url = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
logger.debug " atom | id.content >#{atom_feed.id.content}< : #{atom_feed.id.content.class.name}"
|
45
|
+
|
46
|
+
## note: use links (plural to allow multiple links e.g. self,alternate,etc.)
|
47
|
+
atom_feed.links.each_with_index do |link,i|
|
48
|
+
logger.debug " atom | link[#{i+1}] link rel=>#{link.rel}< : #{link.rel.class.name} type=#{link.type} href=#{link.href}"
|
49
|
+
|
50
|
+
## for now assume alternate is link or no rel specified (assumes alterante)
|
51
|
+
## note: only set if feed.url is NOT already set (via <id> for example)
|
52
|
+
if feed.url.nil? && (link.rel == 'alternate' || link.rel.nil?)
|
53
|
+
feed.url = link.href
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
30
58
|
if atom_feed.updated
|
31
59
|
# NOTE: empty updated.content e.g. used by google groups feed
|
32
60
|
# will return nil : NilClass
|
@@ -38,7 +66,8 @@ class AtomFeedBuilder
|
|
38
66
|
end
|
39
67
|
|
40
68
|
if atom_feed.generator
|
41
|
-
|
69
|
+
## Note: remove (strip) leading and trailing spaces and newlines
|
70
|
+
feed.generator = atom_feed.generator.content.strip
|
42
71
|
logger.debug " atom | generator.content >#{atom_feed.generator.content}< : #{atom_feed.generator.content.class.name}"
|
43
72
|
|
44
73
|
# pp atom_feed.generator
|
data/lib/feedutils/version.rb
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
|
2
3
|
module FeedUtils
|
3
|
-
|
4
|
-
|
4
|
+
|
5
|
+
MAJOR = 0
|
6
|
+
MINOR = 5
|
7
|
+
PATCH = 0
|
8
|
+
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
9
|
+
|
10
|
+
def self.version
|
11
|
+
VERSION
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def self.banner
|
16
|
+
"feedutils/#{VERSION} (with stdlib rss/#{RSS::VERSION}) on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.root
|
20
|
+
"#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
|
21
|
+
end
|
22
|
+
|
23
|
+
end # module FeedUtils
|
24
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
2
|
+
<id>https://groups.google.com/d/forum/beerdb</id>
|
3
|
+
<title type="text">Open Beer & Brewery Database (beer.db)</title>
|
4
|
+
<subtitle>Free open public domain beer database &amp; schema (beer.db) for use in any (programming) language (e.g. uses plain text fixtures/data sets). Questions? Comments?</subtitle>
|
5
|
+
<link rel="self" href="https://groups.google.com/forum/feed/beerdb/topics/atom_v1_0.xml" title="beerdb feed"></link>
|
6
|
+
<updated></updated>
|
7
|
+
<generator>Google Groups</generator>
|
8
|
+
<entry>
|
9
|
+
<author>
|
10
|
+
<name>Joe Sixpack</name>
|
11
|
+
</author>
|
12
|
+
<updated>2014-12-17T11:54:43Z</updated>
|
13
|
+
<id>https://groups.google.com/d/topic/beerdb/KpQOUDYJ3J8</id>
|
14
|
+
<link href="https://groups.google.com/d/topic/beerdb/KpQOUDYJ3J8"></link>
|
15
|
+
<title type="text">Planet Beer (Austria, Belgium) - Feeds Incl. Craft Fest Wien, Beer-A-Day, proBier n Friends</title>
|
16
|
+
<summary type="html">Hello, I've started putting together a planet site for beer, that is, Planet Beer [1]. The first feed lists include: - Austria [2] - Belgium [3] You're welcome and invited to suggest new countries and feeds. Cheers. Prost. [1] http://planetbeer.herokuapp.com [2] http://github.com/openbeer/planet/blob/master/</summary>
|
17
|
+
</entry>
|
18
|
+
</feed>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
2
|
+
<id>https://groups.google.com/d/forum/beerdb</id>
|
3
|
+
<title type="text">Open Beer & Brewery Database (beer.db)</title>
|
4
|
+
<subtitle>Free open public domain beer database &amp; schema (beer.db) for use in any (programming) language (e.g. uses plain text fixtures/data sets). Questions? Comments?</subtitle>
|
5
|
+
<link rel="self" href="https://groups.google.com/forum/feed/beerdb/topics/atom_v1_0.xml" title="beerdb feed"></link>
|
6
|
+
<updated></updated>
|
7
|
+
<generator>
|
8
|
+
Google Groups (w/ leading n trailing newlines stripped)
|
9
|
+
</generator>
|
10
|
+
<entry>
|
11
|
+
<author>
|
12
|
+
<name>Joe Sixpack</name>
|
13
|
+
</author>
|
14
|
+
<updated>2014-12-17T11:54:43Z</updated>
|
15
|
+
<id>https://groups.google.com/d/topic/beerdb/KpQOUDYJ3J8</id>
|
16
|
+
<link href="https://groups.google.com/d/topic/beerdb/KpQOUDYJ3J8"></link>
|
17
|
+
<title type="text">Planet Beer (Austria, Belgium) - Feeds Incl. Craft Fest Wien, Beer-A-Day, proBier n Friends</title>
|
18
|
+
<summary type="html">Hello, I've started putting together a planet site for beer, that is, Planet Beer [1]. The first feed lists include: - Austria [2] - Belgium [3] You're welcome and invited to suggest new countries and feeds. Cheers. Prost. [1] http://planetbeer.herokuapp.com [2] http://github.com/openbeer/planet/blob/master/</summary>
|
19
|
+
</entry>
|
20
|
+
</feed>
|
data/test/helper.rb
CHANGED
@@ -3,11 +3,8 @@
|
|
3
3
|
|
4
4
|
## minitest setup
|
5
5
|
|
6
|
-
# require 'minitest/unit'
|
7
6
|
require 'minitest/autorun'
|
8
7
|
|
9
|
-
# include MiniTest::Unit # lets us use TestCase instead of MiniTest::Unit::TestCase
|
10
|
-
|
11
8
|
require 'logutils'
|
12
9
|
require 'fetcher'
|
13
10
|
|
@@ -18,8 +15,16 @@ require 'feedutils'
|
|
18
15
|
|
19
16
|
LogUtils::Logger.root.level = :debug
|
20
17
|
|
21
|
-
def parse_feed(
|
22
|
-
xml = Fetcher.read(
|
18
|
+
def parse_feed( url )
|
19
|
+
xml = Fetcher.read( url )
|
23
20
|
|
24
21
|
FeedUtils::Parser.parse( xml )
|
25
22
|
end
|
23
|
+
|
24
|
+
|
25
|
+
def parse_feed_from_file( name )
|
26
|
+
xml = File.read( "#{FeedUtils.root}/test/feeds/#{name}")
|
27
|
+
|
28
|
+
FeedUtils::Parser.parse( xml )
|
29
|
+
end
|
30
|
+
|
data/test/test_atom.rb
CHANGED
@@ -1,29 +1,34 @@
|
|
1
1
|
###
|
2
2
|
# to run use
|
3
|
-
# ruby -I ./lib -I ./test test/
|
3
|
+
# ruby -I ./lib -I ./test test/test_atom.rb
|
4
4
|
# or better
|
5
5
|
# rake test
|
6
6
|
|
7
7
|
require 'helper'
|
8
8
|
|
9
|
-
class TestAtom < MiniTest::
|
9
|
+
class TestAtom < MiniTest::Test
|
10
10
|
|
11
11
|
def test_rubyonrails
|
12
12
|
feed = parse_feed( 'http://weblog.rubyonrails.org/feed/atom.xml' )
|
13
13
|
|
14
|
-
assert_equal 'atom',
|
14
|
+
assert_equal 'atom', feed.format
|
15
|
+
assert_equal 'http://weblog.rubyonrails.org/', feed.url
|
15
16
|
end
|
16
17
|
|
18
|
+
|
17
19
|
def test_railstutorial
|
18
20
|
feed = parse_feed( 'http://feeds.feedburner.com/railstutorial?format=xml' )
|
19
21
|
|
20
|
-
assert_equal 'atom',
|
22
|
+
assert_equal 'atom', feed.format
|
23
|
+
assert_equal 'http://news.railstutorial.org/', feed.url
|
21
24
|
end
|
22
25
|
|
26
|
+
|
23
27
|
def test_googlegroup
|
24
28
|
feed = parse_feed( 'https://groups.google.com/forum/feed/beerdb/topics/atom.xml?num=15' )
|
25
29
|
|
26
30
|
assert_equal 'atom', feed.format
|
31
|
+
assert_equal 'https://groups.google.com/d/forum/beerdb', feed.url
|
27
32
|
end
|
28
33
|
|
29
34
|
|
@@ -34,6 +39,7 @@ class TestAtom < MiniTest::Unit::TestCase
|
|
34
39
|
assert_equal 'Blogger', feed.generator
|
35
40
|
assert_equal 'Headius', feed.title
|
36
41
|
assert_equal 'Helping the JVM Into the 21st Century', feed.title2 # aka subtitle in atom
|
42
|
+
assert_equal 'http://blog.headius.com/', feed.url
|
37
43
|
end
|
38
44
|
|
39
45
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_atom_from_file.rb
|
4
|
+
# or better
|
5
|
+
# rake test
|
6
|
+
|
7
|
+
require 'helper'
|
8
|
+
|
9
|
+
|
10
|
+
class TestAtomFromFile < MiniTest::Test
|
11
|
+
|
12
|
+
def test_googlegroup
|
13
|
+
feed = parse_feed_from_file( 'googlegroups.atom' )
|
14
|
+
|
15
|
+
assert_equal 'atom', feed.format
|
16
|
+
assert_equal 'Google Groups', feed.generator
|
17
|
+
assert_equal 'https://groups.google.com/d/forum/beerdb', feed.url
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_googlegroup2
|
21
|
+
feed = parse_feed_from_file( 'googlegroups2.atom' )
|
22
|
+
|
23
|
+
assert_equal 'atom', feed.format
|
24
|
+
assert_equal 'Google Groups (w/ leading n trailing newlines stripped)', feed.generator
|
25
|
+
assert_equal 'https://groups.google.com/d/forum/beerdb', feed.url
|
26
|
+
end
|
27
|
+
|
28
|
+
end # class TestAtomFromFile
|
data/test/test_rss.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,68 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feedutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gerald Bauer
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-12-20 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: logutils
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 0.6.1
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.1
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: rdoc
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - ~>
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
+
version: '4.0'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: hoe
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- - ~>
|
45
|
+
- - "~>"
|
42
46
|
- !ruby/object:Gem::Version
|
43
|
-
version: '3.
|
47
|
+
version: '3.13'
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.13'
|
47
55
|
description: feedutils - web feed parser and normalizer (RSS 2.0, Atom, etc.)
|
48
56
|
email: feedreader@googlegroups.com
|
49
57
|
executables: []
|
50
58
|
extensions: []
|
51
59
|
extra_rdoc_files:
|
60
|
+
- HISTORY.md
|
52
61
|
- Manifest.txt
|
62
|
+
- README.md
|
53
63
|
files:
|
54
|
-
-
|
64
|
+
- ".gemtest"
|
65
|
+
- HISTORY.md
|
55
66
|
- Manifest.txt
|
56
67
|
- README.md
|
57
68
|
- Rakefile
|
@@ -62,37 +73,39 @@ files:
|
|
62
73
|
- lib/feedutils/item.rb
|
63
74
|
- lib/feedutils/parser.rb
|
64
75
|
- lib/feedutils/version.rb
|
76
|
+
- test/feeds/googlegroups.atom
|
77
|
+
- test/feeds/googlegroups2.atom
|
65
78
|
- test/helper.rb
|
66
79
|
- test/test_atom.rb
|
80
|
+
- test/test_atom_from_file.rb
|
67
81
|
- test/test_rss.rb
|
68
|
-
- .gemtest
|
69
82
|
homepage: https://github.com/rubylibs/feedutils
|
70
83
|
licenses:
|
71
84
|
- Public Domain
|
85
|
+
metadata: {}
|
72
86
|
post_install_message:
|
73
87
|
rdoc_options:
|
74
|
-
- --main
|
88
|
+
- "--main"
|
75
89
|
- README.md
|
76
90
|
require_paths:
|
77
91
|
- lib
|
78
92
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
93
|
requirements:
|
81
|
-
- -
|
94
|
+
- - ">="
|
82
95
|
- !ruby/object:Gem::Version
|
83
96
|
version: 1.9.2
|
84
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ">="
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
requirements: []
|
91
|
-
rubyforge_project:
|
92
|
-
rubygems_version:
|
103
|
+
rubyforge_project:
|
104
|
+
rubygems_version: 2.4.2
|
93
105
|
signing_key:
|
94
|
-
specification_version:
|
106
|
+
specification_version: 4
|
95
107
|
summary: feedutils - web feed parser and normalizer (RSS 2.0, Atom, etc.)
|
96
108
|
test_files:
|
97
109
|
- test/test_atom.rb
|
110
|
+
- test/test_atom_from_file.rb
|
98
111
|
- test/test_rss.rb
|