imagekitio 1.0.10 → 2.0.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +292 -82
  3. data/Rakefile +1 -1
  4. data/lib/active_storage/active_storage.rb +2 -0
  5. data/lib/active_storage/service/ik_file.rb +111 -0
  6. data/lib/active_storage/service/image_kit_io_service.rb +185 -0
  7. data/lib/carrierwave/carrierwave.rb +79 -0
  8. data/lib/carrierwave/storage/ik_file.rb +8 -7
  9. data/lib/carrierwave/storage/imagekit_store.rb +54 -51
  10. data/lib/carrierwave/support/uri_filename.rb +9 -7
  11. data/lib/imagekitio/api_service/bulk.rb +58 -0
  12. data/lib/imagekitio/api_service/custom_metadata_field.rb +52 -0
  13. data/lib/imagekitio/api_service/file.rb +162 -0
  14. data/lib/imagekitio/api_service/folder.rb +49 -0
  15. data/lib/imagekitio/base.rb +12 -0
  16. data/lib/imagekitio/client.rb +186 -0
  17. data/lib/imagekitio/configurable.rb +43 -0
  18. data/lib/imagekitio/constant.rb +36 -0
  19. data/lib/imagekitio/constants/default.rb +22 -0
  20. data/lib/imagekitio/constants/error.rb +69 -0
  21. data/lib/imagekitio/constants/file.rb +11 -0
  22. data/lib/imagekitio/constants/supported_transformation.rb +64 -0
  23. data/lib/imagekitio/constants/url.rb +14 -0
  24. data/lib/imagekitio/errors.rb +4 -0
  25. data/lib/imagekitio/railtie.rb +1 -1
  26. data/lib/imagekitio/request.rb +79 -0
  27. data/lib/imagekitio/sdk/version.rb +5 -0
  28. data/lib/imagekitio/url.rb +241 -0
  29. data/lib/imagekitio/utils/calculation.rb +44 -0
  30. data/lib/imagekitio/utils/formatter.rb +48 -0
  31. data/lib/imagekitio/utils/option_validator.rb +36 -0
  32. data/lib/imagekitio.rb +10 -83
  33. metadata +41 -15
  34. data/lib/imagekit/constants/defaults.rb +0 -20
  35. data/lib/imagekit/constants/errors.rb +0 -77
  36. data/lib/imagekit/constants/file.rb +0 -5
  37. data/lib/imagekit/constants/supported_transformation.rb +0 -57
  38. data/lib/imagekit/constants/url.rb +0 -9
  39. data/lib/imagekit/file.rb +0 -133
  40. data/lib/imagekit/imagekit.rb +0 -117
  41. data/lib/imagekit/resource.rb +0 -56
  42. data/lib/imagekit/sdk/version.rb +0 -5
  43. data/lib/imagekit/url.rb +0 -237
  44. data/lib/imagekit/utils/calculation.rb +0 -36
  45. data/lib/imagekit/utils/formatter.rb +0 -29
@@ -1,4 +1,4 @@
1
- module Imagekitio
1
+ module ImageKitIo
2
2
  class Railtie < ::Rails::Railtie
3
3
  end
4
4
  end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "base64"
