link_thumbnailer 1.0.2 → 1.0.3

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.
@@ -4,18 +4,20 @@ module LinkThumbnailer
4
4
 
5
5
  class Fetcher
6
6
 
7
+ attr_accessor :url
8
+
7
9
  def fetch(url, redirect_count = 0)
8
10
  if redirect_count > LinkThumbnailer.configuration.redirect_limit
9
11
  raise ArgumentError,
10
12
  "too many redirects (#{redirect_count})"
11
13
  end
12
14
 
13
- uri = url.is_a?(URI) ? url : URI(url)
15
+ self.url = url.is_a?(URI) ? url : URI(url)
14
16
 
15
- if uri.is_a?(URI::HTTP)
17
+ if self.url.is_a?(URI::HTTP)
16
18
  http = Net::HTTP::Persistent.new('linkthumbnailer')
17
19
  http.headers['User-Agent'] = 'linkthumbnailer'
18
- resp = http.request(uri)
20
+ resp = http.request(self.url)
19
21
  case resp
20
22
  when Net::HTTPSuccess; resp.body
21
23
  when Net::HTTPRedirection; fetch(resp['location'], redirect_count + 1)
@@ -1,3 +1,3 @@
1
1
  module LinkThumbnailer
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -49,22 +49,15 @@ module LinkThumbnailer
49
49
 
50
50
  doc = self.doc_parser.parse(self.fetcher.fetch(url), url)
51
51
 
52
- self.object[:url] = doc.source_url
52
+ self.object[:url] = self.fetcher.url.to_s
53
53
  opengraph(doc) || custom(doc)
54
54
  end
55
55
 
56
56
  private
57
57
 
58
58
  def set_options(options)
59
- LinkThumbnailer.configure {|config|
60
- config.mandatory_attributes = options[:mandatory_attributes] if options[:mandatory_attributes]
61
- config.strict = options[:strict] if options[:strict]
62
- config.redirect_limit = options[:redirect_limit].to_i if options[:redirect_limit]
63
- config.blacklist_urls = options[:blacklist_urls] if options[:blacklist_urls]
64
- config.rmagick_attributes = options[:rmagick_attributes] if options[:rmagick_attributes]
65
- config.limit = options[:limit].to_i if options[:limit]
66
- config.top = options[:top].to_i if options[:top]
67
- }
59
+ config
60
+ options.each {|k, v| config[k] = v }
68
61
  end
69
62
 
70
63
  def instantiate_classes
data/spec/fetcher_spec.rb CHANGED
@@ -3,8 +3,11 @@ require 'spec_helper'
3
3
  describe LinkThumbnailer::Fetcher do
4
4
 
5
5
  it { should respond_to :fetch }
6
+ it { should respond_to :url }
7
+ it { should respond_to :url= }
6
8
 
7
9
  let(:fetcher) { LinkThumbnailer::Fetcher.new }
10
+ let(:url) { 'http://foo.com' }
8
11
 
9
12
  describe ".fetch" do
10
13
 
@@ -14,29 +17,54 @@ describe LinkThumbnailer::Fetcher do
14
17
 
15
18
  context "when redirect_count is more than config" do
16
19
 
17
- it { lambda { fetcher.fetch('http://foo.com', 10) }.should raise_exception(ArgumentError) }
20
+ it { lambda { fetcher.fetch(url, 10) }.should raise_exception(ArgumentError) }
18
21
 
19
22
  end
20
23
 
21
24
  context "when no http error" do
22
25
 
23
26
  before do
24
- stub_request(:get, 'http://foo.com/').to_return(:status => 200, :body => 'foo', :headers => {})
27
+ stub_request(:get, url).to_return(:status => 200, :body => 'foo', :headers => {})
25
28
  end
26
29
 
27
- subject { fetcher.fetch('http://foo.com') }
30
+ it "returns body response" do
31
+ fetcher.fetch(url).should eq('foo')
32
+ end
33
+
34
+ it "sets fetcher url" do
35
+ fetcher.fetch(url)
36
+ fetcher.url.to_s.should eq(url)
37
+ end
38
+
39
+ end
40
+
41
+ context "when http redirection" do
42
+
43
+ let(:another_url) { 'http://bar.com' }
28
44
 
29
- it { should eq('foo') }
45
+ before do
46
+ stub_request(:get, url).to_return(:status => 300, :body => 'foo', :headers => { 'Location' => another_url})
47
+ stub_request(:get, another_url).to_return(:status => 200, :body => 'bar', :headers => {})
48
+ end
49
+
50
+ it "returns body response" do
51
+ fetcher.fetch(url).should eq('bar')
52
+ end
53
+
54
+ it "sets fetcher url" do
55
+ fetcher.fetch(url)
56
+ fetcher.url.to_s.should eq(another_url)
57
+ end
30
58
 
31
59
  end
32
60
 
33
61
  context "when http error" do
34
62
 
35
63
  before do
36
- stub_request(:get, 'http://foo.com/').to_return(:status => 500, :body => 'foo', :headers => {})
64
+ stub_request(:get, url).to_return(:status => 500, :body => 'foo', :headers => {})
37
65
  end
38
66
 
39
- it { lambda { fetcher.fetch('http://foo.com') }.should raise_exception(Net::HTTPFatalError) }
67
+ it { lambda { fetcher.fetch(url) }.should raise_exception(Net::HTTPFatalError) }
40
68
 
