imgix 3.4.0 → 4.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8de76cc2340cbfa3ecd0479b9bb421fa163f78c1e8e38011dd5938849665802
4
- data.tar.gz: 10cac9471323181870d48be911b225323ccb2d02583176f45639af5c19d4eddb
3
+ metadata.gz: a91b4da0e3b9063761f986110ff0ab379938986186642e08ec59be0ae5601cad
4
+ data.tar.gz: 61a69f51d3d453480fa9f5acc496b245f65f94d7088a704fe0ee31fc4f4146dc
5
5
  SHA512:
6
- metadata.gz: e2233648d430a37c9ea72d89420f492c50f28f6e341c3cf7fe70eb711983b6a7b12b0cd103b118cd8783c373cb2b27e62d53a8ae6b2f8e93946d0309d7f812e2
7
- data.tar.gz: 85209a1262a7d3fd7a39796c487fe87e6c0f75a5a55213676d91834a1af456d8ff01ecb9882ff38818a9dc24c638a64f5c6171bcc09b4f415f9bc38bfb0a136c
6
+ metadata.gz: ae1e01d77d40bdccf28cadebb0d4a75704f1da9d0d6619c102b0e05bae680f3801675d1674b67b0fb94fb3ed5e1576e386d8c31cda5bcab252a0e997099245ff
7
+ data.tar.gz: b715696707c314d2a9bf047ff32ba579cf12fca5115601cc59d5db88e8407a09012a1783bb194c10a5bcc910726b8c4ca0d81f44c52e4ce109c17563baa7f4bb
@@ -0,0 +1,2 @@
1
+ Style/StringLiterals:
2
+ EnforcedStyle: double_quotes
@@ -2,6 +2,8 @@ dist: trusty
2
2
  language: ruby
3
3
  bundler_args: --without development
4
4
  rvm:
5
+ - 2.7.0
6
+ - 2.6.3
5
7
  - 2.3.0
6
8
  - 2.2.4
7
9
  - 2.1.8