4
+ require "rest-client"
5
+ require "json"
6
+ require_relative './constant'
7
+ # Request requests and sends data from server
8
+ module ImageKitIo
9
+ class Request
10
+ include Constantable
11
+
12
+ attr_reader :private_key, :public_key, :url_endpoint, :transformation_position, :options
13
+
14
+ def initialize(private_key, public_key, url_endpoint, transformation_position = nil, options = nil)
15
+ @private_key = private_key
16
+ @public_key = public_key
17
+ @url_endpoint = url_endpoint
18
+ @transformation_position = transformation_position || constants.TRANSFORMATION_POSITION
19
+ @options = options || {}
20
+ end
21
+
22
+ # creates required headers
23
+ def create_headers
24
+ headers = {'Accept-Encoding': "application/json", 'Content-Type': "application/json"}
25
+ headers.update(auth_headers)
26
+ end
27
+
28
+ def auth_headers
29
+ encoded_private_key = Base64.strict_encode64(@private_key+":")
30
+ {Authorization: "Basic #{encoded_private_key}"}
31
+ end
32
+
33
+ # request method communicates with server
34
+ def request(method, url, headers = create_headers, payload = nil)
35
+ headers ||= create_headers
36
+ response = {response: nil, error: nil}
37
+ begin
38
+ resp = RestClient::Request.new(method: method,
39
+ url: url,
40
+ headers: headers,
41
+ payload: payload).execute
42
+
43
+ if (resp.code >= 200) && (resp.code < 204)
44
+ if (resp.headers[:content_type].include? "application/json")
45
+ response[:response] = JSON.parse(resp.body.to_s)
46
+ else
47
+ raise =RestClient::ExceptionWithResponse
48
+ end
49
+ elsif resp.code == 204
50
+ response[:response] = {'success': true}
51
+ end
52
+
53
+ rescue RestClient::ExceptionWithResponse => err
54
+ response[:error] = if err.http_code == 404
55
+ {'message': err.response.to_s}
56
+ else
57
+ JSON.parse(err.response)
58
+ end
59
+ end
60
+ response
61
+ end
62
+
63
+ def request_stream(method, url, headers: nil, payload: nil, **options, &block)
64
+ headers ||= create_headers
65
+ response = { response: nil, error: nil }
66
+ begin
67
+ RestClient::Request.execute(method: method,
68
+ url: url,
69
+ headers: headers,
70
+ payload: payload,
71
+ **options,
72
+ block_response: block
73
+ )
74
+ rescue RestClient::ExceptionWithResponse => err
75
+ err.http_code == 404 ? response[:error] = {'message': err.response.to_s} : JSON.parse(err.response)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,5 @@
1
+ module ImageKitIo
2
+ module Sdk
3
+ VERSION = '2.0.0'
4
+ end
5
+ end
@@ -0,0 +1,241 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Url holds url generation method
4
+
5
+ require "cgi"
6
+ require "addressable/uri"
7
+ require "openssl"
8
+ require_relative "./utils/formatter"
9
+ require_relative "sdk/version.rb"
10
+
11
+ module ImageKitIo
12
+ class Url
13
+ include Constantable
14
+
15
+ def initialize(request_obj)
16
+ @req_obj = request_obj
17
+ end
18
+
19
+ def generate_url(options)
20
+ if options.key? :src
21
+ options[:transformation_position] = constants.TRANSFORMATION_POSITION
22
+ end
23
+ extended_options = extend_url_options(options)
24
+ build_url(extended_options)
25
+ end
26
+
27
+ def build_url(options)
28
+ # build url from all options
29
+
30
+ path = options.fetch(:path, "")
31
+ src = options.fetch(:src, "")
32
+ url_endpoint = options.fetch(:url_endpoint, "")
33
+ transformation_position = options[:transformation_position]
34
+
35
+ unless constants.VALID_TRANSFORMATION_POSITION.include? transformation_position
36
+ raise ArgumentError, constants.INVALID_TRANSFORMATION_POS
37
+ end
38
+
39
+ src_param_used_for_url = false
40
+ if (src != "") || (transformation_position == constants.QUERY_TRANSFORMATION_POSITION)
41
+ src_param_used_for_url = true
42
+ end
43
+
44
+ if path == "" && src == ""
45
+ return ""
46
+ end
47
+
48
+ result_url_hash = {'host': "", 'path': "", 'query': ""}
49
+ existing_query=nil
50
+ if path != ""
51
+ parsed_url = Addressable::URI.parse(path)
52
+ existing_query=parsed_url.query
53
+ parsed_host = Addressable::URI.parse(url_endpoint)
54
+ result_url_hash[:scheme] = parsed_host.scheme
55
+
56
+ # making sure single '/' at end
57
+ result_url_hash[:host] = parsed_host.host.to_s.chomp("/") + parsed_host.path.chomp("/") + "/"
58
+ result_url_hash[:path] = trim_slash(parsed_url.path)
59
+ else
60
+ parsed_url = Addressable::URI.parse(src)
61
+ existing_query=parsed_url.query
62
+ host = parsed_url.host
63
+ result_url_hash[:userinfo] = parsed_url.userinfo if parsed_url.userinfo
64
+ result_url_hash[:host] = host
65
+ result_url_hash[:scheme] = parsed_url.scheme
66
+ result_url_hash[:path] = parsed_url.path
67
+ src_param_used_for_url = true
68
+ end
69
+ query_params = {}
70
+ if existing_query!=nil
71
+ existing_query.split("&").each do |part|
72
+ parts=part.split("=")
73
+ if parts.length==2
74
+ query_params[parts[0]]=parts[1]
75
+ end
76
+ end
77
+ end
78
+ options.fetch(:query_parameters, {}).each do |key, value|
79
+ query_params[key]=value
80
+ end
81
+ transformation_str = transformation_to_str(options[:transformation]).chomp("/")
82
+
83
+ unless transformation_str.nil? || transformation_str.strip.empty?
84
+ if (transformation_position == constants.QUERY_TRANSFORMATION_POSITION) || src_param_used_for_url == true
85
+ result_url_hash[:query] = "#{constants.TRANSFORMATION_PARAMETER}=#{transformation_str}"
86
+ query_params[:tr]=transformation_str
87
+ else
88
+ result_url_hash[:path] = "#{constants.TRANSFORMATION_PARAMETER}:#{transformation_str}/#{result_url_hash[:path]}"
89
+ end
90
+
91
+ end
92
+
93
+ result_url_hash[:host] = result_url_hash[:host].to_s.reverse.chomp("/").reverse
94
+ result_url_hash[:path] = result_url_hash[:path].chomp("/")
95
+ result_url_hash[:scheme] ||= "https"
96
+
97
+ query_param_arr = []
98
+ query_param_arr.push("ik-sdk-version=ruby-"+ImageKitIo::Sdk::VERSION)
99
+ query_params.each do |key, value|
100
+ if value.to_s == ""
101
+ query_param_arr.push(key.to_s)
102
+ else
103
+ query_param_arr.push(key.to_s + "=" + value.to_s)
104
+ end
105
+ end
106
+
107
+ query_param_str = query_param_arr.join("&")
108
+ result_url_hash[:query] = query_param_str
109
+
110
+ # Signature String and Timestamp
111
+ # We can do this only for URLs that are created using urlEndpoint and path parameter
112
+ # because we need to know the endpoint to be able to remove it from the URL to create a signature
113
+ # for the remaining. With the src parameter, we would not know the "pattern" in the URL
114
+ if options[:signed] && !(options[:src])
115
+ intermediate_url = result_url_hash.fetch(:scheme, "") + "://" + result_url_hash.fetch(:host, "") + result_url_hash.fetch(:path, "")
116
+ if result_url_hash[:query]!=nil && result_url_hash[:query]!=""
117
+ intermediate_url += result_url_hash.fetch(:query, "")
118
+ end
119
+ end
120
+
121
+ url=hash_to_url(result_url_hash)
122
+ if options[:signed]
123
+ private_key = options[:private_key]
124
+ expire_seconds = options[:expire_seconds]
125
+ expire_timestamp = get_signature_timestamp(expire_seconds)
126
+ url_signature = get_signature(private_key, url, url_endpoint, expire_timestamp)
127
+ query_param_arr.push(constants.SIGNATURE_PARAMETER + "=" + url_signature)
128
+
129
+ if expire_timestamp && (expire_timestamp != constants.TIMESTAMP)
130
+ query_param_arr.push(constants.TIMESTAMP_PARAMETER + "=" + expire_timestamp.to_s)
131
+ end
132
+
133
+ query_param_str = query_param_arr.join("&")
134
+ result_url_hash[:query] = query_param_str
135
+
136
+ url=hash_to_url(result_url_hash)
137
+ end
138
+ url
139
+ end
140
+
141
+ def transformation_to_str(transformation)
142
+ # creates transformation_position string for url
143
+ # from transformation dictionary
144
+
145
+ unless transformation.is_a?(Array)
146
+ return ""
147
+ end
148
+
149
+ parsed_transforms = []
150
+ (0..(transformation.length - 1)).each do |i|
151
+ parsed_transform_step = []
152
+
153
+ transformation[i].keys.each do |key|
154
+ transform_key = constants.SUPPORTED_TRANS.fetch(key, nil)
155
+ transform_key ||= key
156
+
157
+ if transform_key == "oi" || transform_key == "di"
158
+ transformation[i][key][0] = "" if transformation[i][key][0] == "/"
159
+ transformation[i][key] = transformation[i][key].gsub("/", "@@")
160
+ end
161
+
162
+ if transformation[i][key] == "-"
163
+ parsed_transform_step.push(transform_key)
164
+ elsif transform_key == 'raw'
165
+ parsed_transform_step.push(transformation[i][key])
166
+ else
167
+ parsed_transform_step.push("#{transform_key}#{constants.TRANSFORM_KEY_VALUE_DELIMITER}#{transformation[i][key]}")
168
+ end
169
+ end
170
+ parsed_transforms.push(parsed_transform_step.join(constants.TRANSFORM_DELIMITER))
171
+ end
172
+ parsed_transforms.join(constants.CHAIN_TRANSFORM_DELIMITER)
173
+ end
174
+
175
+ def get_signature_timestamp(seconds)
176
+ # this function returns either default time stamp
177
+ # or current unix time and expiry seconds to get
178
+ # signature time stamp
179
+
180
+ if seconds.to_i == 0
181
+ constants.DEFAULT_TIMESTAMP
182
+ else
183
+ DateTime.now.strftime("%s").to_i + seconds.to_i
184
+ end
185
+ end
186
+
187
+ def get_signature(private_key, url, url_endpoint, expiry_timestamp)
188
+ # creates signature(hashed hex key) and returns from
189
+ # private_key, url, url_endpoint and expiry_timestamp
190
+ if expiry_timestamp==0
191
+ expiry_timestamp=constants.DEFAULT_TIMESTAMP
192
+ end
193
+ if url_endpoint[url_endpoint.length-1]!="/"
194
+ url_endpoint+="/"
195
+ end
196
+ replaced_url=url.gsub(url_endpoint, "")
197
+ replaced_url = replaced_url + expiry_timestamp.to_s
198
+ OpenSSL::HMAC.hexdigest("SHA1", private_key, replaced_url)
199
+ end
200
+
201
+ def extend_url_options(options)
202
+ attr_dict = {"public_key": @req_obj.public_key,
203
+ "private_key": @req_obj.private_key,
204
+ "url_endpoint": @req_obj.url_endpoint,
205
+ "transformation_position": @req_obj.transformation_position, }
206
+ # extending url options
207
+ attr_dict.merge(options)
208
+ end
209
+
210
+ def hash_to_url(url_hash)
211
+ generated_url = url_hash.fetch(:scheme, "") + "://" + url_hash.fetch(:host, "") + url_hash.fetch(:path, "")
212
+ if url_hash[:query] != ""
213
+ generated_url = generated_url + "?" + url_hash.fetch(:query, "")
214
+ return generated_url
215
+ end
216
+ generated_url
217
+ end
218
+
219
+ def trim_slash(str, both = true)
220
+ if str == ""
221
+ return ""
222
+ end
223
+ # remove slash from a string
224
+ # if both is not provide trims both slash
225
+ # example - '/abc/' returns 'abc'
226
+ # if both=false it will only trim end slash
227
+ # example - '/abc/' returns '/abc'
228
+ # NOTE: IT'S RECOMMENDED TO USE inbuilt .chomp('string you want to remove')
229
+ # FOR REMOVING ONLY TRAILING SLASh
230
+ if both
231
+ str[0].chomp("/") + str[1..-2] + str[-1].chomp("/")
232
+ else
233
+ str.chomp("/")
234
+ end
235
+ end
236
+
237
+ # class Imagekit
238
+
239
+ # end
240
+ end
241
+ end
@@ -0,0 +1,44 @@
1
+ require "date"
2
+ require "securerandom"
3
+
4
+ module ImageKitIo
5
+ module Utils
6
+ module Calculation
7
+ DEFAULT_TIME_DIFF = 60 * 30
8
+
9
+ module_function
10
+
11
+ def is_valid_hex(hex_string)
12
+ # checks if hexadecimal value is valid or not
13
+ /^[[:xdigit:]]+$/ === hex_string
14
+ end
15
+
16
+ def hamming_distance(first, second)
17
+ # Calculate Hamming distance between to hex string
18
+ unless is_valid_hex(first) && is_valid_hex(second)
19
+ raise ArgumentError, "Both argument should be hexadecimal"
20
+ end
21
+ a = first.to_i(16)
22
+ b = second.to_i(16)
23
+ (a ^ b).to_s(2).count("1")
24
+ end
25
+
26
+ def get_authenticated_params(token, expire, private_key)
27
+ # return authenticated param
28
+ default_expire = DateTime.now.strftime("%s").to_i + DEFAULT_TIME_DIFF
29
+ token ||= SecureRandom.uuid
30
+
31
+ auth_params = {'token': token, 'expire': expire, 'signature': ""}
32
+ unless private_key
33
+ return nil
34
+ end
35
+
36
+ signature = OpenSSL::HMAC.hexdigest("SHA1", private_key, token.to_s + expire.to_s)
37
+ auth_params[:token] = token
38
+ auth_params[:expire] = expire || default_expire
39
+ auth_params[:signature] = signature
40
+ auth_params
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ require 'json'
2
+
3
+ module ImageKitIo
4
+ module Utils
5
+ module Formatter
6
+
7
+ module_function
8
+ def snake_to_camel(word)
9
+ word_list = word.split("_")
10
+ result = []
11
+ word_list&.each { |i|
12
+ if i == word_list[0]
13
+ result.push(i)
14
+ else
15
+ result.push(i.capitalize)
16
+ end
17
+ }
18
+ result.join
19
+ end
20
+
21
+ def camel_to_snake(camel_word)
22
+ # convert camel case to snake case
23
+ camel_word.to_s.gsub(/::/, "/")
24
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
25
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
26
+ .tr("-", "_")
27
+ .downcase
28
+ end
29
+
30
+ def request_formatter(data)
31
+ result = {}
32
+ data.each do |key, val|
33
+ result[snake_to_camel(key.to_s)] = val
34
+ end
35
+ result
36
+ end
37
+
38
+ def format_to_json(options, key, expected_class)
39
+ options ||= {}
40
+ val = options[key]
41
+ if !val.nil? && val.is_a?(expected_class)
42
+ options[key] = options[key].to_json
43
+ end
44
+ options
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,36 @@
1
+ require_relative './formatter'
2
+
3
+ module ImageKitIo
4
+ module Utils
5
+ module OptionValidator
6
+ include Formatter
7
+ include Constantable
8
+
9
+ module_function
10
+
11
+ def validate_upload_options(options)
12
+
13
+ # Validates upload value, checks if params are valid,
14
+ # changes snake to camel case which is supported by
15
+ # ImageKitIo server
16
+
17
+
18
+ response_list = []
19
+ options.each do |key, val|
20
+ if constants.VALID_UPLOAD_OPTIONS.include?(key.to_s)
21
+ if val.is_a?(Array)
22
+ val = val.join(",")
23
+ end
24
+ if val.is_a?(TrueClass) || val.is_a?(FalseClass)
25
+ val = val.to_s
26
+ end
27
+ options[key] = val
28
+ else
29
+ return false
30
+ end
31
+ end
32
+ request_formatter(options)
33
+ end
34
+ end
35
+ end
36
+ end
data/lib/imagekitio.rb CHANGED
@@ -1,86 +1,13 @@
1
- require "imagekitio/railtie"
1
+ require "imagekitio/railtie" if defined? Rails
2
2
 
