fastimage 1.7.0 → 1.8.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.textile +6 -0
  3. data/lib/fastimage.rb +25 -13
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b171e7bf1f4fd89ec28ce3b4f3ddfb3686a71d00
4
- data.tar.gz: a851e15026cdd61e9e13923b73c73b0a004a4f13
3
+ metadata.gz: 7228e29b8a52ce589113f051bc142a9e55fefe86
4
+ data.tar.gz: 6b50be8521f450dd9da08ab018e9a2467c66e62c
5
5
  SHA512:
6
- metadata.gz: 6f0891068f233455992127dedeea3e11c69cf17c292c08b8ce18aad3e20582921f1f3d7b109c35ad2b70e64b082157525546f3326c7592d6fef5012d75199a94
7
- data.tar.gz: a28dae9ccdd8aa0741e8fb45dc9f8078c10ca3ebecaa872a234e0a7f5c79c2428622e0077d6e9667eb0d39d46b5e79757ee46a230b4c126a61815176ece50cf7
6
+ metadata.gz: 279f60c5b465c44af94619671f803bac088e7b457a41b4b4c203dcbfbf0c0a44a08fd70cafa0740686f00b1b3f01f4efe1f272faac9add9602234aba804be95a
7
+ data.tar.gz: b8bc0f0ed9d6fb0944f5c28121a3f7d17a70f16eeee80bd4fb3a46525cd2153b59df5c959f8817a70cec395d50c5b61e599595d6f706fe9b56f094a139c88bff
@@ -34,6 +34,8 @@ FastImage normally replies will nil if it encounters an error, but you can pass
34
34
 
35
35
  FastImage also provides a reader for the content length header provided in HTTP. This may be useful to assess the file size of an image, but do not rely on it exclusively - it will not be present in chunked responses for instance.
36
36
 
37
+ FastImage accepts additional HTTP headers. This can be used to set a user agent or referrer which some servers require. Pass an :http_header argument to specify headers, e.g., :http_header => {'User-Agent' => 'Fake Browser'}.
38
+
37
39
  h2. Security
38
40
 
39
41
  As of v1.6.7 FastImage no longer uses openuri to open files, but directly calls File.open. But take care to sanitise the strings passed to FastImage; it will try to read from whatever is passed.
@@ -55,6 +57,8 @@ FastImage.size("http://upload.wikimedia.org/wikipedia/commons/b/b4/Mardin_135066
55
57
  => [9545, 6623]
56
58
  FastImage.new("http://stephensykes.com/images/pngimage").content_length
57
59
  => 432
60
+ FastImage.size("http://stephensykes.com/images/ss.com_x.gif", :http_header => {'User-Agent' => 'Fake Browser'})
61
+ => [266, 56]
58
62
  </code></pre>
59
63
 
60
64
  h2. Installation
@@ -67,6 +71,8 @@ h4. Rails
67
71
 
68
72
  Add fastimage to your Gemfile, and bundle.
69
73
 
74
+ bc. gem 'fastimage'
75
+
70
76
  Then you're off - just use @FastImage.size()@ and @FastImage.type()@ in your code as in the examples.
71
77
 
72
78
  h2. Documentation
@@ -24,6 +24,10 @@
24
24
  # This may be useful to assess the file size of an image, but do not rely on it exclusively -
25
25
  # it will not be present in chunked responses for instance.
26
26
  #
27
+ # FastImage accepts additional HTTP headers. This can be used to set a user agent
28
+ # or referrer which some servers require. Pass an :http_header argument to specify headers,
29
+ # e.g., :http_header => {'User-Agent' => 'Fake Browser'}.
30
+ #
27
31
  # === Examples
28
32
  # require 'fastimage'
29
33
  #
@@ -162,10 +166,16 @@ class FastImage
162
166
  end
163
167
 
164
168
  def initialize(uri, options={})
165
- @property = options[:type_only] ? :type : :size
166
- @timeout = options[:timeout] || DefaultTimeout
167
- @proxy_url = options[:proxy]
168
169
  @uri = uri
170
+ @options = {
171
+ :type_only => false,
172
+ :timeout => DefaultTimeout,
173
+ :raise_on_failure => false,
174
+ :proxy => nil,
175
+ :http_header => {}
176
+ }.merge(options)
177
+
178
+ @property = @options[:type_only] ? :type : :size
169
179
 
170
180
  if uri.respond_to?(:read)
171
181
  fetch_using_read(uri)
@@ -185,17 +195,17 @@ class FastImage
185
195
 
186
196
  uri.rewind if uri.respond_to?(:rewind)
187
197
 
188
- raise SizeNotFound if options[:raise_on_failure] && @property == :size && !@size
198
+ raise SizeNotFound if @options[:raise_on_failure] && @property == :size && !@size
189
199
 
190
200
  rescue Timeout::Error, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET,
191
201
  ImageFetchFailure, Net::HTTPBadResponse, EOFError, Errno::ENOENT
192
- raise ImageFetchFailure if options[:raise_on_failure]
202
+ raise ImageFetchFailure if @options[:raise_on_failure]
193
203
  rescue NoMethodError # 1.8.7p248 can raise this due to a net/http bug
194
- raise ImageFetchFailure if options[:raise_on_failure]
204
+ raise ImageFetchFailure if @options[:raise_on_failure]
195
205
  rescue UnknownImageType
196
- raise UnknownImageType if options[:raise_on_failure]
206
+ raise UnknownImageType if @options[:raise_on_failure]
197
207
  rescue CannotParseImage
198
- if options[:raise_on_failure]
208
+ if @options[:raise_on_failure]
199
209
  if @property == :size
200
210
  raise SizeNotFound
201
211
  else
@@ -214,8 +224,10 @@ class FastImage
214
224
  end
215
225
 
216
226
  def fetch_using_http_from_parsed_uri
227
+ http_header = {'Accept-Encoding' => 'identity'}.merge(@options[:http_header])
228
+
217
229
  setup_http
218
- @http.request_get(@parsed_uri.request_uri, 'Accept-Encoding' => 'identity') do |res|
230
+ @http.request_get(@parsed_uri.request_uri, http_header) do |res|
219
231
  if res.is_a?(Net::HTTPRedirection) && @redirect_count < 4
220
232
  @redirect_count += 1
221
233
  begin
@@ -266,8 +278,8 @@ class FastImage
266
278
 
267
279
  def proxy_uri
268
280
  begin
269
- if @proxy_url
270
- proxy = Addressable::URI.parse(@proxy_url)
281
+ if @options[:proxy]
282
+ proxy = Addressable::URI.parse(@options[:proxy])
271
283
  else
272
284
  proxy = ENV['http_proxy'] && ENV['http_proxy'] != "" ? Addressable::URI.parse(ENV['http_proxy']) : nil
273
285
  end
@@ -287,8 +299,8 @@ class FastImage
287
299
  end
288
300
  @http.use_ssl = (@parsed_uri.scheme == "https")
289
301
  @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
290
- @http.open_timeout = @timeout
291
- @http.read_timeout = @timeout
302
+ @http.open_timeout = @options[:timeout]
303
+ @http.read_timeout = @options[:timeout]
292
304
  end
293
305
 
294
306
  def fetch_using_read(readable)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastimage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Sykes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-12 00:00:00.000000000 Z
11
+ date: 2015-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable