shrine-imgix 0.3.0 → 0.5.2
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 +5 -5
- data/README.md +62 -39
- data/lib/shrine/plugins/imgix.rb +61 -0
- data/lib/shrine/storage/imgix.rb +44 -27
- data/shrine-imgix.gemspec +6 -7
- metadata +24 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c27d8fee1e632bcdc8e1f062e57f5d77759288eb6f7aa5572f96cb008b8dc54c
|
4
|
+
data.tar.gz: '0862b624a88f39069147eefeacf47d1a1b721f42493bac7ae0d21f34005e6a63'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6d757e626f7ee32dc62df26e9387aaaf768560af18d9a878bc0195a8138524c011760b4f918248746a77086ccc579438180418393f05346bdb8f548499bdb95
|
7
|
+
data.tar.gz: 732edc00a874b470a71e42e03ca7606c8d1e8925957ba54baaa05893d7ba31085ad495cb5289be500c34381f4a666ac2b1d8f0d2b6631c9ff6198d4437af5e73
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Provides [Imgix] integration for [Shrine].
|
4
4
|
|
5
5
|
Imgix is a service for processing images on the fly, and works with files
|
6
|
-
stored on
|
6
|
+
stored on external services such as AWS S3 or Google Cloud Storage.
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -11,60 +11,81 @@ stored on Amazon S3.
|
|
11
11
|
gem "shrine-imgix"
|
12
12
|
```
|
13
13
|
|
14
|
-
##
|
14
|
+
## Configuring
|
15
15
|
|
16
|
-
|
17
|
-
various sources (S3, Web Folder or Web Proxy), so you first need to set that up
|
18
|
-
(see the [Imgix documentation]). After this is set up, the Imgix Shrine
|
19
|
-
"storage" is used as a wrapper around the main storage of the source:
|
16
|
+
Load the `imgix` plugin with Imgix client settings:
|
20
17
|
|
21
18
|
```rb
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
Shrine.plugin :imgix, client: {
|
20
|
+
host: "your-subdomain.imgix.net",
|
21
|
+
secure_url_token: "abc123",
|
22
|
+
}
|
23
|
+
```
|
24
|
+
|
25
|
+
You can also pass in an `Imgix::Client` object directly:
|
26
|
+
|
27
|
+
```rb
|
28
|
+
require "imgix"
|
29
|
+
|
30
|
+
imgix_client = Imgix::Client.new(
|
31
|
+
host: "your-subdomain.imgix.net",
|
32
|
+
secure_url_token: "abc123",
|
30
33
|
)
|
31
34
|
|
32
|
-
Shrine.
|
35
|
+
Shrine.plugin :imgix, client: imgix_client
|
33
36
|
```
|
34
37
|
|
35
|
-
|
36
|
-
so see the [imgix] gem for information about all possible options.
|
38
|
+
### Path prefix
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
If you've configured a "Path Prefix" on your Imgix source, and you also have
|
41
|
+
`:prefix` set on your Shrine storage, you'll need tell the `imgix` plugin to
|
42
|
+
exclude the storage prefix from generated URLs:
|
41
43
|
|
42
44
|
```rb
|
43
|
-
|
45
|
+
Shrine.plugin :imgix, client: ..., prefix: false
|
46
|
+
```
|
47
|
+
|
48
|
+
## Usage
|
49
|
+
|
50
|
+
You can generate an Imgix URL for a `Shrine::UploadedFile` object by calling
|
51
|
+
`#imgix_url`:
|
52
|
+
|
53
|
+
```rb
|
54
|
+
photo.image.imgix_url(w: 150, h: 200, fit: "crop")
|
44
55
|
#=> "http://my-subdomain.imgix.net/943kdfs0gkfg.jpg?w=150&h=200&fit=crop"
|
45
56
|
```
|
46
57
|
|
47
|
-
See the [Imgix docs]
|
48
|
-
URL options.
|
58
|
+
See the [Imgix docs][url reference] for all available URL options.
|
49
59
|
|
50
|
-
|
60
|
+
### Rails
|
51
61
|
|
52
|
-
|
53
|
-
|
62
|
+
If you're using [imgix-rails] and want to use the `ix_*` helpers, you can use
|
63
|
+
`#imgix_id` to retrieve the Imgix path:
|
54
64
|
|
55
|
-
```
|
56
|
-
|
57
|
-
IMGIX_API_KEY="..."
|
58
|
-
IMGIX_HOST="..."
|
59
|
-
IMGIX_SECURE_URL_TOKEN="..." # optional
|
60
|
-
S3_ACCESS_KEY_ID="..."
|
61
|
-
S3_SECRET_ACCESS_KEY="..."
|
62
|
-
S3_REGION="..."
|
63
|
-
S3_BUCKET="..."
|
64
|
-
S3_PREFIX="..."
|
65
|
+
```erb
|
66
|
+
<%= ix_image_tag photo.image.imgix_id, url_params: { w: 300, h: 500, fit: "crop" } %>
|
65
67
|
```
|
66
68
|
|
67
|
-
|
69
|
+
### Purging
|
70
|
+
|
71
|
+
If you want images to be automatically [purged][purging] from Imgix on
|
72
|
+
deletion, you can set `:purge` to `true`:
|
73
|
+
|
74
|
+
```rb
|
75
|
+
Shrine.plugin :imgix, client: ..., purge: true
|
76
|
+
```
|
77
|
+
|
78
|
+
You can also purge manually with `Shrine::UploadedFile#imgix_purge`:
|
79
|
+
|
80
|
+
```rb
|
81
|
+
photo.image.imgix_purge
|
82
|
+
```
|
83
|
+
|
84
|
+
Note that purging requires passing the `:api_key` option to your Imgix client.
|
85
|
+
|
86
|
+
## Development
|
87
|
+
|
88
|
+
You can run the test suite with:
|
68
89
|
|
69
90
|
```sh
|
70
91
|
$ bundle exec rake test
|
@@ -75,6 +96,8 @@ $ bundle exec rake test
|
|
75
96
|
[MIT](http://opensource.org/licenses/MIT)
|
76
97
|
|
77
98
|
[Imgix]: https://www.imgix.com/
|
78
|
-
[Shrine]: https://github.com/janko
|
99
|
+
[Shrine]: https://github.com/janko/shrine
|
79
100
|
[imgix]: https://github.com/imgix/imgix-rb
|
80
|
-
[
|
101
|
+
[url reference]: https://docs.imgix.com/apis/url
|
102
|
+
[imgix-rails]: https://github.com/imgix/imgix-rails
|
103
|
+
[purging]: https://docs.imgix.com/setup/purging-images
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "imgix"
|
2
|
+
|
3
|
+
class Shrine
|
4
|
+
module Plugins
|
5
|
+
module Imgix
|
6
|
+
def self.configure(uploader, **opts)
|
7
|
+
opts[:client] = ::Imgix::Client.new(opts[:client]) if opts[:client].is_a?(Hash)
|
8
|
+
|
9
|
+
uploader.opts[:imgix] ||= { prefix: true, purge: false }
|
10
|
+
uploader.opts[:imgix].merge!(**opts)
|
11
|
+
|
12
|
+
fail Error, ":client is required for imgix plugin" unless uploader.imgix_client
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def imgix_client
|
17
|
+
opts[:imgix][:client]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module FileMethods
|
22
|
+
def imgix_url(**options)
|
23
|
+
imgix_client.path(imgix_id).to_url(**options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete
|
27
|
+
super
|
28
|
+
imgix_purge if imgix_purge?
|
29
|
+
end
|
30
|
+
|
31
|
+
def imgix_purge
|
32
|
+
imgix_client.purge(imgix_id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def imgix_id
|
36
|
+
if imgix_prefix? && storage.respond_to?(:prefix)
|
37
|
+
[*storage.prefix, id].join("/")
|
38
|
+
else
|
39
|
+
id
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def imgix_client
|
46
|
+
shrine_class.imgix_client
|
47
|
+
end
|
48
|
+
|
49
|
+
def imgix_prefix?
|
50
|
+
shrine_class.opts[:imgix][:prefix]
|
51
|
+
end
|
52
|
+
|
53
|
+
def imgix_purge?
|
54
|
+
shrine_class.opts[:imgix][:purge]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
register_plugin(:imgix, Imgix)
|
60
|
+
end
|
61
|
+
end
|
data/lib/shrine/storage/imgix.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require "imgix"
|
2
|
-
require "forwardable"
|
3
2
|
require "net/http"
|
4
3
|
require "uri"
|
5
4
|
|
5
|
+
warn "Shrine::Storage::Imgix is deprecated and will be removed in next major version. Use the new :imgix plugin instead."
|
6
|
+
|
6
7
|
class Shrine
|
7
8
|
module Storage
|
8
9
|
class Imgix
|
@@ -13,33 +14,58 @@ class Shrine
|
|
13
14
|
# We initialize the Imgix client, and save the storage. We additionally
|
14
15
|
# save the token as well, because `Imgix::Client` doesn't provide a
|
15
16
|
# reader for the token.
|
16
|
-
def initialize(storage:, **options)
|
17
|
+
def initialize(storage:, include_prefix: false, **options)
|
17
18
|
@client = ::Imgix::Client.new(options)
|
18
19
|
@api_key = options.fetch(:api_key)
|
19
20
|
@storage = storage
|
21
|
+
@include_prefix = include_prefix
|
22
|
+
|
23
|
+
instance_eval do
|
24
|
+
# Purges the file from the source storage after moving it.
|
25
|
+
def move(io, id, **options)
|
26
|
+
@storage.move(io, id, **options)
|
27
|
+
io.storage.purge(io.id) if io.storage.is_a?(Storage::Imgix)
|
28
|
+
end if @storage.respond_to?(:move)
|
29
|
+
|
30
|
+
def movable?(io, id)
|
31
|
+
@storage.movable?(io, id)
|
32
|
+
end if @storage.respond_to?(:movable?)
|
33
|
+
|
34
|
+
def download(id)
|
35
|
+
@storage.download(id)
|
36
|
+
end if @storage.respond_to?(:download)
|
37
|
+
|
38
|
+
def presign(*args)
|
39
|
+
@storage.presign(*args)
|
40
|
+
end if @storage.respond_to?(:presign)
|
41
|
+
|
42
|
+
def clear!(*args)
|
43
|
+
@storage.clear!(*args)
|
44
|
+
end if @storage.respond_to?(:clear!)
|
45
|
+
end
|
20
46
|
end
|
21
47
|
|
22
|
-
|
23
|
-
|
24
|
-
|
48
|
+
def upload(io, id, **options)
|
49
|
+
@storage.upload(io, id, **options)
|
50
|
+
end
|
25
51
|
|
26
|
-
|
27
|
-
|
28
|
-
@storage.move(io, id, **options)
|
29
|
-
io.storage.purge(io.id) if io.storage.is_a?(Storage::Imgix)
|
52
|
+
def open(id)
|
53
|
+
@storage.open(id)
|
30
54
|
end
|
31
55
|
|
32
|
-
def
|
33
|
-
@storage.
|
56
|
+
def exists?(id)
|
57
|
+
@storage.exists?(id)
|
34
58
|
end
|
35
59
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
60
|
+
# Generates an Imgix URL to the file. All options passed in will be
|
61
|
+
# transformed into URL parameters, check out the [reference] for all
|
62
|
+
# available query parameters.
|
63
|
+
#
|
64
|
+
# [reference]: https://www.imgix.com/docs/reference
|
65
|
+
def url(id, **options)
|
66
|
+
id = [*@storage.prefix, id].join("/") if @include_prefix
|
67
|
+
|
68
|
+
client.path(id).to_url(**options)
|
43
69
|
end
|
44
70
|
|
45
71
|
# Purges the deleted file.
|
@@ -56,15 +82,6 @@ class Shrine
|
|
56
82
|
post(uri, "url" => url(id))
|
57
83
|
end
|
58
84
|
|
59
|
-
# Generates an Imgix URL to the file. All options passed in will be
|
60
|
-
# transformed into URL parameters, check out the [reference] for all
|
61
|
-
# available query parameters.
|
62
|
-
#
|
63
|
-
# [reference]: https://www.imgix.com/docs/reference
|
64
|
-
def url(id, **options)
|
65
|
-
client.path(id).to_url(**options)
|
66
|
-
end
|
67
|
-
|
68
85
|
private
|
69
86
|
|
70
87
|
def post(uri, params = {})
|
data/shrine-imgix.gemspec
CHANGED
@@ -1,23 +1,22 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "shrine-imgix"
|
3
|
-
gem.version = "0.
|
3
|
+
gem.version = "0.5.2"
|
4
4
|
|
5
5
|
gem.required_ruby_version = ">= 2.1"
|
6
6
|
|
7
7
|
gem.summary = "Provides Imgix integration for Shrine."
|
8
|
-
gem.homepage = "https://github.com/
|
8
|
+
gem.homepage = "https://github.com/shrinerb/shrine-imgix"
|
9
9
|
gem.authors = ["Janko Marohnić"]
|
10
10
|
gem.email = ["janko.marohnic@gmail.com"]
|
11
11
|
gem.license = "MIT"
|
12
12
|
|
13
|
-
gem.files = Dir["README.md", "LICENSE.txt", "lib/**/*.rb", "
|
13
|
+
gem.files = Dir["README.md", "LICENSE.txt", "lib/**/*.rb", "*.gemspec"]
|
14
14
|
gem.require_path = "lib"
|
15
15
|
|
16
|
-
gem.add_dependency "shrine", "
|
17
|
-
gem.add_dependency "imgix", "
|
16
|
+
gem.add_dependency "shrine", ">= 2.0", "< 4"
|
17
|
+
gem.add_dependency "imgix", ">= 1.2", "< 5"
|
18
18
|
|
19
19
|
gem.add_development_dependency "rake"
|
20
20
|
gem.add_development_dependency "minitest"
|
21
|
-
gem.add_development_dependency "
|
22
|
-
gem.add_development_dependency "aws-sdk", "~> 2.1"
|
21
|
+
gem.add_development_dependency "mocha"
|
23
22
|
end
|
metadata
CHANGED
@@ -1,43 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shrine-imgix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shrine
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '2.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: imgix
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
39
|
+
version: '1.2'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5'
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- - "
|
47
|
+
- - ">="
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
49
|
+
version: '1.2'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '5'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: rake
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +79,7 @@ dependencies:
|
|
67
79
|
- !ruby/object:Gem::Version
|
68
80
|
version: '0'
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
82
|
+
name: mocha
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
85
|
- - ">="
|
@@ -80,20 +92,6 @@ dependencies:
|
|
80
92
|
- - ">="
|
81
93
|
- !ruby/object:Gem::Version
|
82
94
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: aws-sdk
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '2.1'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '2.1'
|
97
95
|
description:
|
98
96
|
email:
|
99
97
|
- janko.marohnic@gmail.com
|
@@ -103,9 +101,10 @@ extra_rdoc_files: []
|
|
103
101
|
files:
|
104
102
|
- LICENSE.txt
|
105
103
|
- README.md
|
104
|
+
- lib/shrine/plugins/imgix.rb
|
106
105
|
- lib/shrine/storage/imgix.rb
|
107
106
|
- shrine-imgix.gemspec
|
108
|
-
homepage: https://github.com/
|
107
|
+
homepage: https://github.com/shrinerb/shrine-imgix
|
109
108
|
licenses:
|
110
109
|
- MIT
|
111
110
|
metadata: {}
|
@@ -124,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
123
|
- !ruby/object:Gem::Version
|
125
124
|
version: '0'
|
126
125
|
requirements: []
|
127
|
-
|
128
|
-
rubygems_version: 2.5.1
|
126
|
+
rubygems_version: 3.1.4
|
129
127
|
signing_key:
|
130
128
|
specification_version: 4
|
131
129
|
summary: Provides Imgix integration for Shrine.
|