imgix 1.0.0 → 1.1.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 +4 -4
- data/.travis.yml +8 -5
- data/CHANGELOG.md +7 -0
- data/README.md +1 -1
- data/lib/imgix/client.rb +1 -1
- data/lib/imgix/path.rb +12 -1
- data/lib/imgix/version.rb +1 -1
- data/test/units/domains_test.rb +9 -1
- data/test/units/path_test.rb +29 -2
- 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: 8c573b0b53304a06886cb1848fd233109975021d
|
4
|
+
data.tar.gz: ab4b939716370098523381acbcbd3817fdc63b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef8647b9485547eb1af90b6b7d6758099d7028c72745ab55c37f31076a657ed9a4a88872708137b62101bb5b1aa7b940b9673300cc845dc8d72fd9585cac1cd2
|
7
|
+
data.tar.gz: c0b9567ab4201cb685ce94da7d1d61e2e55af6692d83ac916bfc964e5fca97b1cc4b807071353ab797ea2f803aa0f532cb70dfbd64f97cdd58f8dcec7c4b8b1f
|
data/.travis.yml
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
language: ruby
|
2
2
|
bundler_args: --without development
|
3
|
-
before_install:
|
3
|
+
before_install:
|
4
|
+
- gem install bundler
|
5
|
+
- rvm get head
|
4
6
|
rvm:
|
5
|
-
- 2.
|
6
|
-
-
|
7
|
-
-
|
8
|
-
-
|
7
|
+
- 2.3.0
|
8
|
+
- 2.2.4
|
9
|
+
- 2.1.8
|
10
|
+
- jruby-9.0.5.0
|
11
|
+
- rbx-2.11
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,13 @@
|
|
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
|
+
## [1.1.0] - February 24, 2016
|
7
|
+
|
8
|
+
* Added automatic Base64 encoding for all Base64 variant parameters.
|
9
|
+
* Properly encoding all keys and values output by `Imgix::Path`.
|
10
|
+
* Better URL encoding for spaces, with `ERB::Util.url_encode`.
|
11
|
+
* Normalize trailing `/` in passed hosts.
|
12
|
+
|
6
13
|
## [1.0.0] - December 9, 2015
|
7
14
|
### Changed
|
8
15
|
- Removed `Client#sign_path` to provide a consistent method and code path for generating URLs. [#16](https://github.com/imgix/imgix-rb/issues/16)
|
data/README.md
CHANGED
@@ -72,7 +72,7 @@ client = Imgix::Client.new(hosts: ['your-subdomain-1.imgix.net',
|
|
72
72
|
|
73
73
|
When the imgix api requires multiple parameters you have to use the method rather than an accessor.
|
74
74
|
|
75
|
-
For example to use the
|
75
|
+
For example to use the noise reduction:
|
76
76
|
|
77
77
|
``` ruby
|
78
78
|
path.noise_reduction(50,50)
|
data/lib/imgix/client.rb
CHANGED
@@ -31,7 +31,7 @@ module Imgix
|
|
31
31
|
def get_host(path)
|
32
32
|
host = host_for_crc(path) if @shard_strategy == :crc
|
33
33
|
host = host_for_cycle if @shard_strategy == :cycle
|
34
|
-
host.gsub("http://","").gsub("https://","")
|
34
|
+
host.gsub("http://","").gsub("https://","").chomp("/")
|
35
35
|
end
|
36
36
|
|
37
37
|
def host_for_crc(path)
|
data/lib/imgix/path.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
require 'base64'
|
1
2
|
require 'cgi/util'
|
3
|
+
require 'erb'
|
2
4
|
require 'imgix/param_helpers'
|
3
5
|
|
4
6
|
module Imgix
|
@@ -90,7 +92,16 @@ module Imgix
|
|
90
92
|
end
|
91
93
|
|
92
94
|
def query
|
93
|
-
@options.map
|
95
|
+
@options.map do |key, val|
|
96
|
+
escaped_key = ERB::Util.url_encode(key.to_s)
|
97
|
+
|
98
|
+
if escaped_key.end_with? '64'
|
99
|
+
base64_encoded_val = Base64.urlsafe_encode64(val.to_s).delete('=')
|
100
|
+
"#{escaped_key}=#{base64_encoded_val}"
|
101
|
+
else
|
102
|
+
"#{escaped_key}=#{ERB::Util.url_encode(val.to_s)}"
|
103
|
+
end
|
104
|
+
end.join('&')
|
94
105
|
end
|
95
106
|
|
96
107
|
def has_query?
|
data/lib/imgix/version.rb
CHANGED
data/test/units/domains_test.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class DomainsTest < Imgix::Test
|
4
|
-
|
5
4
|
def test_deterministically_choosing_a_path
|
6
5
|
client = Imgix::Client.new(hosts: [
|
7
6
|
"demos-1.imgix.net",
|
@@ -50,6 +49,15 @@ class DomainsTest < Imgix::Test
|
|
50
49
|
assert_equal 'https://demos-1.imgix.net/bridge.png?s=0233fd6de51f20f11cff6b452b7a9a05', path.to_url
|
51
50
|
end
|
52
51
|
|
52
|
+
def test_strips_out_trailing_slash
|
53
|
+
client = Imgix::Client.new(host: "http://demos-1.imgix.net/",
|
54
|
+
secure_url_token: '10adc394',
|
55
|
+
include_library_param: false)
|
56
|
+
|
57
|
+
path = client.path('/bridge.png')
|
58
|
+
assert_equal 'https://demos-1.imgix.net/bridge.png?s=0233fd6de51f20f11cff6b452b7a9a05', path.to_url
|
59
|
+
end
|
60
|
+
|
53
61
|
def test_with_full_paths
|
54
62
|
client = Imgix::Client.new(hosts: [
|
55
63
|
"demos-1.imgix.net",
|
data/test/units/path_test.rb
CHANGED
@@ -48,6 +48,30 @@ class PathTest < Imgix::Test
|
|
48
48
|
assert_equal url, path.markalign('middle', 'center').to_url
|
49
49
|
end
|
50
50
|
|
51
|
+
def test_param_keys_are_escaped
|
52
|
+
ix_url = unsigned_client.path('demo.png').to_url({
|
53
|
+
:'hello world' => 'interesting'
|
54
|
+
})
|
55
|
+
|
56
|
+
assert_equal "https://demo.imgix.net/demo.png?hello%20world=interesting", ix_url
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_param_values_are_escaped
|
60
|
+
ix_url = unsigned_client.path('demo.png').to_url({
|
61
|
+
hello_world: '/foo"> <script>alert("hacked")</script><'
|
62
|
+
})
|
63
|
+
|
64
|
+
assert_equal "https://demo.imgix.net/demo.png?hello_world=%2Ffoo%22%3E%20%3Cscript%3Ealert%28%22hacked%22%29%3C%2Fscript%3E%3C", ix_url
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_base64_param_variants_are_base64_encoded
|
68
|
+
ix_url = unsigned_client.path('~text').to_url({
|
69
|
+
txt64: 'I cannøt belîév∑ it wors! 😱'
|
70
|
+
})
|
71
|
+
|
72
|
+
assert_equal "https://demo.imgix.net/~text?txt64=SSBjYW5uw7h0IGJlbMOuw6l24oiRIGl0IHdvcu-jv3MhIPCfmLE", ix_url
|
73
|
+
end
|
74
|
+
|
51
75
|
def test_host_is_required
|
52
76
|
assert_raises(ArgumentError) {Imgix::Client.new}
|
53
77
|
end
|
@@ -88,7 +112,7 @@ class PathTest < Imgix::Test
|
|
88
112
|
|
89
113
|
def test_configure_library_param
|
90
114
|
library = "sinatra"
|
91
|
-
version =
|
115
|
+
version = Imgix::VERSION
|
92
116
|
client = Imgix::Client.new(host: 'demo.imgix.net', library_param: library, library_version: version) # enabled by default
|
93
117
|
url = client.path('/images/demo.png').to_url
|
94
118
|
|
@@ -96,8 +120,11 @@ class PathTest < Imgix::Test
|
|
96
120
|
end
|
97
121
|
|
98
122
|
private
|
99
|
-
|
100
123
|
def client
|
101
124
|
@client ||= Imgix::Client.new(host: 'demo.imgix.net', secure_url_token: '10adc394', include_library_param: false)
|
102
125
|
end
|
126
|
+
|
127
|
+
def unsigned_client
|
128
|
+
@unsigned_client ||= Imgix::Client.new(host: 'demo.imgix.net', include_library_param: false)
|
129
|
+
end
|
103
130
|
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: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Sutton
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2016-02-24 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: addressable
|