feedisco 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -107,6 +107,10 @@ Contribute by forking, tweaking, and sending pull requests, but please add the a
107
107
 
108
108
  ### History
109
109
 
110
+ #### `0.1.3`
111
+
112
+ * Corrected bug causing some links to appear several times in the result.
113
+
110
114
  #### `0.1.2`
111
115
 
112
116
  * Supports `StringIO` as a return from the open-uri `open` method (which is returned instead of a `Tempfile` when the content is smaller than a given size - 10KB).
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/feedisco.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "feedisco"
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Romain Champourlier"]
@@ -30,23 +30,25 @@ module Feedisco
30
30
 
31
31
  # Check <link> elements
32
32
  doc.css('link').each do |link|
33
- feeds << complete_extracted_url(link[:href], harmonized_url) if link[:rel] =~ %r{(alternate|service.feed)}i && Feedisco.feed_content_types.include?(link[:type].downcase.strip)
33
+ discovery = complete_extracted_url(link[:href], harmonized_url) if link[:rel] =~ %r{(alternate|service.feed)}i && Feedisco.feed_content_types.include?(link[:type].downcase.strip)
34
+ feeds << discovery unless discovery.nil? or feeds.include? discovery
34
35
  end
35
36
 
36
37
  # Check <a> elements
37
38
  doc.css('a').each do |a|
38
- if (looks_like_feed?(a[:href]) &&
39
- (a[:href] =~ %r{\A/} || a[:href] =~ %r{#{URI.parse(harmonized_url).host}/}) &&
40
- !feeds.include?(a[:href]))
39
+ if looks_like_feed? a[:href] and
40
+ (a[:href] =~ %r{\A/} or a[:href] =~ %r{#{URI.parse(harmonized_url).host}/})
41
41
 
42
- feeds << complete_extracted_url(a[:href], harmonized_url)
42
+ discovery = complete_extracted_url(a[:href], harmonized_url)
43
+ feeds << discovery unless discovery.nil? or feeds.include?(discovery)
43
44
  end
44
45
  end
45
46
 
46
47
  # Check <a> elements again, less restrictively, so we add all discovered feeds even the ones
47
48
  # on external domains, but the will come after in the feeds array.
48
49
  doc.css('a').each do |a|
49
- feeds << complete_extracted_url(a[:href], harmonized_url) if (looks_like_feed?(a[:href]) && !feeds.include?(a[:href]))
50
+ discovery = complete_extracted_url(a[:href], harmonized_url) if looks_like_feed? a[:href]
51
+ feeds << discovery unless discovery.nil? or feeds.include?(discovery)
50
52
  end
51
53
  end
52
54
  end
@@ -1,6 +1,6 @@
1
1
  class Feedisco
2
2
 
3
3
  def version
4
- '0.1.2'
4
+ '0.1.3'
5
5
  end
6
6
  end
@@ -10,6 +10,7 @@
10
10
  <a href="http://example.com/feed.rss">feed.rss</a>
11
11
  <a href="http://another.domain.com/feed.rss">another domain's feed.rss</a>
12
12
  <a href="http://example.com/feed.rss">feed.rss</a>
13
+ <a href="feed.rss">feed.rss, without the prefix part</a>
13
14
  </body>
14
15
 
15
16
  </html>
@@ -19,16 +19,19 @@ describe "Feedisco::Discovery" do
19
19
 
20
20
  context 'from fixtures' do
21
21
 
22
- it 'should return an empty array' do
23
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'no_link.html'))
22
+ def file_for_fixture(fixture_file_name)
23
+ file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', fixture_file_name))
24
24
  file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
25
+ file
26
+ end
25
27
 
26
- Feedisco.should_receive(:open).and_yield(file)
28
+ it 'should return an empty array' do
29
+ Feedisco.should_receive(:open).and_yield(file_for_fixture 'no_link.html')
27
30
  Feedisco.find('example.com').should == []
28
31
  end
29
32
 
30
33
  it 'should include the alternate link' do
31
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'alternate.html'))
34
+ file = file_for_fixture 'alternate.html'
32
35
  file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
33
36
 
34
37
  Feedisco.should_receive(:open).and_yield(file)
@@ -36,40 +39,35 @@ describe "Feedisco::Discovery" do
36
39
  end
37
40
 
38
41
  it 'should include a <a> link in the body' do
39
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'one_link_in_body.html'))
40
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
42
+ file = file_for_fixture 'one_link_in_body.html'
41
43
 
42
44
  Feedisco.should_receive(:open).and_yield(file)
43
45
  Feedisco.find('example.com').should include("http://example.com/feed.rss")
44
46
  end
45
47
 
46
48
  it 'should include link to feeds on the URL\'s domain' do
47
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'several_links.html'))
48
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
49
+ file = file_for_fixture 'several_links.html'
49
50
 
50
51
  Feedisco.should_receive(:open).and_yield(file)
51
52
  Feedisco.find('example.com').should include("http://example.com/feed.rss")
52
53
  end
53
54
 
54
55
  it 'should have the alternate link as the first of the returned feed' do
55
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'several_links.html'))
56
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
56
+ file = file_for_fixture 'several_links.html'
57
57
 
58
58
  Feedisco.should_receive(:open).and_yield(file)
59
59
  Feedisco.find('example.com').first.should == "http://example.com/feed.xml"
60
60
  end
61
61
 
62
62
  it 'should include link to feeds on other domains' do
63
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'several_links.html'))
64
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
63
+ file = file_for_fixture 'several_links.html'
65
64
 
66
65
  Feedisco.should_receive(:open).and_yield(file)
67
66
  Feedisco.find('example.com').should include "http://another.domain.com/feed.rss"
68
67
  end
69
68
 
70
69
  it 'should have links to feeds on other domains after links to feeds on the same domain' do
71
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'several_links.html'))
72
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
70
+ file = file_for_fixture 'several_links.html'
73
71
 
74
72
  Feedisco.should_receive(:open).and_yield(file)
75
73
  feeds = Feedisco.find('example.com')
@@ -77,13 +75,18 @@ describe "Feedisco::Discovery" do
77
75
  end
78
76
 
79
77
  it 'should include each link only once' do
80
- file = File.open(File.join(File.dirname(__FILE__), '..', 'fixtures', 'several_links.html'))
81
- file.stub!(:class => stub(:to_s => 'Tempfile'), :content_type => 'text/html')
78
+ file = file_for_fixture 'several_links.html'
82
79
 
83
80
  Feedisco.should_receive(:open).and_yield(file)
84
81
  feeds = Feedisco.find('example.com')
85
82
  feeds.select { |f| f == 'http://example.com/feed.rss' }.count.should == 1
86
83
  end
84
+
85
+ it "should complete a relative link" do
86
+ Feedisco.should_receive(:open).and_yield(file_for_fixture 'several_links.html')
87
+ feeds = Feedisco.find('example.com')
88
+ feeds.should include 'http://example.com/feed.rss'
89
+ end
87
90
  end
88
91
 
89
92
  context 'from real websites (this may change so some examples may break)' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedisco
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  segments:
106
106
  - 0
107
- hash: -1864332675888607997
107
+ hash: 2342868453426803014
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements: