imgix 3.3.1 → 4.0.3

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: 1af83e026e72b6ce6bfcfdf1169add23c12cbec68a7d7fbe03243150c832b34b
4
- data.tar.gz: 3a7e0d57c3f65b75327e226918370771f7bb579284228de9e6de77d694d4fadc
3
+ metadata.gz: 6ab4780027f2b1f8835f0fe5ad177afbb1ee954f95bd4fa76e92986bb8a31264
4
+ data.tar.gz: 5c1c49734258dd0c3c99cffa3564d99e140cfede4a6a117a6d3433902a019413
5
5
  SHA512:
6
- metadata.gz: 0a68e202aaa183a4974d9c15a20e97f404269879da403cb7a949c04dd5ba3053e4b4802aa2a7006826f357a4268f87fd20d14971034e598d792e18a5cd2b322d
7
- data.tar.gz: e1f068f01a5cd8cac1b959bd16f9e2d586a72278a6b4be844a822c74a41c7b7e110471c36a4bf156b6ec6c17cbcc5e425ebdf40373b2424ce3360bd1ada391d2
6
+ metadata.gz: a12613119005a7e9cf84d054b25c459aa6e6cc34e3e9001c11b55e72c3f76ca1566bc4e6737e1891e1445513ae1eb0b8cc247497312937a1a875740b7064afbf
7
+ data.tar.gz: e9de151e47fa1c555d2199d21539dcb52c27b5879dcb8ece7c822fc96c81f4a7e204a47d73602e349d38728defc38256759d1fb8ad0267369be46d168e0e770e
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Style/StringLiterals:
2
+ EnforcedStyle: double_quotes
data/.travis.yml CHANGED
@@ -2,9 +2,8 @@ dist: trusty
2
2
  language: ruby
3
3
  bundler_args: --without development
4
4
  rvm:
5
- - 2.3.0
6
- - 2.2.4
7
- - 2.1.8
5
+ - 2.7
6
+ - 2.6
8
7
  - jruby-9.2.11.0
9
8
 
10
9
  jobs:
@@ -13,9 +12,8 @@ jobs:
13
12
 
14
13
  include:
15
14
  - name: Rubinius
16
- rvm: rbx-3.107
15
+ rvm: rbx-3
17
16
  dist: trusty
18
17
 
19
18
  allow_failures:
20
19
  - name: Rubinius
