link_thumbnailer 2.5.0 → 2.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e82e842f04354aa42e0d379f3bb7f1260f9d12ef
4
- data.tar.gz: 472731d1a762495f3deef46028d68481a77f1eb3
3
+ metadata.gz: 8ebb211bdc1846b8bd87073ba32ad911ce291294
4
+ data.tar.gz: 0681efbd2d6315670e5b9888c66d27b898aa9401
5
5
  SHA512:
6
- metadata.gz: 615f8cf840ce82c6080340730f33146732c14d1c32ab11d9c8d71228c9c0cec05f84a55a846f3e55e4b31df91efb0f84854c4e02f033626b95a65888fb8ebd2d
7
- data.tar.gz: bb113d233c1296b407d44091d64dd50d6c031eae0eb28f5d816415abdcfea5ffb8c861ea53e36b6be9914c202254db5689f1e545d645cf457ac312f1c5dfddd5
6
+ metadata.gz: 7b15cff3407a6e288a97f9923279b4f926b5f8d08bd00db52881dec032501198bd8dda0c635b14fd89054c2b83f87ce4a3557a9fe57d5490af8ed6f5b3905f74
7
+ data.tar.gz: 576533b10d2f694ce8bbd974bc76af780a566227d37fc05d0ff82aca54c9807b521cdf56c457af06b8c9d54496aef04d0a51c21787af4479e7930f603847e48c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.5.1
2
+
3
+ - Implement `Set-Cookie` header between http redirections to set cookies when site requires it. Fixes #55.
4
+
1
5
  # 2.5.0
2
6
 
3
7
  - Handles seamlessly `og:image` and `og:image:url`
data/README.md CHANGED
@@ -83,7 +83,7 @@ object.to_json
83
83
 
84
84
  ## Configuration
85
85
 
86
- LinkThumnailer comes with default configuration values. You can change default value by overriding them in a rails initializer:
86
+ LinkThumbnailer comes with default configuration values. You can change default value by overriding them in a rails initializer:
87
87
 
88
88
  In `config/initializers/link_thumbnailer.rb`
89
89
 
@@ -107,7 +107,7 @@ LinkThumbnailer.configure do |config|
107
107
  #
108
108
  # See http://www.ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html#open_timeout
109
109
  #
110
- # config.http_timeout = 5
110
+ # config.http_open_timeout = 5
111
111
 
112
112
  # List of blacklisted urls you want to skip when searching for images.
113
113
  #
@@ -177,6 +177,16 @@ LinkThumbnailer defines a list of custom exceptions you may want to rescue in yo
177
177
  * `RedirectLimit` -- raised when redirection threshold defined in config is reached
178
178
  * `BadUriFormat` -- raised when url given is not a valid HTTP url
179
179
 
180
+ You can rescue from any LinkThumbnailer exceptions using the following code:
181
+
182
+ ```ruby
183
+ begin
184
+ LinkThumbnailer.generate('http://foo.com')
185
+ rescue LinkThumbnailer::Exceptions => e
186
+ # do something
187
+ end
188
+ ```
189
+
180
190
  ## Contributing
181
191
 
182
192
  1. Fork it
@@ -18,7 +18,7 @@ LinkThumbnailer.configure do |config|
18
18
  #
19
19
  # See http://www.ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html#open_timeout
20
20
  #
21
- # config.http_timeout = 5
21
+ # config.http_open_timeout = 5
22
22
 
23
23
  # List of blacklisted urls you want to skip when searching for images.
24
24
  #
@@ -23,10 +23,13 @@ module LinkThumbnailer
23
23
  class Configuration
24
24
 
25
25
  attr_accessor :redirect_limit, :blacklist_urls, :user_agent,
26
- :verify_ssl, :http_timeout, :attributes, :graders,
27
- :description_min_length, :positive_regex, :negative_regex,
26
+ :verify_ssl, :http_open_timeout, :http_read_timeout, :attributes,
27
+ :graders, :description_min_length, :positive_regex, :negative_regex,
28
28
  :image_limit, :image_stats
29
29
 
30
+ alias_method :http_timeout, :http_open_timeout
31
+ alias_method :http_timeout=, :http_open_timeout=
32
+
30
33
  # Create a new instance.
