Skip to content

Commit 59b3869

Browse files
authored
Merge pull request #34 from violetviolinist/special-characters-url
allow non-ascii characters in url generation
2 parents 62dd4e8 + f1445eb commit 59b3869

File tree

4 files changed

+130
-4
lines changed

4 files changed

+130
-4
lines changed

imagekitio.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
2828
# spec.add_dependency "rails", "~> 5.2.0", ">= 5.2.0"
2929
spec.add_dependency 'carrierwave', '>= 0.7', '< 2.2'
3030
spec.add_dependency 'rest-client', '~> 2.1', ">=2.1"
31+
spec.add_dependency 'addressable', '~> 2.8'
3132

3233
# spec.add_development_dependency "sqlite3"
3334
spec.add_development_dependency "rails", "~> 5.2.0", ">= 5.2.0"

lib/imagekit/sdk/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module Imagekit
22
module Sdk
3-
VERSION = '1.0.9'
3+
VERSION = '1.0.10'
44
end
55
end

lib/imagekit/url.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# Url holds url generation method
44

55
require "cgi"
6+
require "addressable/uri"
67
require "openssl"
78
require_relative "./utils/formatter"
89
require_relative "./constants/defaults"
@@ -46,16 +47,16 @@ def build_url(options)
4647
result_url_hash = {'host': "", 'path': "", 'query': ""}
4748
existing_query=nil
4849
if path != ""
49-
parsed_url = URI.parse(path)
50+
parsed_url = Addressable::URI.parse(path)
5051
existing_query=parsed_url.query
51-
parsed_host = URI(url_endpoint)
52+
parsed_host = Addressable::URI.parse(url_endpoint)
5253
result_url_hash[:scheme] = parsed_host.scheme
5354

5455
# making sure single '/' at end
5556
result_url_hash[:host] = parsed_host.host.to_s.chomp("/") + parsed_host.path.chomp("/") + "/"
5657
result_url_hash[:path] = trim_slash(parsed_url.path)
5758
else
58-
parsed_url = URI.parse(src)
59+
parsed_url = Addressable::URI.parse(src)
5960
existing_query=parsed_url.query
6061
host = parsed_url.host
6162
result_url_hash[:userinfo] = parsed_url.userinfo if parsed_url.userinfo

test/imagekit/url_test.rb

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@
4343

4444
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
4545
end
46+
47+
it "test_generate_url_with_path_with_special_characters" do
48+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
49+
url_obj = Url.new(request_obj)
50+
51+
options = {path: "/γειασας/Fjällräven_KnSJwp87u6q.png",
52+
url_endpoint: @url_endpoint,
53+
transformation: [{height: 300, width: 400}],
54+
}
55+
url = url_obj.generate_url(options)
56+
57+
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
58+
end
4659

4760
it "test_generate_url_without_slash" do
4861
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
@@ -55,6 +68,19 @@
5568

5669
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
5770
end
71+
72+
it "test_generate_url_with_path_without_slash_with_special_characters" do
73+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
74+
url_obj = Url.new(request_obj)
75+
76+
options = {path: "γειασας/Fjällräven_KnSJwp87u6q.png",
77+
url_endpoint: @url_endpoint,
78+
transformation: [{height: 300, width: 400}],
79+
}
80+
url = url_obj.generate_url(options)
81+
82+
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
83+
end
5884

5985
it "test_generate_url_with_override_url_endpoint_without_slash" do
6086
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
@@ -67,6 +93,18 @@
6793