41
69
  end
42
70
 
@@ -10,41 +10,37 @@ describe LinkThumbnailer do
10
10
  it { should respond_to :config }
11
11
  it { should respond_to :generate }
12
12
 
13
- describe "configuration" do
13
+ describe ".configure" do
14
14
 
15
- context "#configure" do
16
-
17
- it "should yields self" do
18
- LinkThumbnailer.should_receive(:configure).and_yield(LinkThumbnailer)
19
- LinkThumbnailer.configure {|config|}
20
- end
21
-
22
- before do
23
- LinkThumbnailer.configure {|config|
24
- config.mandatory_attributes = %w(foo bar)
25
- config.strict = false
26
- config.redirect_limit = 5
27
- config.blacklist_urls = []
28
- config.rmagick_attributes = []
29
- config.limit = 5
30
- config.top = 10
31
- }
32
- end
33
-
34
- after do
35
- LinkThumbnailer.configuration = nil
36
- end
15
+ it "should yields self" do
16
+ LinkThumbnailer.should_receive(:configure).and_yield(LinkThumbnailer)
17
+ LinkThumbnailer.configure {|config|}
18
+ end
37
19
 
38
- specify { LinkThumbnailer.configuration.mandatory_attributes.should eq(%w(foo bar)) }
39
- specify { LinkThumbnailer.configuration.strict.should be_false }
40
- specify { LinkThumbnailer.configuration.redirect_limit.should eq(5) }
41
- specify { LinkThumbnailer.configuration.blacklist_urls.should eq([]) }
42
- specify { LinkThumbnailer.configuration.rmagick_attributes.should eq([]) }
43
- specify { LinkThumbnailer.configuration.limit.should eq(5) }
44
- specify { LinkThumbnailer.configuration.top.should eq(10) }
20
+ before do
21
+ LinkThumbnailer.configure {|config|
22
+ config.mandatory_attributes = %w(foo bar)
23
+ config.strict = false
24
+ config.redirect_limit = 5
25
+ config.blacklist_urls = []
26
+ config.rmagick_attributes = []
27
+ config.limit = 5
28
+ config.top = 10
29
+ }
30
+ end
45
31
 
32
+ after do
33
+ LinkThumbnailer.configuration = nil
46
34
  end
47
35
 
36
+ specify { LinkThumbnailer.configuration.mandatory_attributes.should eq(%w(foo bar)) }
37
+ specify { LinkThumbnailer.configuration.strict.should be_false }
38
+ specify { LinkThumbnailer.configuration.redirect_limit.should eq(5) }
39
+ specify { LinkThumbnailer.configuration.blacklist_urls.should eq([]) }
40
+ specify { LinkThumbnailer.configuration.rmagick_attributes.should eq([]) }
41
+ specify { LinkThumbnailer.configuration.limit.should eq(5) }
42
+ specify { LinkThumbnailer.configuration.top.should eq(10) }
43
+
48
44
  end
49
45
 
50
46
  context "default values" do
@@ -68,7 +64,12 @@ describe LinkThumbnailer do
68
64
 
69
65
  end
70
66
 
71
- context ".generate" do
67
+ describe ".generate" do
68
+
69
+ it "should set default options" do
70
+ LinkThumbnailer.should_receive(:config)
71
+ LinkThumbnailer.generate('foo')
72
+ end
72
73
 
73
74
  context "with valid arguments" do
74
75
 
@@ -79,7 +80,27 @@ describe LinkThumbnailer do
79
80
  end
80
81
 
81
82
  it "should set limit option" do
82
- expect { LinkThumbnailer.generate('foo', :limit => 20).to change(LinkThumbnailer.configuration.top).from(10).to(20) }
83
+ expect { LinkThumbnailer.generate('foo', :limit => 20).to change(LinkThumbnailer.configuration.limit).from(10).to(20) }
84
+ end
85
+
86
+ it "should set mandatory_attributes option" do
87
+ expect { LinkThumbnailer.generate('foo', :mandatory_attributes => %w(one two)).to change(LinkThumbnailer.configuration.mandatory_attributes).from(%w(url title images)).to(%w(one two)) }
88
+ end
89
+
90
+ it "should set strict option" do
91
+ expect { LinkThumbnailer.generate('foo', :strict => false).to change(LinkThumbnailer.configuration.strict).from(true).to(false) }
92
+ end
93
+
94
+ it "should set redirect_limit option" do
95
+ expect { LinkThumbnailer.generate('foo', :redirect_limit => 5).to change(LinkThumbnailer.configuration.redirect_limit).from(3).to(5) }
96
+ end
97
+
98
+ it "should set blacklist_urls option" do
99
+ expect { LinkThumbnailer.generate('foo', :blacklist_urls => [%r{^http://foo\.bar\.com/}]).to change(LinkThumbnailer.configuration.blacklist_urls).to([%r{^http://foo\.bar\.com/}]) }
100
+ end
101
+
102
+ it "should set rmagick_attributes option" do
103
+ expect { LinkThumbnailer.generate('foo', :rmagick_attributes => %w(one two)).to change(LinkThumbnailer.configuration.rmagick_attributes).to(%w(one two)) }
83
104
  end
84
105
 
85
106
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_thumbnailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-09 00:00:00.000000000 Z
12
+ date: 2013-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri