fastimage 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.textile +6 -0
- data/lib/fastimage.rb +25 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7228e29b8a52ce589113f051bc142a9e55fefe86
|
4
|
+
data.tar.gz: 6b50be8521f450dd9da08ab018e9a2467c66e62c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 279f60c5b465c44af94619671f803bac088e7b457a41b4b4c203dcbfbf0c0a44a08fd70cafa0740686f00b1b3f01f4efe1f272faac9add9602234aba804be95a
|
7
|
+
data.tar.gz: b8bc0f0ed9d6fb0944f5c28121a3f7d17a70f16eeee80bd4fb3a46525cd2153b59df5c959f8817a70cec395d50c5b61e599595d6f706fe9b56f094a139c88bff
|
data/README.textile
CHANGED
@@ -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
|
data/lib/fastimage.rb
CHANGED
@@ -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,
|
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 @
|
270
|
-
proxy = Addressable::URI.parse(@
|
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.
|
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-
|
11
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|