imgix 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -11
- data/CHANGELOG.md +6 -1
- data/README.md +8 -8
- data/lib/imgix/path.rb +14 -9
- data/lib/imgix/version.rb +1 -1
- data/test/units/srcset_test.rb +107 -19
- 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: 93aa8838354b1565c1691c817c4ed212d76b3222
|
4
|
+
data.tar.gz: bc28c0311f08510f4fc4ff96c73774b59d83e59f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7e492f9c63a641a6c2dc6f3f86ef96008c965187ce5439448e878d37a0b825871672447b8f113eba1137c97353a358e7cc6a3be68b8720c5a37472bc5f4515f
|
7
|
+
data.tar.gz: b2b3799e866a64680842a6193d5ca1e0794ff5d918052c732bfe704de63bc9bb5b29a7e6f4f608fc5642344e01ee38b22990951273e16402ccd98022a1906252
|
data/.travis.yml
CHANGED
@@ -1,16 +1,6 @@
|
|
1
|
+
dist: trusty
|
1
2
|
language: ruby
|
2
3
|
bundler_args: --without development
|
3
|
-
before_install:
|
4
|
-
# Extracts the ruby version number
|
5
|
-
- RUBY_VERS="$(bc -l<<<$(ruby -v | cut -d' ' -f 2 | cut -d'.' -f 1,2))"
|
6
|
-
# Bundler 2.0 requires at least ruby vers 2.3.0
|
7
|
-
- LATEST_VERS=2.3
|
8
|
-
# Based on a given job's ruby version, install either
|
9
|
-
# Bundler 2.x or 1.17
|
10
|
-
- if (( $(echo "$RUBY_VERS >= $LATEST_VERS" | bc -l) ));
|
11
|
-
then echo $(gem install bundler);
|
12
|
-
else echo $(gem install bundler -v '< 2');
|
13
|
-
fi
|
14
4
|
rvm:
|
15
5
|
- 2.3.0
|
16
6
|
- 2.2.4
|
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,12 @@
|
|
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
|
-
## [3.1.
|
6
|
+
## [3.1.1](https://github.com/imgix/imgix-rb/compare/3.1.0...3.1.1) - July 28, 2019
|
7
|
+
|
8
|
+
* fix: include dpr parameter when generating a DPR srcset ([#48](https://github.com/imgix/imgix-rb/pull/48))
|
9
|
+
* ci(travis): change build dist to trusty and remove bundler script ([#49](https://github.com/imgix/imgix-rb/pull/49))
|
10
|
+
|
11
|
+
## [3.1.0](https://github.com/imgix/imgix-rb/compare/3.0.0...3.1.0) - July 28, 2019
|
7
12
|
|
8
13
|
* feat: add srcset generation ([#47](https://github.com/imgix/imgix-rb/pull/47))
|
9
14
|
|
data/README.md
CHANGED
@@ -68,23 +68,23 @@ https://your-subdomain.imgix.net/images/demo.png?w=7400&s=a5dd7dda1dbac613f0475f
|
|
68
68
|
https://your-subdomain.imgix.net/images/demo.png?w=8192&s=9fbd257c53e770e345ce3412b64a3452 8192w
|
69
69
|
```
|
70
70
|
|
71
|
-
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 provided, a different `srcset` will be generated for a fixed-size image instead.
|
71
|
+
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.
|
72
72
|
|
73
73
|
```rb
|
74
|
-
client = Imgix::Client.new(host: 'your-subdomain.imgix.net', secure_url_token: 'your-token')
|
74
|
+
client = Imgix::Client.new(host: 'your-subdomain.imgix.net', secure_url_token: 'your-token', include_library_param: false)
|
75
75
|
path = client.path('/images/demo.png')
|
76
76
|
|
77
|
-
srcset = path.to_srcset(h:800, ar:'3:2')
|
77
|
+
srcset = path.to_srcset(h:800, ar:'3:2', fit:'crop')
|
78
78
|
```
|
79
79
|
|
80
80
|
Will produce the following attribute value:
|
81
81
|
|
82
82
|
```html
|
83
|
-
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&s=
|
84
|
-
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&s=
|
85
|
-
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&s=
|
86
|
-
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&s=
|
87
|
-
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&s=
|
83
|
+
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&fit=crop&dpr=1&s=f97f2dccf85beac33a3824b57ef4ddc6 1x,
|
84
|
+
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&fit=crop&dpr=2&s=e1727167fef53cdb0a89dd66b8672410 2x,
|
85
|
+
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&fit=crop&dpr=3&s=7718db8457345419c30214f1d1a3a5d3 3x,
|
86
|
+
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&fit=crop&dpr=4&s=000c50a7f97ccdbb9bb2f00bc5241ed4 4x,
|
87
|
+
https://your-subdomain.imgix.net/images/demo.png?h=800&ar=3%3A2&fit=crop&dpr=5&s=970b6fc12a410f3dd2959674dd1f4120 5x
|
88
88
|
```
|
89
89
|
|
90
90
|
For more information to better understand `srcset`, we highly recommend [Eric Portis' "Srcset and sizes" article](https://ericportis.com/posts/2014/srcset-sizes/) which goes into depth about the subject.
|
data/lib/imgix/path.rb
CHANGED
@@ -85,16 +85,21 @@ module Imgix
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def to_srcset(params = {})
|
88
|
+
prev_options = @options.dup
|
88
89
|
@options.merge!(params)
|
90
|
+
|
89
91
|
width = @options['w'.to_sym]
|
90
92
|
height = @options['h'.to_sym]
|
91
93
|
aspect_ratio = @options['ar'.to_sym]
|
92
94
|
|
93
95
|
if ((width) || (height && aspect_ratio))
|
94
|
-
build_dpr_srcset(@options)
|
96
|
+
srcset = build_dpr_srcset(@options)
|
95
97
|
else
|
96
|
-
build_srcset_pairs(@options)
|
98
|
+
srcset = build_srcset_pairs(@options)
|
97
99
|
end
|
100
|
+
|
101
|
+
@options = prev_options
|
102
|
+
return srcset
|
98
103
|
end
|
99
104
|
|
100
105
|
private
|
@@ -123,24 +128,24 @@ module Imgix
|
|
123
128
|
query.length > 0
|
124
129
|
end
|
125
130
|
|
126
|
-
def build_srcset_pairs(params
|
131
|
+
def build_srcset_pairs(params)
|
127
132
|
srcset = ''
|
133
|
+
|
128
134
|
for width in @target_widths do
|
129
|
-
|
130
|
-
|
131
|
-
srcset += "#{to_url(currentParams)} #{width}w,\n"
|
135
|
+
params['w'.to_sym] = width
|
136
|
+
srcset += "#{to_url(params)} #{width}w,\n"
|
132
137
|
end
|
133
138
|
|
134
139
|
return srcset[0..-3]
|
135
140
|
end
|
136
141
|
|
137
|
-
def build_dpr_srcset(params
|
142
|
+
def build_dpr_srcset(params)
|
138
143
|
srcset = ''
|
139
144
|
target_ratios = [1,2,3,4,5]
|
140
|
-
url = to_url(params)
|
141
145
|
|
142
146
|
for ratio in target_ratios do
|
143
|
-
|
147
|
+
params['dpr'.to_sym] = ratio
|
148
|
+
srcset += "#{to_url(params)} #{ratio}x,\n"
|
144
149
|
end
|
145
150
|
|
146
151
|
return srcset[0..-3]
|
data/lib/imgix/version.rb
CHANGED
data/test/units/srcset_test.rb
CHANGED
@@ -9,6 +9,21 @@ module SrcsetTest
|
|
9
9
|
assert_equal expected_number_of_pairs, srcset.split(',').length
|
10
10
|
end
|
11
11
|
|
12
|
+
def test_srcset_pair_values
|
13
|
+
resolutions = [100, 116, 134, 156, 182, 210, 244, 282,
|
14
|
+
328, 380, 442, 512, 594, 688, 798, 926,
|
15
|
+
1074, 1246, 1446, 1678, 1946, 2258, 2618,
|
16
|
+
3038, 3524, 4088, 4742, 5500, 6380, 7400, 8192]
|
17
|
+
srcset = path.to_srcset()
|
18
|
+
srclist = srcset.split(',').map { |srcset_split|
|
19
|
+
srcset_split.split(' ')[1].to_i
|
20
|
+
}
|
21
|
+
|
22
|
+
for i in 0..srclist.length-1 do
|
23
|
+
assert_equal(srclist[i], resolutions[i])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
12
27
|
private
|
13
28
|
def path
|
14
29
|
@client ||= Imgix::Client.new(host: 'testing.imgix.net', secure_url_token: 'MYT0KEN', include_library_param: false).path('image.jpg')
|
@@ -26,14 +41,29 @@ module SrcsetTest
|
|
26
41
|
}
|
27
42
|
end
|
28
43
|
|
44
|
+
def test_srcset_has_dpr_params
|
45
|
+
i = 1
|
46
|
+
srcset.split(',').map { |srcset_split|
|
47
|
+
src = srcset_split.split(' ')[0]
|
48
|
+
assert_includes src, "dpr=#{i}"
|
49
|
+
i += 1
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
29
53
|
def test_srcset_signs_urls
|
30
|
-
|
54
|
+
srcset.split(',').map { |srcset_split|
|
55
|
+
src = srcset_split.split(' ')[0]
|
56
|
+
assert_includes src, 's='
|
31
57
|
|
32
|
-
|
33
|
-
|
34
|
-
assert_includes url, "s="
|
58
|
+
# parses out all parameters except for 's=...'
|
59
|
+
params = src[src.index('?')..src.index('s=')-2]
|
35
60
|
|
36
|
-
|
61
|
+
# parses out the 's=...' parameter
|
62
|
+
generated_signature = src.slice(src.index('s=')+2, src.length)
|
63
|
+
|
64
|
+
signature_base = 'MYT0KEN' + '/image.jpg' + params;
|
65
|
+
expected_signature = Digest::MD5.hexdigest(signature_base)
|
66
|
+
|
37
67
|
assert_equal expected_signature, generated_signature
|
38
68
|
}
|
39
69
|
end
|
@@ -50,6 +80,20 @@ module SrcsetTest
|
|
50
80
|
assert_equal expected_number_of_pairs, srcset.split(',').length
|
51
81
|
end
|
52
82
|
|
83
|
+
def test_srcset_pair_values
|
84
|
+
resolutions = [100, 116, 134, 156, 182, 210, 244, 282,
|
85
|
+
328, 380, 442, 512, 594, 688, 798, 926,
|
86
|
+
1074, 1246, 1446, 1678, 1946, 2258, 2618,
|
87
|
+
3038, 3524, 4088, 4742, 5500, 6380, 7400, 8192]
|
88
|
+
srclist = srcset.split(',').map { |srcset_split|
|
89
|
+
srcset_split.split(' ')[1].to_i
|
90
|
+
}
|
91
|
+
|
92
|
+
for i in 0..srclist.length-1 do
|
93
|
+
assert_equal(srclist[i], resolutions[i])
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
53
97
|
def test_srcset_respects_height_parameter
|
54
98
|
srcset.split(',').map { |src|
|
55
99
|
assert_includes src, 'h='
|
@@ -90,8 +134,8 @@ module SrcsetTest
|
|
90
134
|
assert_includes src, 's='
|
91
135
|
|
92
136
|
# parses out all parameters except for 's=...'
|
93
|
-
params = src
|
94
|
-
|
137
|
+
params = src[src.index('?')..src.index('s=')-2]
|
138
|
+
|
95
139
|
# parses out the 's=...' parameter
|
96
140
|
generated_signature = src.slice(src.index('s=')+2, src.length)
|
97
141
|
|
@@ -119,14 +163,29 @@ module SrcsetTest
|
|
119
163
|
}
|
120
164
|
end
|
121
165
|
|
166
|
+
def test_srcset_has_dpr_params
|
167
|
+
i = 1
|
168
|
+
srcset.split(',').map { |srcset_split|
|
169
|
+
src = srcset_split.split(' ')[0]
|
170
|
+
assert_includes src, "dpr=#{i}"
|
171
|
+
i += 1
|
172
|
+
}
|
173
|
+
end
|
174
|
+
|
122
175
|
def test_srcset_signs_urls
|
123
|
-
|
176
|
+
srcset.split(',').map { |srcset_split|
|
177
|
+
src = srcset_split.split(' ')[0]
|
178
|
+
assert_includes src, 's='
|
124
179
|
|
125
|
-
|
126
|
-
|
127
|
-
assert_includes url, "s="
|
180
|
+
# parses out all parameters except for 's=...'
|
181
|
+
params = src[src.index('?')..src.index('s=')-2]
|
128
182
|
|
129
|
-
|
183
|
+
# parses out the 's=...' parameter
|
184
|
+
generated_signature = src.slice(src.index('s=')+2, src.length)
|
185
|
+
|
186
|
+
signature_base = 'MYT0KEN' + '/image.jpg' + params;
|
187
|
+
expected_signature = Digest::MD5.hexdigest(signature_base)
|
188
|
+
|
130
189
|
assert_equal expected_signature, generated_signature
|
131
190
|
}
|
132
191
|
end
|
@@ -143,6 +202,20 @@ module SrcsetTest
|
|
143
202
|
assert_equal expected_number_of_pairs, srcset.split(',').length
|
144
203
|
end
|
145
204
|
|
205
|
+
def test_srcset_pair_values
|
206
|
+
resolutions = [100, 116, 134, 156, 182, 210, 244, 282,
|
207
|
+
328, 380, 442, 512, 594, 688, 798, 926,
|
208
|
+
1074, 1246, 1446, 1678, 1946, 2258, 2618,
|
209
|
+
3038, 3524, 4088, 4742, 5500, 6380, 7400, 8192]
|
210
|
+
srclist = srcset.split(',').map { |srcset_split|
|
211
|
+
srcset_split.split(' ')[1].to_i
|
212
|
+
}
|
213
|
+
|
214
|
+
for i in 0..srclist.length-1 do
|
215
|
+
assert_equal(srclist[i], resolutions[i])
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
146
219
|
def test_srcset_within_bounds
|
147
220
|
min, *max = srcset.split(',')
|
148
221
|
|
@@ -177,8 +250,8 @@ module SrcsetTest
|
|
177
250
|
assert_includes src, 's='
|
178
251
|
|
179
252
|
# parses out all parameters except for 's=...'
|
180
|
-
params = src
|
181
|
-
|
253
|
+
params = src[src.index('?')..src.index('s=')-2]
|
254
|
+
|
182
255
|
# parses out the 's=...' parameter
|
183
256
|
generated_signature = src.slice(src.index('s=')+2, src.length)
|
184
257
|
|
@@ -206,14 +279,29 @@ module SrcsetTest
|
|
206
279
|
}
|
207
280
|
end
|
208
281
|
|
282
|
+
def test_srcset_has_dpr_params
|
283
|
+
i = 1
|
284
|
+
srcset.split(',').map { |srcset_split|
|
285
|
+
src = srcset_split.split(' ')[0]
|
286
|
+
assert_includes src, "dpr=#{i}"
|
287
|
+
i += 1
|
288
|
+
}
|
289
|
+
end
|
290
|
+
|
209
291
|
def test_srcset_signs_urls
|
210
|
-
|
292
|
+
srcset.split(',').map { |srcset_split|
|
293
|
+
src = srcset_split.split(' ')[0]
|
294
|
+
assert_includes src, 's='
|
211
295
|
|
212
|
-
|
213
|
-
|
214
|
-
|
296
|
+
# parses out all parameters except for 's=...'
|
297
|
+
params = src[src.index('?')..src.index('s=')-2]
|
298
|
+
|
299
|
+
# parses out the 's=...' parameter
|
300
|
+
generated_signature = src.slice(src.index('s=')+2, src.length)
|
215
301
|
|
216
|
-
|
302
|
+
signature_base = 'MYT0KEN' + '/image.jpg' + params;
|
303
|
+
expected_signature = Digest::MD5.hexdigest(signature_base)
|
304
|
+
|
217
305
|
assert_equal expected_signature, generated_signature
|
218
306
|
}
|
219
307
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imgix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Sutton
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2019-
|
16
|
+
date: 2019-09-05 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: addressable
|