6894
expect(url).to eq("https://ik.imagekit.io/your_override_imagekit_id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
6995
end
96+
97+
it "test_generate_url_with_override_url_endpoint_without_slash_with_special_characters" do
98+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
99+
url_obj = Url.new(request_obj)
100+
options = {path: "/γειασας/Fjällräven_KnSJwp87u6q.png",
101+
url_endpoint: "https://ik.imagekit.io/your_override_imagekit_id",
102+
transformation: [{height: 300, width: 400}],
103+
}
104+
url = url_obj.generate_url(options)
105+
106+
expect(url).to eq("https://ik.imagekit.io/your_override_imagekit_id/tr:h-300,w-400/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
107+
end
70108

71109
it "test_generate_url_with_override_url_endpoint_with_slash" do
72110
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
@@ -81,6 +119,30 @@
81119
expect(url).to eq("https://ik.imagekit.io/your_override_imagekit_id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
82120
end
83121

122+
it "test_generate_url_with_override_url_endpoint_with_slash_with_special_characters" do
123+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
124+
url_obj = Url.new(request_obj)
125+
options = {path: "/γειασας/Fjällräven_KnSJwp87u6q.png",
126+
url_endpoint: "https://ik.imagekit.io/your_override_imagekit_id/",
127+
transformation: [{height: 300, width: 400}],
128+
}
129+
url = url_obj.generate_url(options)
130+
131+
expect(url).to eq("https://ik.imagekit.io/your_override_imagekit_id/tr:h-300,w-400/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
132+
end
133+
134+
it "test_generate_url_with_override_url_endpoint_with_special_characters" do
135+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
136+
url_obj = Url.new(request_obj)
137+
options = {path: "/γειασας/Fjällräven_KnSJwp87u6q.png",
138+
url_endpoint: "https://www.Fjällräven.com/your_override_imagekit_id/",
139+
transformation: [{height: 300, width: 400}],
140+
}
141+
url = url_obj.generate_url(options)
142+
143+
expect(url).to eq("https://www.Fjällräven.com/your_override_imagekit_id/tr:h-300,w-400/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}")
144+
end
145+
84146
it "test_generate_url_with_new_transformation_parameters" do
85147
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
86148
url_obj = Url.new(request_obj)
@@ -195,6 +257,20 @@
195257

196258
expect(url).to eq("https://imagekit.io/your-imgekit-id/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&tr=h-300,w-400")
197259
end
260+
261+
it "test_generate_url_with_special_characters_transformation_parameters_setted_to_query" do
262+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
263+
url_obj = Url.new(request_obj)
264+
265+
options = {path: "/γειασας/Fjällräven_KnSJwp87u6q.png",
266+
url_endpoint: @url_endpoint,
267+
transformation: [{height: 300, width: 400}],
268+
transformation_position: "query",
269+
}
270+
url = url_obj.generate_url(options)
271+
272+
expect(url).to eq("https://imagekit.io/your-imgekit-id/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&tr=h-300,w-400")
273+
end
198274

199275
it "test_generate_url_with_query_parameters" do
200276
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
@@ -209,6 +285,19 @@
209285
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&v=123&blank_parameter")
210286
end
211287

288+
it "test_generate_url_with_query_parameters_with_special_characters" do
289+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
290+
url_obj = Url.new(request_obj)
291+
292+
options = {path: "/default-image.jpg",
293+
query_parameters: {"γειασας": "γειασας"},
294+
transformation: [{height: 300, width: 400}]
295+
}
296+
url = url_obj.generate_url(options)
297+
298+
expect(url).to eq("https://imagekit.io/your-imgekit-id/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&γειασας=γειασας")
299+
end
300+
212301
it "test_generate_url_with_src_checking_query_param_added" do
213302
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
214303
url_obj = Url.new(request_obj)
@@ -256,6 +345,27 @@
256345

257346
end
258347

348+
it "test_generate_url_with_src_with_special_characters" do
349+
# Test url generation with src param
350+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
351+
url_obj = Url.new(request_obj)
352+
353+
options = {src: "https://www.Fjällräve.com/γειασας/Fjällräven_KnSJwp87u6q.png",
354+
transformation: [{height: "300",
355+
width: "400",
356+
format: "jpg",
357+
progressive: "true",
358+
effect_sharpen: "-",
359+
effect_contrast: "1",},
360+
{rotation: 90},],
361+
transformation_position: "query"}
362+
363+
url = url_obj.generate_url(options)
364+
365+
expect(url).to eq("https://www.Fjällräve.com/γειασας/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&tr=h-300,w-400,f-jpg,pr-true,e-sharpen,e-contrast-1:rt-90")
366+
367+
end
368+
259369
it "test_generate_url_with_src_and_query_parameters_is_path" do
260370
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
261371
url_obj = Url.new(request_obj)
@@ -289,6 +399,20 @@
289399
expect(url).to include("https://ik.imagekit.io/your_imagekit_id/endpoint/tr:h-300,w-400/default-image.jpg?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&ik-s=")
290400
end
291401

402+
it "test_generate_url_with_path_and_signed_with_special_characters" do
403+
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
404+
url_obj = Url.new(request_obj)
405+
406+
options = {path: "/Fjällräven_KnSJwp87u6q.png",
407+
url_endpoint: "https://ik.imagekit.io/your_imagekit_id/endpoint/",
408+
transformation: [{height: "300", width: "400"}],
409+
signed: true,}
410+
411+
url = url_obj.generate_url(options)
412+
413+
expect(url).to include("https://ik.imagekit.io/your_imagekit_id/endpoint/tr:h-300,w-400/Fjällräven_KnSJwp87u6q.png?ik-sdk-version=ruby-#{Imagekit::Sdk::VERSION}&ik-s=")
414+
end
415+
292416
it "test_url_with_invalid_args_returns_as_it_is" do
293417
request_obj=ImageKitRequest.new(@private_key,@public_key,@url_endpoint)
294418
url_obj = Url.new(request_obj)

0 commit comments

Comments
 (0)