image_info 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bc41310509a4e3d07a8e9a671875674e532f5e99
4
- data.tar.gz: 8323109506dd885913623e9505dd5c51bddb0e51
2
+ SHA256:
3
+ metadata.gz: c283f102f87200ff3e0e3fb823551aa689599576390bab279c63c305868b3ffd
4
+ data.tar.gz: 5b831b50c1977baeac9919d107d29dff41be41961a3a4ad77ecff7e7906e2b8b
5
5
  SHA512:
6
- metadata.gz: 46b4ddbece7f0a43cda5731cfddc80479112faec2cf7e1cdcdfb83a27f43092cd45634d2581eff2816f2bc85f78db6490e900745edef5d2ed1ab51f1e77d2320
7
- data.tar.gz: 1551bf0913c31c88830b387b10c603c3ef0858add6f0a213f1222cc1fb6185f14f05b7c0b79911e2d5e197801e4e5f903b83ea0130820adb51584f686357899c
6
+ metadata.gz: c1c8acb5dfd7c70902bac0af3a64d9647552318fa11f47ec8004814bea68f0aa89ab66ee7876177e161cf7153bde257cae5a9f8553b9d273b4d3e34f2642c6a6
7
+ data.tar.gz: 269f7d92862fc6b53c53741a9c756ccc622c47c7b04740fb37c2472474bc8cc369dacfdf409fe644f4d57809f6e265cc639ddf67d066bc029bd34f69faabf3b0
@@ -0,0 +1 @@
1
+ 2.6.6
@@ -1,7 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.2.0
7
- before_install: gem install bundler -v 1.10.4
3
+ - 2.5
4
+ - 2.6
@@ -1,25 +1,56 @@
1
- * 1.1.2
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [1.2.0] - 2020-07-24
10
+ ### Added
11
+
12
+ - Allows to set a maximum image size in bytes to fetch. The HTTP connection
13
+ will be aborted as soon as the max size is reached. Setting a value to
14
+ `zero` or a negative number will deactivate this feature. Default to `-1` not
15
+ to break retro compatibility.
16
+
17
+ ### Fixed
18
+
19
+ - Partial image loading was sometime yielding empty results. Image size and
20
+ type was not set properly in this case.
21
+ - `max_concurrency` option was not properly set by default.
22
+ - Locks dependencies to their major version.
23
+ - `typhoeus` is now locked to `~> 1.0`
24
+ - `image_size` is now locked to `~> 2.0`
25
+
26
+ ## [1.1.2] - 2015-08-12
27
+ ### Fixed
2
28
 
3
29
  - Fix issues with schemaless uri (ex: `//foo.com`)
4
30
 
5
- * 1.1.1
31
+ ## [1.1.1] - 2015-08-11
32
+ ### Adds
6
33
 
7
- Now only fetch partial image data to compute its size and type.
34
+ - Adds image partial loading and abort the connection as soon as image
35
+ size and type has been found.
8
36
 
