feed_parser 0.1.0 → 0.1.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/lib/feed_parser.rb +1 -1
- data/lib/feed_parser/feed.rb +10 -1
- data/spec/feed_parser_spec.rb +32 -0
- metadata +6 -6
data/lib/feed_parser.rb
CHANGED
data/lib/feed_parser/feed.rb
CHANGED
@@ -3,7 +3,8 @@ class FeedParser
|
|
3
3
|
attr_reader :type
|
4
4
|
|
5
5
|
def initialize(feed_url)
|
6
|
-
|
6
|
+
parsed_url = parse_url(feed_url)
|
7
|
+
@feed = Nokogiri::XML(open(parsed_url[:url], :http_basic_authentication => parsed_url[:basic_auth]))
|
7
8
|
@feed.remove_namespaces!
|
8
9
|
@type = (@feed.search('rss')[0] && :rss || :atom)
|
9
10
|
self
|
@@ -33,5 +34,13 @@ class FeedParser
|
|
33
34
|
:items => items.map(&:as_json)
|
34
35
|
}
|
35
36
|
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def parse_url(feed_url)
|
40
|
+
protocol, auth, *the_rest = URI.split(feed_url)
|
41
|
+
url = (protocol && [protocol, the_rest.join].join('://') || the_rest.join)
|
42
|
+
basic_auth = auth.split(':') if auth
|
43
|
+
{:url => url, :basic_auth => basic_auth}
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
data/spec/feed_parser_spec.rb
CHANGED
@@ -7,6 +7,38 @@ class NotSaneSanitizer
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe FeedParser do
|
10
|
+
describe FeedParser::Feed, "#new" do
|
11
|
+
it "should be able to open a feed url" do
|
12
|
+
parser = FeedParser.new(:url => "http://blog.example.com/feed/")
|
13
|
+
lambda {
|
14
|
+
parser.parse
|
15
|
+
}.should_not raise_error(ArgumentError)
|
16
|
+
lambda {
|
17
|
+
parser.parse
|
18
|
+
}.should raise_error(SocketError, /getaddrinfo: nodename nor servname provided, or not known/)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to open feed urls with basic auth embedded to the url" do
|
22
|
+
parser = FeedParser.new(:url => "http://user:pass@blog.example.com/feed/")
|
23
|
+
lambda {
|
24
|
+
parser.parse
|
25
|
+
}.should_not raise_error(ArgumentError, /userinfo not supported/)
|
26
|
+
lambda {
|
27
|
+
parser.parse
|
28
|
+
}.should raise_error(SocketError, /getaddrinfo: nodename nor servname provided, or not known/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to open feed urls with only a user name embedded to the url" do
|
32
|
+
parser = FeedParser.new(:url => "http://user@blog.example.com/feed/")
|
33
|
+
lambda {
|
34
|
+
parser.parse
|
35
|
+
}.should_not raise_error(ArgumentError, /userinfo not supported/)
|
36
|
+
lambda {
|
37
|
+
parser.parse
|
38
|
+
}.should raise_error(SocketError, /getaddrinfo: nodename nor servname provided, or not known/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
10
42
|
describe "#parse" do
|
11
43
|
shared_examples_for "feed parser" do
|
12
44
|
it "should not fail" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feed_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156409240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156409240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec-rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156408420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '2.6'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156408420
|
36
36
|
description: Rss and Atom feed parser with sanitizer support built on top of Nokogiri.
|
37
37
|
email:
|
38
38
|
- arttu.tervo@gmail.com
|