@@ -3,6 +3,11 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [4.0.0](https://github.com/imgix/imgix-rb/compare/3.4.0...4.0.0) - August 26, 2020
7
+
8
+ * deprecate: host-usage, param_helpers, and prefix-1-ary ([#91](https://github.com/imgix/imgix-rb/pull/91))
9
+ * fix: update purge operation api keys ([#93](https://github.com/imgix/imgix-rb/pull/93))
10
+
6
11
  ## [3.4.0](https://github.com/imgix/imgix-rb/compare/3.3.1...3.4.0) - August 12, 2020
7
12
 
8
13
  * fix: deprecate api key versions ([#87](https://github.com/imgix/imgix-rb/pull/87))
data/Gemfile CHANGED
@@ -6,6 +6,6 @@ source 'https://rubygems.org'
6
6
  gemspec
7
7
 
8
8
  gem 'rake'
9
+ gem 'json'
9
10
  gem 'minitest'
10
11
  gem 'webmock'
11
- gem 'addressable'
data/README.md CHANGED
@@ -48,36 +48,13 @@ Initialize a client with a `:domain` and your `:secure_url_token`. By default, H
48
48
 
49
49
  Call `Imgix::Client#path` with the resource path to get an `Imgix::Path` object back. You can then manipulate the path parameters, and call `Imgix#Path#to_url` when you're done.
50
50
 
51
- ``` ruby
51
+ ```rb
52
52
  client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', secure_url_token: 'your-token')
53
53
 
54
54
  client.path('/images/demo.png').to_url(w: 200)
55
55
  #=> https://your-subdomain.imgix.net/images/demo.png?w=200&s=2eadddacaa9bba4b88900d245f03f51e
56
-
57
- # OR
58
- path = client.path('/images/demo.png')
59
- path.width = 200
60
- path.to_url
61
-
62
- # OR
63
- client.path('/images/demo.png').width(200).height(300).to_url
64
-
65
- # Some other tricks
66
- path.defaults.width(300).to_url # Resets parameters
67
- path.rect(x: 0, y: 50, width: 200, height: 300).to_url # Rect helper
68
- ```
69
-
70
- **Deprecation Notice:** Usage of `:host` has been deprecated and will become invalid in the next major release.
71
-
72
- In the previous version, `:host` can be used to specify a domain for an `Imgix::Client` like so:
73
-
74
- ```ruby
75
- Imgix::Client.new(host: 'demo.imgix.net', secure_url_token: 'token')
76
56
  ```
77
57
 
78
- Code using `:host` like the above will continue to work until the next major release. While using `:host` will remain valid until the next major release, its usage will result in a deprecation warning. In order to resolve these deprecation warnings before upgrading to the new release, use `:domain` instead of `:host`.
79
-
80
-
81
58
  ## Srcset Generation
82
59
 
83
60
  The imgix gem allows for generation of custom `srcset` attributes, which can be invoked through `Imgix::Path#to_srcset`. By default, the `srcset` generated will allow for responsive size switching by building a list of image-width mappings.
@@ -218,21 +195,9 @@ https://testing.imgix.net/image.jpg?w=100&dpr=4&q=23 4x,
218
195
  https://testing.imgix.net/image.jpg?w=100&dpr=5&q=20 5x
219
196
  ```
220
197
 
221
- ## Multiple Parameters
222
-
223
- When the imgix api requires multiple parameters you have to use the method rather than an accessor.
224
-
225
- For example to use the noise reduction:
226
-
227
- ``` ruby
228
- path.noise_reduction(50,50)
229
- ```
230
-
231
198
  ## Purge Cache
232
199
 
233
- **Deprecation Notice:** The API keys used in `Imgix::Client#purge` version `3.3.X` have been deprecated. To utilize the updated `Imgix::Client#purge` method in version `4.0.0`, please regenerate your API key at `http://dashboard.imgix.com/api-keys`. Feel free to reach out to our [support line](support@imgix.com) if you have any questions or concerns.
234
-
235
- If you need to remove or update an image on imgix, you can purge it from our cache by initializing a client with your api_key, then calling Imgix::Client#purge with the resource path.
200
+ If you need to remove or update an image on imgix, you can purge it from our cache by initializing a client with your [API key](http://dashboard.imgix.com/api-keys), then calling `Imgix::Client#purge` with the resource path.
236
201
 
237
202
  ```ruby
238
203
  client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', api_key: 'your-key')
@@ -1,30 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/imgix/version'
3
+ require_relative "lib/imgix/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = 'imgix'
6
+ spec.name = "imgix"
7
7
  spec.version = Imgix::VERSION
8
- spec.authors = ['Kelly Sutton', 'Sam Soffes', 'Ryan LeFevre', 'Antony Denyer', 'Paul Straw', 'Sherwin Heydarbeygi']
9
- spec.email = ['kelly@imgix.com', 'sam@soff.es', 'ryan@layervault.com', 'email@antonydenyer.co.uk', 'paul@imgix.com', 'sherwin@imgix.com']
10
- spec.description = 'Easily create and sign imgix URLs.'
11
- spec.summary = 'Official Ruby Gem for easily creating and signing imgix URLs.'
12
- spec.homepage = 'https://github.com/imgix/imgix-rb'
13
- spec.license = 'MIT'
8
+ spec.authors = ["Kelly Sutton", "Sam Soffes", "Ryan LeFevre", "Antony Denyer", "Paul Straw", "Sherwin Heydarbeygi"]
9
+ spec.email = ["kelly@imgix.com", "sam@soff.es", "ryan@layervault.com", "email@antonydenyer.co.uk", "paul@imgix.com", "sherwin@imgix.com"]
10
+ spec.description = "Easily create and sign imgix URLs."
11
+ spec.summary = "Official Ruby Gem for easily creating and signing imgix URLs."
12
+ spec.homepage = "https://github.com/imgix/imgix-rb"
13
+ spec.license = "MIT"
14
14
 
15
15
  spec.metadata = {
16
- 'bug_tracker_uri' => 'https://github.com/imgix/imgix-rb/issues',
17
- 'changelog_uri' => 'https://github.com/imgix/imgix-rb/blob/main/CHANGELOG.md',
18
- 'documentation_uri' => "https://www.rubydoc.info/gems/imgix/#{spec.version}",
19
- 'source_code_uri' => "https://github.com/imgix/imgix-rb/tree/#{spec.version}"
16
+ "bug_tracker_uri" => "https://github.com/imgix/imgix-rb/issues",
17
+ "changelog_uri" => "https://github.com/imgix/imgix-rb/blob/main/CHANGELOG.md",
18
+ "documentation_uri" => "https://www.rubydoc.info/gems/imgix/#{spec.version}",
19
+ "source_code_uri" => "https://github.com/imgix/imgix-rb/tree/#{spec.version}"
20
20
  }
21
21
 
22
- spec.files = `git ls-files`.split($/)
23
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
- spec.require_paths = ['lib']
22
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|.github)/}) }
24
+ end
26
25
 
27
- spec.required_ruby_version = '>= 1.9.0'
28
- spec.add_dependency 'addressable'
29
- spec.add_development_dependency 'webmock'
26
+ spec.require_paths = ["lib"]
27
+ spec.required_ruby_version = ">= 1.9.0"
30
28
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'imgix/version'
4
- require 'imgix/client'
5
- require 'imgix/path'
3
+ require "imgix/version"
4
+ require "imgix/client"
5
+ require "imgix/path"
6
6
 
7
7
  module Imgix
8
8
  # regex pattern used to determine if a domain is valid
@@ -22,7 +22,7 @@ module Imgix
22
22
  increment_percentage = tolerance || DEFAULT_WIDTH_TOLERANCE
23
23
 
24
24
  unless increment_percentage.is_a?(Numeric) && increment_percentage > 0
25
- width_increment_error = 'error: `width_tolerance` must be a positive `Numeric` value'
25
+ width_increment_error = "error: `width_tolerance` must be a positive `Numeric` value"
26
26
  raise ArgumentError, width_increment_error
27
27
  end
28
28
 
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'digest'
4
- require 'addressable/uri'
5
- require 'net/http'
6
- require 'uri'
3
+ require "digest"
4
+ require "net/http"
5
+ require "uri"
6
+ require "json"
7
7
 
8
8
  module Imgix
9
9
  class Client
@@ -11,87 +11,96 @@ module Imgix
11
11
 
12
12
  def initialize(options = {})
13
13
  options = DEFAULTS.merge(options)
14
- host, domain = options[:host], options[:domain]
15
-
16
- host_deprecated = "Warning: The identifier `host' has been deprecated and " \
17
- "will\nappear as `domain' in the next major version, e.g. " \
18
- "`@host'\nbecomes `@domain', `options[:host]' becomes " \
19
- "`options[:domain]'.\n"
20
-
21
- if host
22
- warn host_deprecated
23
- @host = host
24
- elsif domain
25
- @host = domain
26
- else
27
- @host = host
28
- end
14
+ @domain = options[:domain]
29
15
 
30
- validate_host!
16
+ validate_domain!
31
17
 
32
18
  @secure_url_token = options[:secure_url_token]
33
19
  @api_key = options[:api_key]
34
20
  @use_https = options[:use_https]
35
21
  @include_library_param = options.fetch(:include_library_param, true)
36
- @library = options.fetch(:library_param, 'rb')
22
+ @library = options.fetch(:library_param, "rb")
37
23
  @version = options.fetch(:library_version, Imgix::VERSION)
38
24
  end
39
25
 
40
26
  def path(path)
41
- p = Path.new(new_prefix, @secure_url_token, path)
27
+ p = Path.new(prefix, @secure_url_token, path)
42
28
  p.ixlib("#{@library}-#{@version}") if @include_library_param
43
29
  p
44
30
  end
45
31
 
46
32
  def purge(path)
47
- api_key_deprecated = \
48
- "Warning: Your `api_key` will no longer work after upgrading to\n" \
49
- "imgix-rb version >= 4.0.0.\n"
50
- warn api_key_deprecated
51
-
52
- api_key_error = 'A valid api key is required to send purge requests'
33
+ api_key_error = "A valid API key is required to send purge requests"
53
34
  raise api_key_error if @api_key.nil?
54
35
 
55
- url = new_prefix + path
56
- uri = URI.parse('https://api.imgix.com/v2/image/purger')
57
-
58
- user_agent = { 'User-Agent' => "imgix #{@library}-#{@version}" }
36
+ endpoint = URI.parse("https://api.imgix.com/api/v1/purge")
37
+ # Ensure the path has been prefixed with '/'.
38
+ path = path.start_with?("/") ? path : "/#{path}"
39
+ url = prefix + path
59
40
 
60
- req = Net::HTTP::Post.new(uri.path, user_agent)
61
- req.basic_auth @api_key, ''
62
- req.set_form_data({ url: url })
41
+ req = create_request(endpoint, url, :json_data_from)
63
42
 
64
- sock = Net::HTTP.new(uri.host, uri.port)
43
+ sock = Net::HTTP.new(endpoint.host, endpoint.port)
65
44
  sock.use_ssl = true
66
- res = sock.start { |http| http.request(req) }
67
-
68
- res
45
+ sock.start { |http| http.request(req) }
69
46
  end
70
47
 
71
- def prefix(path)
72
- msg = "Warning: `Client::prefix' will take zero arguments " \
73
- "in the next major version.\n"
74
- warn msg
75
- new_prefix
48
+ def prefix
49
+ "#{@use_https ? 'https' : 'http'}://#{@domain}"
76
50
  end
77
51
 
78
- def new_prefix
79
- "#{@use_https ? 'https' : 'http'}://#{@host}"
52
+ private
53
+
54
+ # Create a request object by specifying it's endpoint, resource, and
55
+ # an optional data_fmt.
56
+ #
57
+ # `endpoint` must be a valid URI object
58
+ # `resource` must be a valid URL designating the resource to be purged
59
+ # `data_fmt` must be a valid method or Proc object
60
+ #
61
+ # Specify a `data_fmt` method when a resource (URL) requires
62
+ # additional formatting before being included in the request body.
63
+ # By default, the data format is specified by the `json_data_from`
64
+ # method.
65
+ def create_request(endpoint, resource, data_fmt = :json_data_from)
66
+ req = Net::HTTP::Post.new(endpoint.path)
67
+ req["Content-Type"] = "application/vnd.api+json"
68
+ req["Authorization"] = "Bearer #{@api_key}"
69
+ req["User-Agent"] = "imgix #{@library}-#{@version}"
70
+
71
+ if data_fmt.is_a?(Proc)
72
+ req.body = data_fmt.call(resource)
73
+ elsif data_fmt.is_a?(Symbol)
74
+ req.body = send(data_fmt, resource)
75
+ else
76
+ fmt_arg_error = "`fmt' is required to be of class Symbol or " \
77
+ "Proc but was found to be\n\s\sof class #{data_fmt.class}\n"
78
+ raise ArgumentError, fmt_arg_error
79
+ end
80
+
81
+ req
80
82
  end
81
83
 
82
- private
84
+ def json_data_from(url)
85
+ {
86
+ data: {
87
+ attributes: {
88
+ url: url
89
+ },
90
+ type: "purges"
91
+ }
92
+ }.to_json
93
+ end
83
94
 
84
- def validate_host!
85
- host_error = 'The :host option must be specified'
86
- raise ArgumentError, host_error if @host.nil?
95
+ def validate_domain!
96
+ domain_error = "The :domain option must be specified"
97
+ raise ArgumentError, domain_error if @domain.nil?
87
98
 
88
- domain_error = 'Domains must be passed in as fully-qualified'\
89
- 'domain names and should not include a protocol'\
99
+ domain_error = "Domains must be passed in as fully-qualified"\
100
+ "domain names and should not include a protocol"\
90
101
  'or any path element, i.e. "example.imgix.net"'\
91
102
 
92
- if @host.match(DOMAIN_REGEX).nil?
93
- raise ArgumentError, domain_error
94
- end
103
+ raise ArgumentError, domain_error if @domain.match(DOMAIN_REGEX).nil?
95
104
  end
96
105
  end
97
106
  end
@@ -1,44 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'base64'
4
- require 'cgi/util'
5
- require 'erb'
6
- require 'imgix/param_helpers'
3
+ require "base64"
4
+ require "cgi/util"
5
+ require "erb"
7
6
 
8
7
  module Imgix
9
8
  class Path
10
- include ParamHelpers
11
9
 
12
- ALIASES = {
13
- width: :w,
14
- height: :h,
15
- rotation: :rot,
16
- noise_reduction: :nr,
17
- sharpness: :sharp,
18
- exposure: :exp,
19
- vibrance: :vib,
20
- saturation: :sat,
21
- brightness: :bri,
22
- contrast: :con,
23
- highlight: :high,
24
- shadow: :shad,
25
- gamma: :gam,
26
- pixelate: :px,
27
- halftone: :htn,
28
- watermark: :mark,
29
- text: :txt,
30
- format: :fm,
31
- quality: :q
32
- }.freeze
33
-
34
- def initialize(prefix, secure_url_token, path = '/')
10
+ def initialize(prefix, secure_url_token, path = "/")
35
11
  @prefix = prefix
36
12
  @secure_url_token = secure_url_token
37
13
  @path = path
38
14
  @options = {}
39
15
 
40
16
  @path = CGI.escape(@path) if /^https?/ =~ @path
41
- @path = "/#{@path}" if @path[0] != '/'
17
+ @path = "/#{@path}" if @path[0] != "/"
42
18
  @target_widths = TARGET_WIDTHS.call(DEFAULT_WIDTH_TOLERANCE, MIN_WIDTH, MAX_WIDTH)
43
19
  end
44
20
 
@@ -49,7 +25,7 @@ module Imgix
49
25
  url = @prefix + path_and_params
50
26
 
51
27
  if @secure_url_token
52
- url += (has_query? ? '&' : '?') + "s=#{signature}"
28
+ url += (has_query? ? "&" : "?") + "s=#{signature}"
53
29
  end
54
30
 
55
31
  @options = prev_options
@@ -61,53 +37,97 @@ module Imgix
61
37
  self
62
38
  end
63
39
 
40
+ def ixlib(lib_version)
41
+ @options[:ixlib] = lib_version
42
+ end
43
+
44
+ def ixlib=(lib_version)
45
+ @options[:ixlib] = lib_version
46
+ end
47
+
48
+ def to_srcset(options: {}, **params)
49
+ prev_options = @options.dup
50
+ @options.merge!(params)
51
+
52
+ width = @options[:w]
53
+ height = @options[:h]
54
+ aspect_ratio = @options[:ar]
55
+
56
+ srcset = if width || (height && aspect_ratio)
57
+ build_dpr_srcset(options: options, params: @options)
58
+ else
59
+ build_srcset_pairs(options: options, params: @options)
60
+ end
61
+
62
+ @options = prev_options
63
+ srcset
64
+ end
65
+
66
+ ALIASES = {
67
+ width: :w,
68
+ height: :h,
69
+ rotation: :rot,
70
+ noise_reduction: :nr,
71
+ sharpness: :sharp,
72
+ exposure: :exp,
73
+ vibrance: :vib,
74
+ saturation: :sat,
75
+ brightness: :bri,
76
+ contrast: :con,
77
+ highlight: :high,
78
+ shadow: :shad,
79
+ gamma: :gam,
80
+ pixelate: :px,
81
+ halftone: :htn,
82
+ watermark: :mark,
83
+ text: :txt,
84
+ format: :fm,
85
+ quality: :q,
86
+ fill_color: :fillcolor
87
+ }.freeze
88
+
89
+ # Define query parameters on a Path (via method_missing).
90
+ # Normally, when overriding method_missing, it is a best practice
91
+ # to fall back to super, but this method works differently.
92
+ #
93
+ # method_missing intercepts messages sent to objects of this class
94
+ # and acts as a getter, setter, and deleter. If there are no args,
95
+ # e.g. `path.width`, then this method acts like a getter.
96
+ #
97
+ # Likewise, if the first argument is nil and the method name exists
98
+ # as a key in @options, e.g. `path.param_name = nil`, then this
99
+ # method acts like a deleter and the `param_name` is removed from
100
+ # the list of @options.
101
+ #
102
+ # Finally, in _all_ other cases, the `method` name is used as the
103
+ # `key` and the `*args` are used as the value.
64
104
  def method_missing(method, *args, &block)
65
105
  key = method.to_s.gsub('=', '')
66
- if args.length == 0
106
+
107
+ if args.length == 0 # Get, or
67
108
  return @options[key]
68
- elsif args.first.nil? && @options.has_key?(key)
109
+ elsif args.first.nil? && @options.has_key?(key) # Delete, or
69
110
  @options.delete(key) and return self
70
111
  end
71
112
 
72
- @options[key] = args.join(',')
113
+ @options[key] = args.join(',') # Set the option.
73
114
  self
74
115
  end
75
116
 
117
+ # Use ALIASES to define setters for a subset of imgix parameters.
118
+ # E.g. `path.width(100)` would result in `send(:w, [100])`.
76
119
  ALIASES.each do |from, to|
77
120
  define_method from do |*args|
78
- warn "Warning: `Path.#{from}' has been deprecated and " \
79
- "will be removed in the next major version (along " \
80
- "with all parameter `ALIASES`).\n"
81
121
  self.send(to, *args)
82
122
  end
83
123
 
124
+ # E.g. `path.width = 100` would result in `send(":w=", [100])`.
84
125
  define_method "#{from}=" do |*args|
85
- warn "Warning: `Path.#{from}=' has been deprecated and " \
86
- "will be removed in the next major version (along " \
87
- "with all parameter `ALIASES`).\n"
88
126
  self.send("#{to}=", *args)
89
127
  return self
90
128
  end
91
129
  end
92
130
 
93
- def to_srcset(options: {}, **params)
94
- prev_options = @options.dup
95
- @options.merge!(params)
96
-
97
- width = @options[:w]
98
- height = @options[:h]
99
- aspect_ratio = @options[:ar]
100
-
101
- srcset = if width || (height && aspect_ratio)
102
- build_dpr_srcset(options: options, params: @options)
103
- else
104
- build_srcset_pairs(options: options, params: @options)
105
- end
106
-
107
- @options = prev_options
108
- srcset
109
- end
110
-
111
131
  private
112
132
 
113
133
  def signature
@@ -127,15 +147,15 @@ module Imgix
127
147
  else
128
148
  escaped_key << "=" << ERB::Util.url_encode(val.to_s)
129
149
  end
130
- end.join('&')
150
+ end.join("&")
131
151
  end
132
152
 
133
153
  def has_query?
134
- query.length > 0
154
+ !query.empty?
135
155
  end
136
156
 
137
157
  def build_srcset_pairs(options:, params:)
138
- srcset = ''
158
+ srcset = ""
139
159
 
140
160
  widths = options[:widths] || []
141
161
  width_tolerance = options[:width_tolerance] || DEFAULT_WIDTH_TOLERANCE
@@ -162,7 +182,7 @@ module Imgix
162
182
  end
163
183
 
164
184
  def build_dpr_srcset(options:, params:)
165
- srcset = ''
185
+ srcset = ""
166
186
 
167
187
  disable_variable_quality = options[:disable_variable_quality] || false
168
188
  validate_variable_qualities!(disable_variable_quality)
@@ -173,9 +193,7 @@ module Imgix
173
193
  target_ratios.each do |ratio|
174
194
  params[:dpr] = ratio
175
195
 
176
- unless disable_variable_quality
177
- params[:q] = quality || DPR_QUALITY[ratio]
178
- end
196
+ params[:q] = quality || DPR_QUALITY[ratio] unless disable_variable_quality
179
197
 
180
198
  srcset += "#{to_url(params)} #{ratio}x,\n"
181
199
  end
@@ -184,15 +202,13 @@ module Imgix
184
202
  end
185
203
 
186
204
  def validate_width_tolerance!(width_tolerance)
187
- width_increment_error = 'error: `width_tolerance` must be a positive `Numeric` value'
205
+ width_increment_error = "error: `width_tolerance` must be a positive `Numeric` value"
188
206
 
189
- if !width_tolerance.is_a?(Numeric) || width_tolerance <= 0
190
- raise ArgumentError, width_increment_error
191
- end
207
+ raise ArgumentError, width_increment_error if !width_tolerance.is_a?(Numeric) || width_tolerance <= 0
192
208
  end
193
209
 
194
210
  def validate_widths!(widths)
195
- widths_error = 'error: `widths` must be an array of positive `Numeric` values'
211
+ widths_error = "error: `widths` must be an array of positive `Numeric` values"
196
212
  raise ArgumentError, widths_error unless widths.is_a?(Array)
197
213
 
198
214
  all_positive_integers = widths.all? { |i| i.is_a?(Integer) && i > 0 }
@@ -200,18 +216,14 @@ module Imgix
200
216
  end
201
217
 
202
218
  def validate_range!(min_srcset, max_srcset)
203
- range_numeric_error = 'error: `min_width` and `max_width` must be positive `Numeric` values'
204
- unless min_srcset.is_a?(Numeric) && max_srcset.is_a?(Numeric)
205
- raise ArgumentError, range_numeric_error
206
- end
219
+ range_numeric_error = "error: `min_width` and `max_width` must be positive `Numeric` values"
220
+ raise ArgumentError, range_numeric_error unless min_srcset.is_a?(Numeric) && max_srcset.is_a?(Numeric)
207
221
 
208
- unless min_srcset > 0 && max_srcset > 0
209
- raise ArgumentError, range_numeric_error
210
- end
222
+ raise ArgumentError, range_numeric_error unless min_srcset > 0 && max_srcset > 0
211
223
  end
212
224
 
213
225
  def validate_variable_qualities!(disable_quality)
214
- disable_quality_error = 'error: `disable_quality` must be a Boolean value'
226
+ disable_quality_error = "error: `disable_quality` must be a Boolean value"
215
227
  unless disable_quality.is_a?(TrueClass) || disable_quality.is_a?(FalseClass)
216
228
  raise ArgumentError, disable_quality_error
217
229
  end