31
34
  #
32
35
  # @return [LinkThumbnailer::Configuration]
@@ -34,7 +37,8 @@ module LinkThumbnailer
34
37
  @redirect_limit = 3
35
38
  @user_agent = 'link_thumbnailer'
36
39
  @verify_ssl = true
37
- @http_timeout = 5
40
+ @http_open_timeout = 5
41
+ @http_read_timeout = 5
38
42
  @blacklist_urls = [
39
43
  %r{^http://ad\.doubleclick\.net/},
40
44
  %r{^http://b\.scorecardresearch\.com/},
@@ -9,7 +9,7 @@ module LinkThumbnailer
9
9
 
10
10
  def sanitize(str)
11
11
  return unless str
12
- str.strip.gsub(/[\r\n\f]+/, "\n")
12
+ str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').strip.gsub(/[\r\n\f]+/, "\n")
13
13
  end
14
14
 
15
15
  end
@@ -15,14 +15,14 @@ module LinkThumbnailer
15
15
  super(config)
16
16
  end
17
17
 
18
- def call(url = '', redirect_count = 0)
18
+ def call(url = '', redirect_count = 0, headers = {})
19
19
  self.url = url
20
20
  @redirect_count = redirect_count
21
21
 
22
22
  raise ::LinkThumbnailer::RedirectLimit if too_many_redirections?
23
23
 
24
24
  with_valid_url do
25
- set_http_headers
25
+ set_http_headers(headers)
26
26
  set_http_options
27
27
  perform_request
28
28
  end
@@ -35,23 +35,32 @@ module LinkThumbnailer
35
35
  yield if block_given?
36
36
  end
37
37
 
38
- def set_http_headers
38
+ def set_http_headers(headers = {})
39
+ headers.each { |k, v| http.headers[k] = v }
39
40
  http.headers['User-Agent'] = user_agent
40
41
  http.override_headers['Accept-Encoding'] = 'none'
41
42
  end
42
43
 
43
44
  def set_http_options
44
45
  http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE unless ssl_required?
45
- http.open_timeout = http_timeout
46
+ http.open_timeout = http_open_timeout
47
+ http.read_timeout = http_read_timeout
46
48
  http.proxy = :ENV
47
49
  end
48
50
 
49
51
  def perform_request
50
- response = http.request(url)
52
+ response = http.request(url)
53
+ headers = {}
54
+ headers['Cookie'] = response['Set-Cookie'] if response['Set-Cookie'].present?
55
+
51
56
  case response
52
57
  when ::Net::HTTPSuccess then response.body
53
58
  when ::Net::HTTPRedirection
54
- call resolve_relative_url(response['location']), redirect_count + 1
59
+ call(
60
+ resolve_relative_url(response['location']),
61
+ redirect_count + 1,
62
+ headers
63
+ )
55
64
  else
56
65
  response.error!
57
66
  end
@@ -62,7 +71,7 @@ module LinkThumbnailer
62
71
  end
63
72
 
64
73
  def build_absolute_url_for(relative_url)
65
- URI("#{url.scheme}://#{url.host}#{relative_url}")
74
+ ::URI.parse("#{url.scheme}://#{url.host}#{relative_url}")
66
75
  end
67
76
 
68
77
  def redirect_limit
@@ -73,8 +82,12 @@ module LinkThumbnailer
73
82
  config.user_agent
74
83
  end
75
84
 
76
- def http_timeout
77
- config.http_timeout
85
+ def http_open_timeout
86
+ config.http_open_timeout
87
+ end
88
+
89
+ def http_read_timeout
90
+ config.http_read_timeout
78
91
  end
79
92
 
80
93
  def ssl_required?
@@ -1,3 +1,3 @@
1
1
  module LinkThumbnailer
2
- VERSION = '2.5.0'
2
+ VERSION = '2.5.1'
3
3
  end
@@ -7,7 +7,8 @@ describe LinkThumbnailer::Configuration do
7
7
  it { expect(instance.redirect_limit).to eq(3) }
8
8
  it { expect(instance.user_agent).to eq('link_thumbnailer') }
9
9
  it { expect(instance.verify_ssl).to eq(true) }
10
- it { expect(instance.http_timeout).to eq(5) }
10
+ it { expect(instance.http_open_timeout).to eq(5) }
11
+ it { expect(instance.http_read_timeout).to eq(5) }
11
12
  it { expect(instance.blacklist_urls).to_not be_empty }
12
13
  it { expect(instance.attributes).to eq([:title, :images, :description, :videos, :favicon]) }
13
14
  it { expect(instance.graders).to_not be_empty }
@@ -17,6 +18,11 @@ describe LinkThumbnailer::Configuration do
17
18
  it { expect(instance.image_limit).to eq(5) }
18
19
  it { expect(instance.image_stats).to eq(true) }
19
20
 
21
+ describe "#http_timeout" do
22
+ it { expect(instance.method(:http_timeout)).to eq(instance.method(:http_open_timeout)) }
23
+ it { expect(instance.method(:http_timeout=)).to eq(instance.method(:http_open_timeout=)) }
24
+ end
25
+
20
26
  describe '.config' do
21
27
 
22
28
  it { expect(LinkThumbnailer.config).to be_a(described_class) }
@@ -151,17 +151,29 @@ describe LinkThumbnailer::Processor do
151
151
 
152
152
  describe 'open_timeout' do
153
153
 
154
- let(:http_timeout) { 1 }
154
+ let(:http_open_timeout) { 1 }
155
155
 
156
156
  before do
157
- instance.stub(:http_timeout).and_return(http_timeout)
157
+ instance.stub(:http_open_timeout).and_return(http_open_timeout)
158
158
  action
159
159
  end
160
160
 
161
- it { expect(http.open_timeout).to eq(http_timeout) }
161
+ it { expect(http.open_timeout).to eq(http_open_timeout) }
162
162
 
163
163
  end
164
164
 
165
+ describe 'read_timeout' do
166
+
167
+ let(:http_read_timeout) { 1 }
168
+
169
+ before do
170
+ instance.stub(:http_read_timeout).and_return(http_read_timeout)
171
+ action
172
+ end
173
+
174
+ it { expect(http.read_timeout).to eq(http_read_timeout) }
175
+
176
+ end
165
177
  end
166
178
 
167
179
  describe '#perform_request' do
@@ -200,7 +212,7 @@ describe LinkThumbnailer::Processor do
200
212
 
201
213
  it 'calls call method' do
202
214
  expect(instance).to receive(:resolve_relative_url)
203
- expect(instance).to receive(:call).with(new_url, instance.redirect_count + 1)
215
+ expect(instance).to receive(:call).with(new_url, instance.redirect_count + 1, {})
204
216
  action
205
217
  end
206
218
 
@@ -250,16 +262,29 @@ describe LinkThumbnailer::Processor do
250
262
 
251
263
  end
252
264
 
253
- describe '#http_timeout' do
265
+ describe '#http_open_timeout' do
266
+
267
+ let(:http_open_timeout) { 1 }
268
+ let(:action) { instance.send(:http_open_timeout) }
269
+
270
+ before do
271
+ instance.config.http_open_timeout = http_open_timeout
272
+ end
273
+
274
+ it { expect(action).to eq(http_open_timeout) }
275
+
276
+ end
277
+
278
+ describe '#http_read_timeout' do
254
279
 
255
- let(:http_timeout) { 1 }
256
- let(:action) { instance.send(:http_timeout) }
280
+ let(:http_read_timeout) { 1 }
281
+ let(:action) { instance.send(:http_read_timeout) }
257
282
 
258
283
  before do
259
- instance.config.http_timeout = http_timeout
284
+ instance.config.http_read_timeout = http_read_timeout
260
285
  end
261
286
 
262
- it { expect(action).to eq(http_timeout) }
287
+ it { expect(action).to eq(http_read_timeout) }
263
288
 
264
289
  end
265
290
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link_thumbnailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre-Louis Gottfrois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-08 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  version: '0'
231
231
  requirements: []
232
232
  rubyforge_project:
233
- rubygems_version: 2.4.3
233
+ rubygems_version: 2.2.2
234
234
  signing_key:
235
235
  specification_version: 4
236
236
  summary: Ruby gem ranking images from a given URL returning an object containing images