imglab 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +66 -48
- data/lib/imglab/source.rb +4 -4
- data/lib/imglab/utils.rb +24 -4
- data/lib/imglab/version.rb +1 -1
- data/lib/imglab.rb +21 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78faee0a4ff6558f7ece0d993cac443de2b480e0c230a5586dc6fdbc8c6867db
|
4
|
+
data.tar.gz: e6cbb31a3d1e86d8b54cc7c9985b10cd3555886d941ca66925b6752f8bacf51d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb456e7d68b9e66ae072ec27f5232c455cd32f040b3b029dbd0d03362709f22bbd3c61a3b2d908589eff85ff28dde67ceba0c7dd2d12ccb458a121ac035c4974
|
7
|
+
data.tar.gz: 4053ed5c372ad62d78bd0af9c8d762b0cd9a6dfa9cba6215328d59bfd73e75951b96c97986ee5657a455954d3fd09cc4d8ce91292edda7061a67b006e8e3c329
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem "imglab", "~> 0.
|
10
|
+
gem "imglab", "~> 0.2"
|
11
11
|
```
|
12
12
|
|
13
13
|
And then execute:
|
@@ -24,7 +24,7 @@ $ gem install imglab
|
|
24
24
|
|
25
25
|
## Ruby compatibility
|
26
26
|
|
27
|
-
`imglab` has been successfully tested on the following Ruby versions: `3.0`, `2.7`, `2.6`, `2.5`, `2.4`, `2.3`, `2.2`, `2.1` and `2.0`.
|
27
|
+
`imglab` has been successfully tested on the following Ruby versions: `3.1`, `3.0`, `2.7`, `2.6`, `2.5`, `2.4`, `2.3`, `2.2`, `2.1` and `2.0`.
|
28
28
|
|
29
29
|
## Generating URLs
|
30
30
|
|
@@ -34,28 +34,28 @@ The easiest way to generate a URL is to specify the `source_name`, `path` and re
|
|
34
34
|
|
35
35
|
```ruby
|
36
36
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600)
|
37
|
-
"https://
|
37
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600"
|
38
38
|
|
39
39
|
Imglab.url("avatars", "user-01.jpeg", width: 300, height: 300, mode: :crop, crop: :face, format: :webp)
|
40
|
-
"https://
|
40
|
+
"https://avatars.imglab-cdn.net/user-01.jpeg?width=300&height=300&mode=crop&crop=face&format=webp"
|
41
41
|
```
|
42
42
|
|
43
43
|
If some specific settings are required for the source you can use an instance of `Imglab::Source` class instead of a `string` source name:
|
44
44
|
|
45
45
|
```ruby
|
46
46
|
Imglab.url(Imglab::Source.new("assets"), "image.jpeg", width: 500, height: 600)
|
47
|
-
"https://
|
47
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600"
|
48
48
|
```
|
49
49
|
|
50
50
|
### Using secure image sources
|
51
51
|
|
52
|
-
For sources that require signed URLs you can specify `secure_key` and `secure_salt` attributes
|
52
|
+
For sources that require signed URLs you can specify `secure_key` and `secure_salt` attributes:
|
53
53
|
|
54
54
|
```ruby
|
55
|
-
source = Imglab::Source.new(secure_key: "assets-secure-key", secure_salt: "assets-secure-salt")
|
55
|
+
source = Imglab::Source.new("assets", secure_key: "assets-secure-key", secure_salt: "assets-secure-salt")
|
56
56
|
|
57
57
|
Imglab.url(source, "image.jpeg", width: 500, height: 600)
|
58
|
-
"https://
|
58
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&signature=generated-signature"
|
59
59
|
```
|
60
60
|
|
61
61
|
`signature` query parameter will be automatically generated and attached to the returned URL.
|
@@ -68,7 +68,7 @@ In the case that HTTP schema is required instead of HTTPS you can set `https` at
|
|
68
68
|
|
69
69
|
```ruby
|
70
70
|
Imglab.url(Imglab::Source.new("assets", https: false), "image.jpeg", width: 500, height: 600)
|
71
|
-
"http://
|
71
|
+
"http://assets.imglab-cdn.net/image.jpeg?width=500&height=600"
|
72
72
|
```
|
73
73
|
|
74
74
|
> Note: HTTPS is the default and recommended way to generate URLs with imglab.
|
@@ -79,21 +79,21 @@ Any parameter from the imglab API can be used to generate URLs with `Imglab.url`
|
|
79
79
|
|
80
80
|
```ruby
|
81
81
|
Imglab.url("assets", "image.jpeg", trim: "color", trim_color: "black")
|
82
|
-
"https://
|
82
|
+
"https://assets.imglab-cdn.net/image.jpeg?trim=color&trim-color=black"
|
83
83
|
```
|
84
84
|
|
85
85
|
It is possible to use strings too:
|
86
86
|
|
87
87
|
```ruby
|
88
88
|
Imglab.url("assets", "image.jpeg", "trim" => "color", "trim-color" => "black")
|
89
|
-
"https://
|
89
|
+
"https://assets.imglab-cdn.net/image.jpeg?trim=color&trim-color=black"
|
90
90
|
```
|
91
91
|
|
92
92
|
And quoted symbols for Ruby version >= 2.2:
|
93
93
|
|
94
94
|
```ruby
|
95
95
|
Imglab.url("assets", "image.jpeg", trim: "color", "trim-color": "black")
|
96
|
-
"https://
|
96
|
+
"https://assets.imglab-cdn.net/image.jpeg?trim=color&trim-color=black"
|
97
97
|
```
|
98
98
|
|
99
99
|
### Specifying color parameters
|
@@ -103,19 +103,19 @@ Some imglab parameters can receive a color as value. It is possible to specify t
|
|
103
103
|
```ruby
|
104
104
|
# Specifying a RGB color as string
|
105
105
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: :contain, background_color: "255,0,0")
|
106
|
-
"https://
|
106
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=255%2C0%2C0"
|
107
107
|
|
108
108
|
# Specifying a RGBA color as string
|
109
109
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: :contain, background_color: "255,0,0,128")
|
110
|
-
"https://
|
110
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=255%2C0%2C0%2C128"
|
111
111
|
|
112
112
|
# Specifying a named color as string
|
113
113
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: :contain, background_color: "red")
|
114
|
-
"https://
|
114
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=red"
|
115
115
|
|
116
116
|
# Specifying a hexadecimal color as string
|
117
117
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: :contain, background_color: "F00")
|
118
|
-
"https://
|
118
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=F00"
|
119
119
|
```
|
120
120
|
|
121
121
|
You can additionally use `Imglab::Color` helpers to specify these color values:
|
@@ -126,15 +126,15 @@ include Imglab::Color
|
|
126
126
|
|
127
127
|
# Using color helper for a RGB color
|
128
128
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: "contain", background_color: color(255, 0, 0))
|
129
|
-
"https://
|
129
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=255%2C0%2C0"
|
130
130
|
|
131
131
|
# Using color helper for a RGBA color
|
132
132
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: "contain", background_color: color(255, 0, 0, 128))
|
133
|
-
"https://
|
133
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=255%2C0%2C0%2C128"
|
134
134
|
|
135
135
|
# Using color helper for a named color
|
136
136
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, mode: "contain", background_color: color("red"))
|
137
|
-
"https://
|
137
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&mode=contain&background-color=red"
|
138
138
|
```
|
139
139
|
|
140
140
|
> Note: specify hexadecimal color values using `Imglab::Color` helpers is not allowed. You can use strings instead.
|
@@ -146,15 +146,15 @@ Some imglab parameters can receive a position as value. It is possible to specif
|
|
146
146
|
```ruby
|
147
147
|
# Specifying a horizontal and vertical position as string
|
148
148
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: "left,top")
|
149
|
-
"https://
|
149
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=left%2Ctop"
|
150
150
|
|
151
151
|
# Specifying a vertical and horizontal position as string
|
152
152
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: "top,left")
|
153
|
-
"https://
|
153
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=top%2Cleft"
|
154
154
|
|
155
155
|
# Specifying a position as string
|
156
156
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: "left")
|
157
|
-
"https://
|
157
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=left"
|
158
158
|
```
|
159
159
|
|
160
160
|
You can additionally use `Imglab::Position` helpers to specify these position values:
|
@@ -165,15 +165,15 @@ include Imglab::Position
|
|
165
165
|
|
166
166
|
# Using position helper for a horizontal and vertical position
|
167
167
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: position("left", "top"))
|
168
|
-
"https://
|
168
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=left%2Ctop"
|
169
169
|
|
170
|
-
# Using position
|
170
|
+
# Using position helper for a vertical and horizontal position
|
171
171
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: position("top", "left"))
|
172
|
-
"https://
|
172
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=top%2Cleft"
|
173
173
|
|
174
|
-
# Using position
|
174
|
+
# Using position helper for a position
|
175
175
|
Imglab.url("assets", "image.jpeg", width: 500, height: 500, mode: "crop", crop: position("left"))
|
176
|
-
"https://
|
176
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=500&mode=crop&crop=left"
|
177
177
|
```
|
178
178
|
|
179
179
|
### Specifying URL parameters
|
@@ -182,14 +182,14 @@ Some imglab parameters can receive URLs as values. It is possible to specify the
|
|
182
182
|
|
183
183
|
```ruby
|
184
184
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, watermark: "logo.svg")
|
185
|
-
"https://
|
185
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&watermark=logo.svg"
|
186
186
|
```
|
187
187
|
|
188
188
|
And even use parameters if required:
|
189
189
|
|
190
190
|
```ruby
|
191
191
|
Imglab.url("assets", "image.jpeg", width: 500, height: 600, watermark: "logo.svg?width=100&format=png")
|
192
|
-
"https://
|
192
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&watermark=logo.svg%3Fwidth%3D100%26format%3Dpng"
|
193
193
|
```
|
194
194
|
|
195
195
|
Additionally you can use nested `Imglab.url` calls to specify these URL values:
|
@@ -202,7 +202,7 @@ Imglab.url(
|
|
202
202
|
height: 600,
|
203
203
|
watermark: Imglab.url("assets", "logo.svg", width: 100, format: "png")
|
204
204
|
)
|
205
|
-
"https://
|
205
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&watermark=https%3A%2F%2Fassets.imglab-cdn.net%2Flogo.svg%3Fwidth%3D100%26format%3Dpng"
|
206
206
|
```
|
207
207
|
|
208
208
|
If the resource is located in a different source we can specify it using `Imglab.url`:
|
@@ -215,7 +215,7 @@ Imglab.url(
|
|
215
215
|
height: 600,
|
216
216
|
watermark: Imglab.url("marketing", "logo.svg", width: 100, format: "png")
|
217
217
|
)
|
218
|
-
"https://
|
218
|
+
"https://assets.imglab-cdn.net/image.jpeg?width=500&height=600&watermark=https%3A%2F%2Fmarketing.imglab-cdn.net%2Flogo.svg%3Fwidth%3D100%26format%3Dpng"
|
219
219
|
```
|
220
220
|
|
221
221
|
Using secure sources for URLs parameter values is possible too:
|
@@ -234,55 +234,73 @@ Imglab.url(
|
|
234
234
|
|
235
235
|
`signature` query parameter will be automatically generated and attached to the nested URL value.
|
236
236
|
|
237
|
+
### Specifying URLs with expiration timestamp
|
238
|
+
|
239
|
+
The `expires` parameter allows you to specify a UNIX timestamp in seconds after which the request is expired.
|
240
|
+
|
241
|
+
If a Ruby `Time` instance is used as value to `expires` parameter it will be automatically converted to UNIX timestamp. In the following example, we specify an expiration time of one hour, adding 3600 seconds to the current time:
|
242
|
+
|
243
|
+
```ruby
|
244
|
+
Imglab.url("assets", "image.jpeg", width: 500, expires: Time.now.utc + 3600)
|
245
|
+
```
|
246
|
+
|
247
|
+
If you are using Rails or Active Support you can use it's time helpers:
|
248
|
+
|
249
|
+
```ruby
|
250
|
+
Imglab.url("assets", "image.jpeg", width: 500, expires: 1.hour.from_now)
|
251
|
+
```
|
252
|
+
|
253
|
+
> Note: The `expires` parameter should be used in conjunction with secure sources. Otherwise, `expires` value could be tampered with.
|
254
|
+
|
237
255
|
## Generating URLs for on-premises imglab server
|
238
256
|
|
239
257
|
For on-premises imglab server is possible to define custom sources pointing to your server location.
|
240
258
|
|
241
259
|
* `:https` - a `boolean` value specifying if the source should use https or not (default: `true`)
|
242
|
-
* `:host` - a `string` specifying the host where the imglab server is located. (default: `cdn.
|
260
|
+
* `:host` - a `string` specifying the host where the imglab server is located. (default: `imglab-cdn.net`)
|
243
261
|
* `:port` - a `integer` specifying a port where the imglab server is located.
|
244
|
-
* `:subdomains` - a `boolean` value specifying if the source should be specified using subdomains instead of using the path. (default: `
|
262
|
+
* `:subdomains` - a `boolean` value specifying if the source should be specified using subdomains instead of using the path. (default: `true`)
|
245
263
|
|
246
|
-
If we have our on-premises imglab server at `http://
|
264
|
+
If we have our on-premises imglab server at `http://my-company.com:8080` with a source named `images` we can use the following source settings to access a `logo.png` image:
|
247
265
|
|
248
266
|
```ruby
|
249
|
-
source = Imglab::Source.new("
|
267
|
+
source = Imglab::Source.new("images", https: false, host: "my-company.com", port: 8080)
|
250
268
|
|
251
269
|
Imglab.url(source, "logo.png", width: 300, height: 300, format: "png")
|
252
|
-
"http://
|
270
|
+
"http://images.my-company.com:8080/logo.png?width=300&height=300&format=png"
|
253
271
|
```
|
254
272
|
|
255
273
|
It is possible to use secure sources too:
|
256
274
|
|
257
275
|
```ruby
|
258
276
|
source = Imglab::Source.new(
|
259
|
-
"
|
277
|
+
"images",
|
260
278
|
https: false,
|
261
|
-
host: "
|
279
|
+
host: "my-company.com",
|
262
280
|
port: 8080,
|
263
|
-
secure_key: "
|
264
|
-
secure_salt: "
|
281
|
+
secure_key: "images-secure-key",
|
282
|
+
secure_salt: "images-secure-salt"
|
265
283
|
)
|
266
284
|
|
267
285
|
Imglab.url(source, "logo.png", width: 300, height: 300, format: "png")
|
268
|
-
"http://
|
286
|
+
"http://images.my-company.com:8080/logo.png?width=300&height=300&format=png&signature=generated-signature"
|
269
287
|
```
|
270
288
|
|
271
|
-
### Using
|
289
|
+
### Using sources with disabled subdomains
|
272
290
|
|
273
|
-
In the case that your on-premises imglab server is configured to use source names as subdomains you can set `subdomains` attribute to `
|
291
|
+
In the case that your on-premises imglab server is configured to use source names as paths instead of subdomains you can set `subdomains` attribute to `false`:
|
274
292
|
|
275
293
|
```ruby
|
276
294
|
source = Imglab::Source.new(
|
277
|
-
"
|
295
|
+
"images",
|
278
296
|
https: false,
|
279
|
-
host: "
|
297
|
+
host: "my-company.com",
|
280
298
|
port: 8080,
|
281
|
-
subdomains:
|
299
|
+
subdomains: false
|
282
300
|
)
|
283
301
|
|
284
|
-
Imglab.url(source, "
|
285
|
-
"http://
|
302
|
+
Imglab.url(source, "logo.png", width: 300, height: 300, format: "png")
|
303
|
+
"http://my-company.com:8080/images/logo.png?width=300&height=300&format=png"
|
286
304
|
```
|
287
305
|
|
288
306
|
## License
|
data/lib/imglab/source.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Imglab::Source
|
2
2
|
DEFAULT_HTTPS = true
|
3
|
-
DEFAULT_HOST = "cdn.
|
4
|
-
DEFAULT_SUBDOMAINS =
|
3
|
+
DEFAULT_HOST = "imglab-cdn.net"
|
4
|
+
DEFAULT_SUBDOMAINS = true
|
5
5
|
|
6
6
|
attr_reader :name, :https, :port, :secure_key, :secure_salt, :subdomains
|
7
7
|
|
@@ -13,7 +13,7 @@ class Imglab::Source
|
|
13
13
|
# @param port [Integer] the port where the imglab server is located, only for imglab on-premises.
|
14
14
|
# @param secure_key [String] the source secure key.
|
15
15
|
# @param secure_salt [String] the source secure salt.
|
16
|
-
# @param subdomains [Boolean] specify if the source should use subdomains to build the host name, only for imglab on-premises.
|
16
|
+
# @param subdomains [Boolean] specify if the source should use subdomains instead of paths to build the host name, only for imglab on-premises.
|
17
17
|
# @return [Imglab::Source] with the specified options.
|
18
18
|
def initialize(name, host: DEFAULT_HOST, https: DEFAULT_HTTPS, port: nil, secure_key: nil, secure_salt: nil, subdomains: DEFAULT_SUBDOMAINS)
|
19
19
|
@name = name
|
@@ -50,7 +50,7 @@ class Imglab::Source
|
|
50
50
|
# Returns if the source is secure or not.
|
51
51
|
#
|
52
52
|
# @return [Boolean]
|
53
|
-
def
|
53
|
+
def is_secure?
|
54
54
|
@secure_key && @secure_salt
|
55
55
|
end
|
56
56
|
|
data/lib/imglab/utils.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
class Imglab::Utils
|
2
|
-
NORMALIZE_PATH_PREFIX_REGEXP = Regexp.compile(
|
3
|
-
NORMALIZE_PATH_SUFFIX_REGEXP = Regexp.compile(
|
2
|
+
NORMALIZE_PATH_PREFIX_REGEXP = Regexp.compile(/\A\/*/)
|
3
|
+
NORMALIZE_PATH_SUFFIX_REGEXP = Regexp.compile(/\/*$/)
|
4
|
+
|
5
|
+
WEB_URI_SCHEMES = %w[https http]
|
4
6
|
|
5
7
|
# Returns a normalized path where suffix and prefix slashes are removed.
|
6
8
|
#
|
@@ -16,14 +18,32 @@ class Imglab::Utils
|
|
16
18
|
# @return [Hash]
|
17
19
|
def self.normalize_params(params)
|
18
20
|
params.inject({}) do |normalized_params, value|
|
19
|
-
normalized_params
|
20
|
-
normalized_params
|
21
|
+
normalized_params.merge(normalize_param(dasherize(value[0]), value[1]))
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
25
|
+
# Returns a boolean value indicating whether a string is a valid HTTP/HTTPS URI or not.
|
26
|
+
#
|
27
|
+
# @param uri [String]
|
28
|
+
# @return [Boolean]
|
29
|
+
def self.web_uri?(uri)
|
30
|
+
WEB_URI_SCHEMES.include?(URI.parse(uri).scheme)
|
31
|
+
rescue URI::Error
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
24
35
|
private
|
25
36
|
|
26
37
|
def self.dasherize(value)
|
27
38
|
value.to_s.gsub("_", "-")
|
28
39
|
end
|
40
|
+
|
41
|
+
def self.normalize_param(key, value)
|
42
|
+
case
|
43
|
+
when key == "expires" && value.instance_of?(Time)
|
44
|
+
{key => value.to_i}
|
45
|
+
else
|
46
|
+
{key => value}
|
47
|
+
end
|
48
|
+
end
|
29
49
|
end
|
data/lib/imglab/version.rb
CHANGED
data/lib/imglab.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "erb"
|
2
|
+
|
1
3
|
require "imglab/version"
|
2
4
|
require "imglab/source"
|
3
5
|
require "imglab/signature"
|
@@ -15,9 +17,9 @@ module Imglab
|
|
15
17
|
# @raise [ArgumentError] when the source name or source parameter has a not expected type.
|
16
18
|
#
|
17
19
|
# @example Creating a URL specifying source name as string
|
18
|
-
# Imglab.url("assets", "example.jpeg", width: 500, height: 600) #=> "https://
|
20
|
+
# Imglab.url("assets", "example.jpeg", width: 500, height: 600) #=> "https://assets.imglab-cdn.net/example.jpeg?width=500&height=600"
|
19
21
|
# @example Creating a URL specifying a Imglab::Source
|
20
|
-
# Imglab.url(Imglab::Source.new("assets"), "example.jpeg", width: 500, height: 600) #=> "https://
|
22
|
+
# Imglab.url(Imglab::Source.new("assets"), "example.jpeg", width: 500, height: 600) #=> "https://assets.imglab-cdn.net/example.jpeg?width=500&height=600"
|
21
23
|
def self.url(source_name_or_source, path, params = {})
|
22
24
|
case source_name_or_source
|
23
25
|
when String
|
@@ -41,17 +43,31 @@ module Imglab
|
|
41
43
|
source.host,
|
42
44
|
source.port,
|
43
45
|
nil,
|
44
|
-
File.join("/", source.path(normalized_path)),
|
46
|
+
File.join("/", source.path(encode_path(normalized_path))),
|
45
47
|
nil,
|
46
48
|
encode_params(source, normalized_path, normalized_params),
|
47
49
|
nil
|
48
50
|
).to_s
|
49
51
|
end
|
50
52
|
|
53
|
+
def self.encode_path(path)
|
54
|
+
if Utils.web_uri?(path)
|
55
|
+
encode_path_component(path)
|
56
|
+
else
|
57
|
+
path.split("/").map do |path_component|
|
58
|
+
encode_path_component(path_component)
|
59
|
+
end.join("/")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.encode_path_component(path_component)
|
64
|
+
ERB::Util.url_encode(path_component)
|
65
|
+
end
|
66
|
+
|
51
67
|
def self.encode_params(source, path, params)
|
52
68
|
return encode_empty_params(source, path) if params.empty?
|
53
69
|
|
54
|
-
if source.
|
70
|
+
if source.is_secure?
|
55
71
|
signature = Signature.generate(source, path, URI.encode_www_form(params))
|
56
72
|
|
57
73
|
URI.encode_www_form(params.merge(signature: signature))
|
@@ -61,7 +77,7 @@ module Imglab
|
|
61
77
|
end
|
62
78
|
|
63
79
|
def self.encode_empty_params(source, path)
|
64
|
-
if source.
|
80
|
+
if source.is_secure?
|
65
81
|
signature = Signature.generate(source, path)
|
66
82
|
|
67
83
|
URI.encode_www_form(signature: signature)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imglab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- imglab
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Official Ruby library to integrate with imglab services.
|
14
14
|
email:
|
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
|
-
rubygems_version: 3.
|
57
|
+
rubygems_version: 3.1.6
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
60
|
summary: Official imglab Ruby library.
|