feed_searcher 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/feed_searcher.gemspec +1 -0
- data/lib/feed_searcher.rb +2 -12
- data/lib/feed_searcher/page.rb +1 -5
- data/lib/feed_searcher/version.rb +1 -1
- data/spec/feed_searcher_spec.rb +21 -39
- metadata +17 -1
data/feed_searcher.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "mechanize", ">= 1.0.0"
|
22
|
+
spec.add_dependency "nokogiri"
|
22
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
24
|
spec.add_development_dependency "rake"
|
24
25
|
spec.add_development_dependency "rspec", ">= 2.13.0"
|
data/lib/feed_searcher.rb
CHANGED
@@ -2,11 +2,9 @@ require "feed_searcher/version"
|
|
2
2
|
require "feed_searcher/fetcher"
|
3
3
|
require "feed_searcher/page"
|
4
4
|
require "mechanize"
|
5
|
+
require "nokogiri"
|
5
6
|
|
6
7
|
class FeedSearcher
|
7
|
-
Error = Class.new(StandardError)
|
8
|
-
InvalidResponseError = Class.new(Error)
|
9
|
-
|
10
8
|
def self.search(*args)
|
11
9
|
new(*args).search
|
12
10
|
end
|
@@ -19,11 +17,7 @@ class FeedSearcher
|
|
19
17
|
end
|
20
18
|
|
21
19
|
def search
|
22
|
-
|
23
|
-
page.feed_urls
|
24
|
-
else
|
25
|
-
raise InvalidResponseError
|
26
|
-
end
|
20
|
+
fetch.feed_urls
|
27
21
|
end
|
28
22
|
|
29
23
|
private
|
@@ -31,8 +25,4 @@ class FeedSearcher
|
|
31
25
|
def fetch
|
32
26
|
Fetcher.fetch(url, options)
|
33
27
|
end
|
34
|
-
|
35
|
-
def page
|
36
|
-
@page ||= fetch
|
37
|
-
end
|
38
28
|
end
|
data/lib/feed_searcher/page.rb
CHANGED
@@ -6,10 +6,6 @@ class FeedSearcher
|
|
6
6
|
@page = page
|
7
7
|
end
|
8
8
|
|
9
|
-
def html?
|
10
|
-
page.is_a?(Mechanize::Page)
|
11
|
-
end
|
12
|
-
|
13
9
|
def feed_urls
|
14
10
|
feed_attributes.map {|attribute| attribute["href"] }
|
15
11
|
end
|
@@ -21,7 +17,7 @@ class FeedSearcher
|
|
21
17
|
end
|
22
18
|
|
23
19
|
def root
|
24
|
-
page.
|
20
|
+
Nokogiri.HTML(page.body)
|
25
21
|
end
|
26
22
|
end
|
27
23
|
end
|
data/spec/feed_searcher_spec.rb
CHANGED
@@ -2,47 +2,29 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe FeedSearcher do
|
4
4
|
describe ".search" do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<
|
10
|
-
<
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
5
|
+
before do
|
6
|
+
stub_request(:get, "http://example.com/").to_return(
|
7
|
+
:body => <<-EOF
|
8
|
+
<!DOCTYPE HTML>
|
9
|
+
<html>
|
10
|
+
<head>
|
11
|
+
<meta charset="UTF-8">
|
12
|
+
<link href="http://example.com/rss.atom" rel="alternate" title="example" type="application/atom+xml" />
|
13
|
+
<link href="http://example.com/rss.xml" rel="alternate" title="example" type="application/atom+xml" />
|
14
|
+
</head>
|
15
|
+
<body>
|
16
|
+
example
|
17
|
+
</body>
|
18
|
+
</html>
|
19
|
+
EOF
|
20
|
+
)
|
19
21
|
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "returns feed URLs from given URL" do
|
30
|
-
FeedSearcher.search("http://example.com/").should == %w[
|
31
|
-
http://example.com/rss.atom
|
32
|
-
http://example.com/rss.xml
|
33
|
-
]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when response type is not html" do
|
38
|
-
before do
|
39
|
-
stub_request(:get, "http://example.com/").to_return(:body => body)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises FeedSearher::InvalidResponseError" do
|
43
|
-
expect { FeedSearcher.search("http://example.com/") }.
|
44
|
-
to raise_error(FeedSearcher::InvalidResponseError)
|
45
|
-
end
|
23
|
+
it "returns feed URLs from given URL" do
|
24
|
+
FeedSearcher.search("http://example.com/").should == %w[
|
25
|
+
http://example.com/rss.atom
|
26
|
+
http://example.com/rss.xml
|
27
|
+
]
|
46
28
|
end
|
47
29
|
end
|
48
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feed_searcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 1.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: nokogiri
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: bundler
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|