3
- require 'carrierwave'
4
3
  require 'base64'
5
- require_relative './carrierwave/storage/imagekit_store'
6
- require_relative './carrierwave/storage/ik_file'
7
- require_relative './carrierwave/support/uri_filename'
8
- require_relative './imagekit/imagekit.rb'
9
- require_relative "./imagekit/resource"
10
- require_relative "./imagekit/file"
11
- require_relative "./imagekit/url"
12
- require_relative "./imagekit/utils/calculation"
13
4
 
14
- module CarrierWave
15
- module Uploader
16
- class Base
17
-
18
- def initialize(*)
19
- ik_config=Rails.application.config.imagekit
20
- @imagekit=ImageKit::ImageKitClient.new(ik_config[:private_key],ik_config[:public_key],ik_config[:url_endpoint])
21
- @options={}
22
- end
23
-
24
- configure do |config|
25
- config.storage_engines[:imagekit_store] = 'CarrierWave::Storage::ImageKitStore'
26
- end
27
-
28
- def filename
29
- if options!=nil
30
- @options=options
31
- end
32
- folder=nil
33
- begin
34
- folder=store_dir
35
- rescue
36
- end
37
-
38
- if folder!=nil
39
- @options[:folder]=folder
40
- end
41
-
42
- if self.file!=nil
43
- base64=Base64.encode64(::File.open(self.file.file, "rb").read)
44
- resp=@imagekit.upload_file(open(self.file.file,'rb'),self.file.filename,@options)
45
- # ::File.delete(self.file.file)
46
- res=resp[:response].to_json
47
- if res!="null"
48
- res
49
- else
50
- "{\"filePath\":\"\",\"url\":\"\",\"name\":\"\"}"
51
- end
52
- else
53
- "{\"filePath\":\"\",\"url\":\"\",\"name\":\"\"}"
54
- end
55
- end
56
-
57
- def fileId
58
- JSON.parse(self.identifier)['fileId']
59
- end
60
-
61
- def blob
62
- JSON.parse(self.identifier)
63
- end
64
-
65
- def url_with(opt)
66
- path=JSON.parse(self.identifier)['filePath']
67
- opt[:path]=path
68
- url=@imagekit.url(opt)
69
- end
70
-
71
- def url
72
- JSON.parse(self.identifier)['url']
73
- end
74
-
75
- def options
76
- options={}
77
- end
78
-
79
- def store_dir
80
- store_dir=nil
81
- end
82
- end
83
-
84
- end
85
-
86
- end
5
+ require_relative './imagekitio/constant'
6
+ require_relative './imagekitio/base'
7
+ require_relative './imagekitio/configurable'
8
+ require_relative './imagekitio/client'
9
+ require_relative "./imagekitio/request"
10
+ require_relative "./imagekitio/url"
11
+ require_relative './imagekitio/api_service/custom_metadata_field'
12
+ require_relative './imagekitio/api_service/file'
13
+ require_relative './imagekitio/api_service/folder'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imagekitio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ImageKit.io team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-26 00:00:00.000000000 Z
11
+ date: 2021-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
@@ -64,6 +64,20 @@ dependencies:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '2.8'
67
+ - !ruby/object:Gem::Dependency
68
+ name: activestorage
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 5.2.0
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 5.2.0
67
81
  - !ruby/object:Gem::Dependency