21
-
@@ -0,0 +1,29 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "rake: test",
6
+ "type": "shell",
7
+ "group":{
8
+ "kind": "test",
9
+ "isDefault": true
10
+ },
11
+ "problemMatcher": {
12
+ "owner": "ruby",
13
+ "fileLocation": ["relative", "${workspaceFolder}"],
14
+ "pattern": [
15
+ {
16
+ "regexp": "^([^:]+: .+)",
17
+ "message": 1
18
+ },
19
+ {
20
+ "regexp": "^ ([^:]+):(\\d+)",
21
+ "file": 1,
22
+ "line": 2
23
+ }
24
+ ]
25
+ },
26
+ "command": "bundle exec rake test"
27
+ }
28
+ ]
29
+ }
data/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
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.3](https://github.com/imgix/imgix-rb/compare/4.0.2...4.0.3) - May 05, 2021
7
+
8
+ * fix: encode web proxy paths using url_encode ([#111](https://github.com/imgix/imgix-rb/pull/111))
9
+
10
+ ## [4.0.2](https://github.com/imgix/imgix-rb/compare/4.0.1...4.0.2) - April 22, 2021
11
+
12
+ * fix(path): correctly encode reserved chars ([#108](https://github.com/imgix/imgix-rb/pull/108))
13
+ * test: add benchmark script for Imgix::Path#to_url ([4b00c4b](https://github.com/imgix/imgix-rb/commit/4b00c4b6d27b87787464438b36954b9c166096eb))
14
+ * perf: avoid calculating path_and_params twice ([#109](https://github.com/imgix/imgix-rb/pull/109))
15
+ * ci: use major version only for Rubinius 3 ([921e41a](https://github.com/imgix/imgix-rb/commit/921e41ac7789a55c78b42d60ac99cc0b641a69fd))
16
+ * ci: use optimistic versioning ([#107](https://github.com/imgix/imgix-rb/pull/107))
17
+ * ci: remove support for ruby version <2.5 ([#106](https://github.com/imgix/imgix-rb/pull/106))
18
+ * perf: precompute DEFAULT_TARGET_WIDTHS to avoid repeating on Path.new ([#105](https://github.com/imgix/imgix-rb/pull/105))
19
+
20
+ ## [4.0.1](https://github.com/imgix/imgix-rb/compare/4.0.0...4.0.1) - March 24, 2021
21
+
22
+ * fix: dpr srcset when only h param ([#101](https://github.com/imgix/imgix-rb/pull/101))
23
+ * docs: update travis badge to point to travis-ci.com ([#99](https://github.com/imgix/imgix-rb/pull/99))
24
+ * docs: fixed typo w/ srcset min/max widths ([#97](https://github.com/imgix/imgix-rb/pull/97))
25
+
26
+ ## [4.0.0](https://github.com/imgix/imgix-rb/compare/3.4.0...4.0.0) - August 26, 2020
27
+
28
+ * deprecate: host-usage, param_helpers, and prefix-1-ary ([#91](https://github.com/imgix/imgix-rb/pull/91))
29
+ * fix: update purge operation api keys ([#93](https://github.com/imgix/imgix-rb/pull/93))
30
+
31
+ ## [3.4.0](https://github.com/imgix/imgix-rb/compare/3.3.1...3.4.0) - August 12, 2020
32
+
33
+ * fix: deprecate api key versions ([#87](https://github.com/imgix/imgix-rb/pull/87))
34
+ * docs(readme): deprecation notice for pre-4.0 api keys ([#88](https://github.com/imgix/imgix-rb/pull/88))
35
+
6
36
  ## [3.3.1](https://github.com/imgix/imgix-rb/compare/3.3.0...3.3.1) - July 27, 2020
7
37
 
8
38
  * fix: ensure host is initialized ([#82](https://github.com/imgix/imgix-rb/pull/82))
data/Gemfile CHANGED
@@ -1,9 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in imgix.gemspec
4
6
  gemspec
5
7
 
6
8
  gem 'rake'
9
+ gem 'json'
7
10
  gem 'minitest'
11
+ gem 'minitest-reporters'
8
12
  gem 'webmock'
9
- gem 'addressable'
13
+ gem 'benchmark-ips'
14
+
data/README.md CHANGED
@@ -4,9 +4,10 @@
4
4
  `imgix-rb` is a client library for generating image URLs with [imgix](https://www.imgix.com/). It is tested under Ruby versions `2.3.0`, `2.2.4`, `2.1.8`, `jruby-9.2.11.0`, and `rbx-3.107`.
5
5
 
6
6
  [![Gem Version](https://img.shields.io/gem/v/imgix.svg)](https://rubygems.org/gems/imgix)
7
- [![Build Status](https://travis-ci.org/imgix/imgix-rb.svg?branch=main)](https://travis-ci.org/imgix/imgix-rb)
7
+ [![Build Status](https://travis-ci.com/imgix/imgix-rb.svg?branch=main)](https://travis-ci.com/imgix/imgix-rb)
8
8
  ![Downloads](https://img.shields.io/gem/dt/imgix)
9
9
  [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/imgix/imgix-rb/blob/main/LICENSE)
10
+ [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fimgix%2Fimgix-rb.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fimgix%2Fimgix-rb?ref=badge_shield)
10
11
 
11
12
  ---
12
13
  <!-- /ix-docs-ignore -->
@@ -14,16 +15,16 @@
14
15
  - [Installation](#installation)
15
16
  - [Usage](#usage)
16
17
  - [Srcset Generation](#srcset-generation)
17
- - [Fixed image rendering](#fixed-image-rendering)
18
- - [Custom Widths](#custom-widths)
19
- - [Width Tolerance](#width-tolerance)
20
- - [Minimum and Maximum Width Ranges](#minimum-and-maximum-width-ranges)
21
- - [Variable Qualities](#variable-qualities)
22
- - [Multiple Parameters](#multiple-parameters)
18
+ * [Fixed image rendering](#fixed-image-rendering)
19
+ * [Custom Widths](#custom-widths)
20
+ * [Width Tolerance](#width-tolerance)
21
+ * [Minimum and Maximum Width Ranges](#minimum-and-maximum-width-ranges)
22
+ * [Variable Qualities](#variable-qualities)
23
23
  - [Purge Cache](#purge-cache)
24
24
  - [URL encoding and signed imgix URLs](#url-encoding-and-signed-imgix-urls)
25
25
  - [What is the `ixlib` param on every request?](#what-is-the-ixlib-param-on-every-request)
26
26
  - [Contributing](#contributing)
27
+ - [License](#license)
27
28
 
28
29
  ## Installation
29
30
 
@@ -48,36 +49,13 @@ Initialize a client with a `:domain` and your `:secure_url_token`. By default, H
48
49
 
49
50
  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
51
 
51
- ``` ruby
52
+ ```rb
52
53
  client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', secure_url_token: 'your-token')
53
54
 
54
55
  client.path('/images/demo.png').to_url(w: 200)
55
56
  #=> 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
57
  ```
77
58
 
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
59
  ## Srcset Generation
82
60
 
83
61
  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.
@@ -102,7 +80,7 @@ https://your-subdomain.imgix.net/images/demo.png?w=8192&s=9fbd257c53e770e345ce34
102
80
 
103
81
  ### Fixed image rendering
104
82
 
105
- In cases where enough information is provided about an image's dimensions, `to_srcset` will instead build a `srcset` that will allow for an image to be served at different resolutions. The parameters taken into consideration when determining if an image is fixed-width are `w`, `h`, and `ar`. By invoking `to_srcset` with either a width **or** the height and aspect ratio (along with `fit=crop`, typically) provided, a different `srcset` will be generated for a fixed-size image instead.
83
+ In cases where enough information is provided about an image's dimensions, `to_srcset` will instead build a `srcset` that will allow for an image to be served at different resolutions. The parameters taken into consideration when determining if an image is fixed-width are `w` or `h`. By invoking `to_srcset` with either a width **or** height provided, a different `srcset` will be generated for a fixed-size image instead.
106
84
 
107
85
  ```rb
108
86
  client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', secure_url_token: 'your-token', include_library_param: false)
@@ -167,11 +145,11 @@ https://testing.imgix.net/image.jpg?w=8192 8192w
167
145
 
168
146
  ### Minimum and Maximum Width Ranges
169
147
 
170
- If the exact number of minimum/maximum physical pixels that an image will need to be rendered at is known, a user can specify them by passing an integer via `min_srcset` and/or `max_srcset` to the `options` keyword parameters:
148
+ If the exact number of minimum/maximum physical pixels that an image will need to be rendered at is known, a user can specify them by passing an integer via `min_width` and/or `max_width` to the `options` keyword parameters:
171
149
 
172
150
  ```rb
173
151
  client = Imgix::Client.new(domain: 'testing.imgix.net', include_library_param: false)
174
- client.path('image.jpg').to_srcset(options: { min_srcset: 500, max_srcset: 2000 })
152
+ client.path('image.jpg').to_srcset(options: { min_width: 500, max_width: 2000 })
175
153
  ```
176
154
 
177
155
  Will result in a smaller, more tailored srcset.
@@ -190,7 +168,7 @@ https://testing.imgix.net/image.jpg?w=1902 1902w,
190
168
  https://testing.imgix.net/image.jpg?w=2000 2000w
191
169
  ```
192
170
 
193
- Remember that browsers will apply a device pixel ratio as a multiplier when selecting which image to download from a `srcset`. For example, even if you know your image will render no larger than 1000px, specifying `options: { max_srcset: 1000 }` will give your users with DPR higher than 1 no choice but to download and render a low-resolution version of the image. Therefore, it is vital to factor in any potential differences when choosing a minimum or maximum range.
171
+ Remember that browsers will apply a device pixel ratio as a multiplier when selecting which image to download from a `srcset`. For example, even if you know your image will render no larger than 1000px, specifying `options: { max_width: 1000 }` will give your users with DPR higher than 1 no choice but to download and render a low-resolution version of the image. Therefore, it is vital to factor in any potential differences when choosing a minimum or maximum range.
194
172
 
195
173
  Also please note that according to the [imgix API](https://docs.imgix.com/apis/url/size/w), the maximum renderable image width is 8192 pixels.
196
174
 
@@ -218,19 +196,9 @@ https://testing.imgix.net/image.jpg?w=100&dpr=4&q=23 4x,
218
196
  https://testing.imgix.net/image.jpg?w=100&dpr=5&q=20 5x
219
197
  ```
220
198
 
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
199
  ## Purge Cache
232
200
 
233
- 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.
201
+ 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.
234
202
 
235
203
  ```ruby
236
204
  client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', api_key: 'your-key')
@@ -256,3 +224,6 @@ client = Imgix::Client.new(domain: 'your-subdomain.imgix.net', include_library_p
256
224
  ## Contributing
257
225
 
258
226
  See the [contributing guide](Contributing.markdown).
227
+
228
+ ## License
229
+ [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fimgix%2Fimgix-rb.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fimgix%2Fimgix-rb?ref=badge_large)
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
 
3
5
  require 'rake/testtask'
data/imgix.gemspec CHANGED
@@ -1,31 +1,28 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'imgix/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/imgix/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = 'imgix'
6
+ spec.name = "imgix"
8
7
  spec.version = Imgix::VERSION
9
- spec.authors = ['Kelly Sutton', 'Sam Soffes', 'Ryan LeFevre', 'Antony Denyer', 'Paul Straw', 'Sherwin Heydarbeygi']
10
- spec.email = ['kelly@imgix.com', 'sam@soff.es', 'ryan@layervault.com', 'email@antonydenyer.co.uk', 'paul@imgix.com', 'sherwin@imgix.com']
11
- spec.description = 'Easily create and sign imgix URLs.'
12
- spec.summary = 'Official Ruby Gem for easily creating and signing imgix URLs.'
13
- spec.homepage = 'https://github.com/imgix/imgix-rb'
14
- 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"
15
14
 
16
15
  spec.metadata = {
17
- 'bug_tracker_uri' => 'https://github.com/imgix/imgix-rb/issues',
18
- 'changelog_uri' => 'https://github.com/imgix/imgix-rb/blob/main/CHANGELOG.md',
19
- 'documentation_uri' => "https://www.rubydoc.info/gems/imgix/#{spec.version}",
20
- '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}"
21
20
  }
22
21
 
23
- spec.files = `git ls-files`.split($/)
24
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
25
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
- 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
27
25
 
28
- spec.required_ruby_version = '>= 1.9.0'
29
- spec.add_dependency 'addressable'
30
- spec.add_development_dependency 'webmock'
26
+ spec.require_paths = ["lib"]
27
+ spec.required_ruby_version = ">= 1.9.0"
31
28
  end
data/lib/imgix.rb CHANGED
@@ -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
 
@@ -39,6 +39,7 @@ module Imgix
39
39
  resolutions.push(max_size)
40
40
  return resolutions
41
41
  }
42
+ DEFAULT_TARGET_WIDTHS = TARGET_WIDTHS.call(DEFAULT_WIDTH_TOLERANCE, MIN_WIDTH, MAX_WIDTH).freeze
42
43
 
43
44
  # hash of default quality parameter values mapped by each dpr srcset entry
44
45
  DPR_QUALITY = {
data/lib/imgix/client.rb CHANGED
@@ -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,82 +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
- token_error = 'Authentication token required'
48
- raise token_error if @api_key.nil?
49
-
50
- url = new_prefix + path
51
- uri = URI.parse('https://api.imgix.com/v2/image/purger')
33
+ api_key_error = "A valid API key is required to send purge requests"
34
+ raise api_key_error if @api_key.nil?
52
35
 
53
- 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
54
40
 
55
- req = Net::HTTP::Post.new(uri.path, user_agent)
56
- req.basic_auth @api_key, ''
57
- req.set_form_data({ url: url })
41
+ req = create_request(endpoint, url, :json_data_from)
58
42
 
59
- sock = Net::HTTP.new(uri.host, uri.port)
43
+ sock = Net::HTTP.new(endpoint.host, endpoint.port)
60
44
  sock.use_ssl = true
61
- res = sock.start { |http| http.request(req) }
62
-
63
- res
45
+ sock.start { |http| http.request(req) }
64
46
  end
65
47
 
66
- def prefix(path)
67
- msg = "Warning: `Client::prefix' will take zero arguments " \
68
- "in the next major version.\n"
69
- warn msg
70
- new_prefix
48
+ def prefix
49
+ "#{@use_https ? 'https' : 'http'}://#{@domain}"
71
50
  end
72
51
 
73
- def new_prefix
74
- "#{@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
75
82
  end
76
83
 
77
- 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
78
94
 
79
- def validate_host!
80
- host_error = 'The :host option must be specified'
81
- 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?
82
98
 
83
- domain_error = 'Domains must be passed in as fully-qualified'\
84
- '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"\
85
101
  'or any path element, i.e. "example.imgix.net"'\
86
102
 
87
- if @host.match(DOMAIN_REGEX).nil?
88
- raise ArgumentError, domain_error
89
- end
103
+ raise ArgumentError, domain_error if @domain.match(DOMAIN_REGEX).nil?
90
104
  end
91
105
  end
92
106
  end