9
- Thanks to [vdaubry](https://github.com/vdaubry) the gem now uses typhoeus
10
- stream capability to fetch images and get its size and type, aborting the
11
- request if necessary. Make sure to use typhoeus `>= 0.7.3` in order to benefit
12
- from this update since there was an issue with previous typhoeus version when
13
- aborting ongoing requests.
37
+ ### Fixed
14
38
 
15
- Fixes [#1](https://github.com/gottfrois/image_info/issues/1)
39
+ - Fixes URL encoding issues.
16
40
 
17
- Also fix URL encoding issues.
41
+ ## [1.1.0] - 2015-07-19
42
+ ### Adds
18
43
 
19
- * 1.1.0
44
+ - Introduces `width` and `height` method.
20
45
 
21
- - Introduces `width` and `height` method. Fixes [https://github.com/gottfrois/image_info/issues/2](https://github.com/gottfrois/image_info/issues/2)
46
+ ## [1.0.0] - 2015-07-19
47
+ ### Adds
22
48
 
23
- * 1.0.0
49
+ - First release 🎆
24
50
 
25
- - First release
51
+ [Unreleased]: https://github.com/gottfrois/image_info/compare/v1.2.0...HEAD
52
+ [1.2.0]: https://github.com/gottfrois/image_info/compare/v1.1.2...v1.2.0
53
+ [1.1.2]: https://github.com/gottfrois/image_info/compare/v1.1.1...v1.1.2
54
+ [1.1.1]: https://github.com/gottfrois/image_info/compare/v1.1.0...v1.1.1
55
+ [1.1.0]: https://github.com/gottfrois/image_info/compare/v1.0.0...v1.1.0
56
+ [1.0.0]: https://github.com/gottfrois/image_info/releases/tag/v1.0.0
data/README.md CHANGED
@@ -60,6 +60,8 @@ images.map &:type
60
60
 
61
61
  ## Configuration
62
62
 
63
+ ### Concurrency
64
+
63
65
  You can configure the `max_concurrency` value (20 by default) used to fetch images in parallel:
64
66
 
65
67
  ```ruby
@@ -74,6 +76,26 @@ or at runtime:
74
76
  ImageInfo.from('http://foo.com/foo.png', max_concurrency: 10)
75
77
  ```
76
78
 
79
+ ### Image Size Limit
80
+
81
+ You can set a `max_image_size` for which the connection will be aborted
82
+ if reached.
83
+
84
+ ```ruby
85
+ ImageInfo.configure do |config|
86
+ config.max_image_size = 5 * 1024 * 1024 # 5Mb
87
+ end
88
+ ```
89
+
90
+ or at runtime:
91
+
92
+ ```ruby
93
+ ImageInfo.from('http://foo.com/foo.png', max_image_size: -1)
94
+ ```
95
+
96
+ Setting the value to zero or a negative number simply disable the limit.
97
+ By default it is set to `-1`.
98
+
77
99
  ## Development
78
100
 
79
101
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -88,4 +110,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/gottfr
88
110
  ## License
89
111
 
90
112
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
91
-
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "typhoeus"
23
- spec.add_dependency "image_size"
22
+ spec.add_dependency "typhoeus", "~> 1.0"
23
+ spec.add_dependency "image_size", "~> 2.0"
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.10"
26
26
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,10 +1,11 @@
1
1
  module ImageInfo
2
2
  class Configuration
3
3
 
4
- attr_accessor :max_concurrency
4
+ attr_accessor :max_concurrency, :max_image_size
5
5
 
6
6
  def initialize
7
7
  @max_concurrency = 20
8
+ @max_image_size = -1
8
9
  end
9
10
 
10
11
  end
@@ -1,4 +1,5 @@
1
1
  require 'image_size'
2
+ require 'image_info/null_parser'
2
3
 
3
4
  module ImageInfo
4
5
  class Parser
@@ -25,13 +26,12 @@ module ImageInfo
25
26
  def set_image_type
26
27
  image.type = parser.format
27
28
  end
28
-
29
- private
30
-
29
+
31
30
  def parser
32
31
  @parser ||= ::ImageSize.new(data)
33
- rescue ImageSize::FormatError
32
+ rescue ::ImageSize::FormatError, NoMethodError
34
33
  @parser ||= ::ImageInfo::NullParser.new
35
34
  end
35
+
36
36
  end
37
37
  end
@@ -2,7 +2,6 @@ require 'typhoeus'
2
2
 
3
3
  require 'image_info/image'
4
4
  require 'image_info/parser'
5
- require 'image_info/null_parser'
6
5
  require 'image_info/request_handler'
7
6
 
8
7
  module ImageInfo
@@ -10,7 +9,7 @@ module ImageInfo
10
9
 
11
10
  attr_reader :images, :options
12
11
 
13
- def initialize(urls, options = {})
12
+ def initialize(urls, options = { max_concurrency: ::ImageInfo.config.max_concurrency })
14
13
  @images = Array(urls).map { |uri| ::ImageInfo::Image.new(uri) }.keep_if(&:valid?)
15
14
  @options = options
16
15
  end
@@ -25,7 +24,7 @@ module ImageInfo
25
24
  private
26
25
 
27
26
  def hydra
28
- @hydra ||= ::Typhoeus::Hydra.new(max_concurrency: options[:max_concurrency])
27
+ @hydra ||= ::Typhoeus::Hydra.new(max_concurrency: options[:max_concurrency].to_i)
29
28
  end
30
29
 
31
30
  end
@@ -1,3 +1,5 @@
1
+ require 'stringio'
2
+
1
3
  module ImageInfo
2
4
  class RequestHandler
3
5
 
@@ -12,15 +14,25 @@ module ImageInfo
12
14
  ::Typhoeus::Request.new(image.uri.to_s, followlocation: true, accept_encoding: :gzip).tap do |request|
13
15
  request.on_body do |chunk|
14
16
  buffer.write(chunk)
15
- :abort if found_image_info?(buffer)
17
+ buffer.rewind
18
+ :abort if max_image_size_reached? || found_image_info?
16
19
  end
17
20
  end
18
21
  end
19
22
 
20
23
  private
21
24
 
22
- def found_image_info?(chunk)
23
- ::ImageInfo::Parser.new(image, chunk).call
25
+ def found_image_info?
26
+ ::ImageInfo::Parser.new(image, buffer).call
27
+ end
28
+
29
+ def max_image_size_reached?
30
+ return false if max_image_size <= 0
31
+ buffer.size > max_image_size
32
+ end
33
+
34
+ def max_image_size
35
+ ::ImageInfo.config.max_image_size
24
36
  end
25
37
  end
26
38
  end
@@ -1,3 +1,3 @@
1
1
  module ImageInfo
2
- VERSION = '1.1.2'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_info
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre-Louis Gottfrois
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2020-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: image_size
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: webmock
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  description: ImageInfo finds the size and type of a single or multiple images from
@@ -102,9 +102,10 @@ executables: []
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
- - .gitignore
106
- - .rspec
107
- - .travis.yml
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".ruby-version"
108
+ - ".travis.yml"
108
109
  - CHANGELOG.md
109
110
  - Gemfile
110
111
  - LICENSE.txt
@@ -126,24 +127,23 @@ homepage: https://github.com/gottfrois/image_info
126
127
  licenses:
127
128
  - MIT
128
129
  metadata: {}
129
- post_install_message:
130
+ post_install_message:
130
131
  rdoc_options: []
131
132
  require_paths:
132
133
  - lib
133
134
  required_ruby_version: !ruby/object:Gem::Requirement
134
135
  requirements:
135
- - - '>='
136
+ - - ">="
136
137
  - !ruby/object:Gem::Version
137
138
  version: '0'
138
139
  required_rubygems_version: !ruby/object:Gem::Requirement
139
140
  requirements:
140
- - - '>='
141
+ - - ">="
141
142
  - !ruby/object:Gem::Version
142
143
  version: '0'
143
144
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.4.6
146
- signing_key:
145
+ rubygems_version: 3.0.8
146
+ signing_key:
147
147
  specification_version: 4
148
148
  summary: ImageInfo finds the size and type of a single or multiple images from the
149
149
  web by fetching as little as needed.