68
82
  name: rails
69
83
  requirement: !ruby/object:Gem::Requirement
@@ -93,23 +107,35 @@ extra_rdoc_files: []
93
107
  files:
94
108
  - README.md
95
109
  - Rakefile
110
+ - lib/active_storage/active_storage.rb
111
+ - lib/active_storage/service/ik_file.rb
112
+ - lib/active_storage/service/image_kit_io_service.rb
113
+ - lib/carrierwave/carrierwave.rb
96
114
  - lib/carrierwave/storage/ik_file.rb
97
115
  - lib/carrierwave/storage/imagekit_store.rb
98
116
  - lib/carrierwave/support/uri_filename.rb
99
- - lib/imagekit/constants/defaults.rb
100
- - lib/imagekit/constants/errors.rb
101
- - lib/imagekit/constants/file.rb
102
- - lib/imagekit/constants/supported_transformation.rb
103
- - lib/imagekit/constants/url.rb
104
- - lib/imagekit/file.rb
105
- - lib/imagekit/imagekit.rb
106
- - lib/imagekit/resource.rb
107
- - lib/imagekit/sdk/version.rb
108
- - lib/imagekit/url.rb
109
- - lib/imagekit/utils/calculation.rb
110
- - lib/imagekit/utils/formatter.rb
111
117
  - lib/imagekitio.rb
118
+ - lib/imagekitio/api_service/bulk.rb
119
+ - lib/imagekitio/api_service/custom_metadata_field.rb
120
+ - lib/imagekitio/api_service/file.rb
121
+ - lib/imagekitio/api_service/folder.rb
122
+ - lib/imagekitio/base.rb
123
+ - lib/imagekitio/client.rb
124
+ - lib/imagekitio/configurable.rb
125
+ - lib/imagekitio/constant.rb
126
+ - lib/imagekitio/constants/default.rb
127
+ - lib/imagekitio/constants/error.rb
128
+ - lib/imagekitio/constants/file.rb
129
+ - lib/imagekitio/constants/supported_transformation.rb
130
+ - lib/imagekitio/constants/url.rb
131
+ - lib/imagekitio/errors.rb
112
132
  - lib/imagekitio/railtie.rb
133
+ - lib/imagekitio/request.rb
134
+ - lib/imagekitio/sdk/version.rb
135
+ - lib/imagekitio/url.rb
136
+ - lib/imagekitio/utils/calculation.rb
137
+ - lib/imagekitio/utils/formatter.rb
138
+ - lib/imagekitio/utils/option_validator.rb
113
139
  - lib/tasks/imagekitio/imagekitio_tasks.rake
114
140
  homepage: https://imagekit.io
115
141
  licenses:
@@ -131,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
157
  - !ruby/object:Gem::Version
132
158
  version: '0'
133
159
  requirements: []
134
- rubygems_version: 3.2.22
160
+ rubygems_version: 3.2.32
135
161
  signing_key:
136
162
  specification_version: 4
137
163
  summary: Automate image optimization on rails platforms.
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Enum for defaults
4
-
5
- class Default
6
- TRANSFORMATION_POSITION = "path"
7
- QUERY_TRANSFORMATION_POSITION = "query"
8
- VALID_TRANSFORMATION_POSITION = [TRANSFORMATION_POSITION,
9
- QUERY_TRANSFORMATION_POSITION,].freeze
10
- DEFAULT_TIMESTAMP = "9999999999"
11
- TRANSFORMATION_PARAMETER = "tr"
12
- CHAIN_TRANSFORM_DELIMITER = ":"
13
- TRANSFORM_DELIMITER = ","
14
- TRANSFORM_KEY_VALUE_DELIMITER = "-"
15
-
16
- SIGNATURE_PARAMETER = "ik-s"
17
- TIMESTAMP_PARAMETER = "ik-t"
18
- TIMESTAMP = "9999999999"
19
-
20
- end