imagekitio 1.0.10 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../constant'
3
+ require_relative '../utils/option_validator'
4
+
5
+ module ImageKitIo
6
+ module ApiService
7
+ class File
8
+ include Utils::OptionValidator
9
+ include Constantable
10
+
11
+ # This File class holds file related operations like
12
+ # upload, list etc
13
+ def initialize(req_obj)
14
+ @req_obj = req_obj
15
+ end
16
+
17
+ # uploads files with required arguments, supports bot url and binary
18
+ # Options types:
19
+ # - `extensions` should be array of hash
20
+ # eg: option['extension'] = [
21
+ # { 'name' => 'remove-bg', 'options' => { 'add_shadow' => 'true' } },
22
+ # { 'name' => 'google-auto-tagging', 'minConfidence' => 80 }
23
+ # ]
24
+ # - `custom_metadata` should be hash
25
+ # eg: option['custom_metadata'] = {
26
+ # "SKU": "VS882HJ2JD",
27
+ # "price": 599.99,
28
+ # "brand": "H&M",
29
+ # "discount": 30
30
+ # }
31
+ def upload(file: nil, file_name: nil, **options)
32
+ raise ArgumentError, constants.MISSING_UPLOAD_FILE_PARAMETER unless file
33
+ raise ArgumentError, constants.MISSING_UPLOAD_FILE_PARAMETER unless file_name
34
+
35
+ options = format_to_json(options, :extensions, Array)
36
+ options = format_to_json(options, :custom_metadata, Hash)
37
+ options = validate_upload_options(options || {})
38
+ if options.is_a?(FalseClass)
39
+ raise ArgumentError, "Invalid Upload option"
40
+ else
41
+ headers = @req_obj.create_headers
42
+ payload = {multipart: true, file: file, fileName: file_name}.merge(options)
43
+ url = "#{constants.BASE_URL}#{constants.UPLOAD}"
44
+ @req_obj.request("post", url, headers, payload)
45
+ end
46
+ end
47
+
48
+ def update_details(file_id: nil, **options)
49
+ unless options.fetch(:tags, []).is_a?(Array)
50
+ raise ArgumentError, constants.UPDATE_DATA_TAGS_INVALID
51
+ end
52
+ unless options.fetch(:custom_coordinates, "").is_a?(String)
53
+ raise ArgumentError, constants.UPDATE_DATA_COORDS_INVALID
54
+ end
55
+ url = "#{constants.BASE_URL}/#{file_id}/details/"
56
+ headers = @req_obj.create_headers
57
+ payload = request_formatter(options || {})
58
+ @req_obj.request("patch", url, headers, payload.to_json)
59
+ end
60
+
61
+ def list(**options)
62
+ # returns list of files on ImageKitIo Server
63
+ # :options dictionary of options
64
+ formatted_options = request_formatter(options || {})
65
+ raise KeyError(constants.LIST_FILES_INPUT_MISSING) unless formatted_options.is_a?(Hash)
66
+ url = constants.BASE_URL
67
+ headers = @req_obj.create_headers.update({params: formatted_options})
68
+ @req_obj.request("get", url, headers, formatted_options)
69
+ end
70
+
71
+ def details(file_identifier: nil)
72
+ # Get detail of file by file_identifier
73
+ if file_identifier == "" || file_identifier.nil?
74
+ raise ArgumentError, "file_identifier is required"
75
+ end
76
+ url = "#{constants.BASE_URL}/#{file_identifier}/details/"
77
+ headers = @req_obj.create_headers
78
+ @req_obj.request("get", url, headers)
79
+ end
80
+
81
+ def get_metadata(file_id: nil)
82
+ # Get metadata of a file by file_id
83
+ if file_id == "" || file_id.nil?
84
+ raise ArgumentError, "file_id is required"
85
+ end
86
+ url = "#{constants.BASE_URL}/#{file_id}/metadata"
87
+ @req_obj.request("get", url, @req_obj.create_headers)
88
+ end
89
+
90
+ def delete(file_id: nil)
91
+ # Delete a file_id by file_id
92
+ if file_id == "" || file_id.nil?
93
+ raise ArgumentError, "file_id is required"
94
+ end
95
+ url = "#{constants.BASE_URL}/#{file_id}"
96
+ headers = @req_obj.create_headers
97
+ @req_obj.request("delete", url, headers)
98
+ end
99
+
100
+ def purge_cache(file_url: nil)
101
+ # purges cache from server by file_url
102
+ if file_url == "" || file_url.nil?
103
+ raise ArgumentError, "file_url is required"
104
+ end
105
+ url = "#{constants.BASE_URL}/purge"
106
+ payload = {'url': file_url}
107
+ @req_obj.request("post", url, @req_obj.create_headers, payload)
108
+ end
109
+
110
+ def purge_cache_status(request_id: nil)
111
+ # This function is to get cache_status
112
+ if request_id == "" || request_id.nil?
113
+ raise ArgumentError, "remote_file_url is required"
114
+ end
115
+ url = "#{constants.BASE_URL}/purge/#{request_id}"
116
+ @req_obj.request("get", url, @req_obj.create_headers)
117
+ end
118
+
119
+ def get_metadata_from_remote_url(remote_file_url: nil)
120
+ if remote_file_url == "" || remote_file_url.nil?
121
+ raise ArgumentError, "remote_file_url is required"
122
+ end
123
+ url = "#{constants.REMOTE_METADATA_FULL_URL}?url=#{remote_file_url}"
124
+ @req_obj.request("get", url, @req_obj.create_headers)
125
+ end
126
+
127
+ def stream_file(remote_file_url: nil, &block)
128
+ if remote_file_url == '' || remote_file_url.nil?
129
+ raise ArgumentError, 'remote_file_url is required'
130
+ end
131
+ @req_obj.request_stream('get', remote_file_url, headers: @req_obj.create_headers, &block)
132
+ end
133
+
134
+ def copy(source_file_path: nil, destination_path: nil)
135
+ if source_file_path == '' || source_file_path.nil? || destination_path == '' || destination_path.nil?
136
+ raise ArgumentError, 'parameters required'
137
+ end
138
+ url = "#{constants.BASE_URL}/copy"
139
+ payload = { 'sourceFilePath': source_file_path, 'destinationPath': destination_path }
140
+ @req_obj.request('post', url, @req_obj.create_headers, payload)
141
+ end
142
+
143
+ def move(source_file_path: nil, destination_path: nil)
144
+ if source_file_path == '' || source_file_path.nil? || destination_path == '' || destination_path.nil?
145
+ raise ArgumentError, 'parameters required'
146
+ end
147
+ url = "#{constants.BASE_URL}/move"
148
+ payload = { 'sourceFilePath': source_file_path, 'destinationPath': destination_path }
149
+ @req_obj.request('post', url, @req_obj.create_headers, payload)
150
+ end
151
+
152
+ def rename(file_path: nil, new_file_name: nil, **options)
153
+ if file_path == '' || file_path.nil? || new_file_name == '' || new_file_name.nil?
154
+ raise ArgumentError, 'parameters required'
155
+ end
156
+ url = "#{constants.BASE_URL}/rename"
157
+ payload = { 'filePath': file_path, 'newFileName': new_file_name }.merge(request_formatter(options)).to_json
158
+ @req_obj.request('put', url, @req_obj.create_headers, payload)
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,49 @@
1
+ require_relative '../constant'
2
+
3
+ module ImageKitIo
4
+ module ApiService
5
+ class Folder
6
+ include Constantable
7
+
8
+ def initialize(req_obj)
9
+ @req_obj = req_obj
10
+ end
11
+
12
+ def create(folder_name: nil, parent_folder_path: nil)
13
+ if folder_name == '' || folder_name.nil?
14
+ raise ArgumentError, 'folder_name is required'
15
+ end
16
+ url = "#{constants.API_BASE_URL}/folder"
17
+ payload = { 'folderName': folder_name, 'parentFolderPath': parent_folder_path }.to_json
18
+ @req_obj.request('post', url, @req_obj.create_headers, payload)
19
+ end
20
+
21
+ def delete(folder_path: nil)
22
+ if folder_path == '' || folder_path.nil?
23
+ raise ArgumentError, 'folder_path is required'
24
+ end
25
+ url = "#{constants.API_BASE_URL}/folder"
26
+ payload = { 'folderPath': folder_path }
27
+ @req_obj.request('delete', url, @req_obj.create_headers, payload)
28
+ end
29
+
30
+ def copy(source_folder_path: nil, destination_path: nil)
31
+ if source_folder_path == '' || source_folder_path.nil? || destination_path == '' || destination_path.nil?
32
+ raise ArgumentError, 'Parameters required'
33
+ end
34
+ url = "#{constants.BULK_BASE_URL}/copyFolder"
35
+ payload = { 'sourceFolderPath': source_folder_path, 'destinationPath': destination_path }
36
+ @req_obj.request('post', url, @req_obj.create_headers, payload)
37
+ end
38
+
39
+ def move(source_folder_path: nil, destination_path: nil)
40
+ if source_folder_path == '' || source_folder_path.nil? || destination_path == '' || destination_path.nil?
41
+ raise ArgumentError, 'Parameters required'
42
+ end
43
+ url = "#{constants.BULK_BASE_URL}/moveFolder"
44
+ payload = { 'sourceFolderPath': source_folder_path, 'destinationPath': destination_path }
45
+ @req_obj.request('post', url, @req_obj.create_headers, payload)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,12 @@
1
+ require_relative './configurable'
2
+
3
+ module ImageKitIo
4
+ include ImageKitIo::Configurable
5
+
6
+ class << self
7
+ def client
8
+ ik_config = config
9
+ @client ||= ImageKitIo::Client.new(ik_config.private_key, ik_config.public_key, ik_config.url_endpoint)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+
3
+ $VERBOSE = nil
4
+
5
+ require_relative "./request"
6
+ require_relative "./url"
7
+ require_relative "./utils/calculation"
8
+ require_relative './constant'
9
+ require_relative './configurable'
10
+ require_relative './api_service/custom_metadata_field'
11
+ require_relative './api_service/folder'
12
+ require_relative './api_service/file'
13
+ require_relative './api_service/bulk'
14
+
15
+ module ImageKitIo
16
+ # ImageKitIo class holds each method will be used by user
17
+ class Client
18
+ include Utils::Calculation
19
+ include Constantable
20
+
21
+ attr_reader :file_service, :custom_metadata_field_service, :folder_service, :bulk_service
22
+
23
+ def initialize(private_key, public_key, url_endpoint, transformation_pos = nil, options = nil)
24
+ unless(private_key.is_a?(String) && private_key.to_s.strip.length != 0)
25
+ raise ArgumentError, constants.MISSING_PRIVATE_KEY
26
+ end
27
+ unless(public_key.is_a?(String) && public_key.to_s.strip.length != 0)
28
+ raise ArgumentError, constants.MISSING_PUBLIC_KEY
29
+ end
30
+ unless(url_endpoint.is_a?(String) && url_endpoint.to_s.strip.length != 0)
31
+ raise ArgumentError, constants.MISSING_URL_ENDPOINT
32
+ end
33
+
34
+ @private_key = private_key
35
+ @public_key = public_key
36
+ @url_endpoint = url_endpoint
37
+ @transformation_position = transformation_pos
38
+ @options = options
39
+
40
+ @ik_req = Request.new(private_key, public_key, url_endpoint)
41
+ @url_obj = Url.new(@ik_req)
42
+ @file_service = ApiService::File.new(@ik_req)
43
+ @custom_metadata_field_service = ApiService::CustomMetadataField.new(@ik_req)
44
+ @folder_service = ApiService::Folder.new(@ik_req)
45
+ @bulk_service = ApiService::Bulk.new(@ik_req)
46
+ end
47
+
48
+ def set_ik_request(ik_req)
49
+ # setter for imagekit request mainly will be used for
50
+ # test
51
+ @ik_req = ik_req
52
+ end
53
+
54
+ def url(options = {})
55
+ @url_obj.generate_url(options)
56
+ end
57
+
58
+ def upload_file(file: nil, file_name: nil, **options)
59
+ # upload file to imagekit server
60
+ @file_service.upload(file: file, file_name: file_name, **options)
61
+ end
62
+
63
+ def list_files(options = {})
64
+ # list all files
65
+ @file_service.list(**options)
66
+ end
67
+
68
+ def get_file_details(file_id: nil)
69
+ # Get file detail by file-id or file_url
70
+ @file_service.details(file_identifier: file_id)
71
+ end
72
+
73
+ def update_file_details(file_id: nil, **options)
74
+ # update file details by file id and other options payload
75
+ @file_service.update_details(file_id: file_id, **options)
76
+ end
77
+
78
+ def delete_file(file_id: nil)
79
+ # Delete a file by file-id
80
+ @file_service.delete(file_id: file_id)
81
+ end
82
+
83
+ def get_file_metadata(file_id: nil)
84
+ # Get metadata of a file by file-id
85
+ @file_service.get_metadata(file_id: file_id)
86
+ end
87
+
88
+ def purge_file_cache(file_url: nil)
89
+ # Purge cache from ImageKitIo server by file_url
90
+ @file_service.purge_cache(file_url: file_url)
91
+ end
92
+
93
+ def purge_file_cache_status(request_id: nil)
94
+ @file_service.purge_cache_status(request_id: request_id.to_s)
95
+ end
96
+
97
+ # Get metadata from remote_file_url
98
+ # param remote_file_url: url string of remote file
99
+ def get_remote_file_url_metadata(remote_file_url: "")
100
+ @file_service.get_metadata_from_remote_url(remote_file_url: remote_file_url)
101
+ end
102
+
103
+ def stream_file(file_url: nil, &block)
104
+ @file_service.stream_file(remote_file_url: file_url, &block)
105
+ end
106
+
107
+ def copy_file(source_file_path: nil, destination_path: nil)
108
+ @file_service.copy(source_file_path: source_file_path, destination_path: destination_path)
109
+ end
110
+
111
+ def move_file(source_file_path: nil, destination_path: nil)
112
+ @file_service.move(source_file_path: source_file_path, destination_path: destination_path)
113
+ end
114
+
115
+ def rename_file(file_path: nil, new_file_name: nil, **options)
116
+ @file_service.rename(file_path: file_path, new_file_name: new_file_name, **options)
117
+ end
118
+
119
+ def add_bulk_tags(file_ids: [], tags: [])
120
+ @bulk_service.add_tags(file_ids: file_ids, tags: tags)
121
+ end
122
+
123
+ def delete_bulk_files(file_ids: [])
124
+ # Delete file in bulks by list of file id
125
+ @bulk_service.remove_files(file_ids: file_ids)
126
+ end
127
+
128
+ def delete_bulk_tags(file_ids: [], tags: [])
129
+ @bulk_service.remove_tags(file_ids: file_ids, tags: tags)
130
+ end
131
+
132
+ def delete_bulk_ai_tags(file_ids: [], ai_tags: [])
133
+ @bulk_service.remove_ai_tags(file_ids: file_ids, ai_tags: ai_tags)
134
+ end
135
+
136
+ def bulk_job_status(job_id: nil)
137
+ @bulk_service.job_status(job_id: job_id)
138
+ end
139
+
140
+ def create_folder(folder_name: nil, parent_folder_path: "/")
141
+ @folder_service.create(folder_name: folder_name, parent_folder_path: parent_folder_path)
142
+ end
143
+
144
+ def delete_folder(folder_path: nil)
145
+ @folder_service.delete(folder_path: folder_path)
146
+ end
147
+
148
+ def copy_folder(source_folder_path: nil, destination_path: nil)
149
+ @folder_service.copy(source_folder_path: source_folder_path, destination_path: destination_path)
150
+ end
151
+
152
+ def move_folder(source_folder_path: nil, destination_path: nil)
153
+ @folder_service.move(source_folder_path: source_folder_path, destination_path: destination_path)
154
+ end
155
+
156
+ def create_custom_metadata_field(name: nil, label: nil, schema: {})
157
+ @custom_metadata_field_service.create(name: name, label: label, schema: schema)
158
+ end
159
+
160
+ def get_custom_metadata_fields(options = {})
161
+ @custom_metadata_field_service.list(**options)
162
+ end
163
+
164
+ def update_custom_metadata_field(id: nil, label: nil, schema: nil)
165
+ @custom_metadata_field_service.update(id: id, label: label, schema: schema)
166
+ end
167
+
168
+ def delete_custom_metadata_field(id: nil)
169
+ @custom_metadata_field_service.delete(id: id)
170
+ end
171
+
172
+ def phash_distance(first, second)
173
+ # Get hamming distance between two phash(image hash) to check
174
+ # similarity between images
175
+ if first.to_s.strip == "" || second.to_s.strip == ""
176
+ raise ArgumentError, constants.MISSING_PHASH_VALUE
177
+ end
178
+ hamming_distance(first, second)
179
+ end
180
+
181
+ def get_authentication_parameters(token = nil, expire = nil)
182
+ # Get Authentication params
183
+ get_authenticated_params(token, expire, @ik_req.private_key)
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,43 @@
1
+ module ImageKitIo
2
+ module Configurable
3
+ def self.included(klass)
4
+ klass.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def config
9
+ @config ||= Configuration.new
10
+ end
11
+
12
+ def configure
13
+ yield config
14
+ initialize_service
15
+ end
16
+
17
+ def initialize_service
18
+ if config.service == :carrierwave
19
+ require_relative '../carrierwave/carrierwave'
20
+ elsif config.service == :active_storage
21
+ require_relative '../active_storage/active_storage'
22
+ end
23
+ end
24
+
25
+ def constants
26
+ config.constants
27
+ end
28
+ end
29
+
30
+ class Configuration
31
+ AVAILABLE_SERVICE = [:carrierwave, :active_storage]
32
+ attr_accessor :public_key, :private_key, :url_endpoint, :service
33
+
34
+ def service
35
+ @service&.to_sym || :carrierwave
36
+ end
37
+
38
+ def constants
39
+ @constants ||= ImageKitIo::Constant
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,36 @@
1
+ require_relative './constants/default'
2
+ require_relative './constants/error'
3
+ require_relative './constants/file'
4
+ require_relative './constants/supported_transformation'
5
+ require_relative './constants/url'
6
+ require_relative './configurable'
7
+
8
+ module ImageKitIo
9
+ module Constantable
10
+ def self.included(base)
11
+ def constants
12
+ ImageKitIo.constants
13
+ end
14
+ end
15
+ end
16
+ class Constant
17
+ include Constants::Default
18
+ include Constants::Error
19
+ include Constants::File
20
+ include Constants::SupportedTransformation
21
+ include Constants::URL
22
+
23
+ class << self
24
+ def method_missing(symbol, *args)
25
+ method_name = symbol.to_s.gsub('=', '')
26
+ if self.const_defined? method_name
27
+ return self.const_get(method_name) if args.empty?
28
+
29
+ self.const_set(method_name, args.first)
30
+ else
31
+ super
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Enum for defaults
4
+ module ImageKitIo
5
+ module Constants
6
+ module Default
7
+ TRANSFORMATION_POSITION = "path"
8
+ QUERY_TRANSFORMATION_POSITION = "query"
9
+ VALID_TRANSFORMATION_POSITION = [TRANSFORMATION_POSITION,
10
+ QUERY_TRANSFORMATION_POSITION,].freeze
11
+ DEFAULT_TIMESTAMP = "9999999999"
12
+ TRANSFORMATION_PARAMETER = "tr"
13
+ CHAIN_TRANSFORM_DELIMITER = ":"
14
+ TRANSFORM_DELIMITER = ","
15
+ TRANSFORM_KEY_VALUE_DELIMITER = "-"
16
+
17
+ SIGNATURE_PARAMETER = "ik-s"
18
+ TIMESTAMP_PARAMETER = "ik-t"
19
+ TIMESTAMP = "9999999999"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,69 @@
1
+ module ImageKitIo
2
+ module Constants
3
+ module Error
4
+ MANDATORY_INIT_MISSING = {
5
+ 'message': "Missing public_key or private_key or url_endpoint during ImageKitIo initialization",
6
+ help: "",
7
+ }
8
+ INVALID_TRANSFORMATION_POS = {'message': "Invalid transformationPosition parameter",
9
+ help: "",}
10
+ INVALID_URL_GENERATION_PARAM = {'message': "Invalid url parameter", help: ""}
11
+ INVALID_TRANSFORMATION_OPTIONS = {
12
+ 'message': "Invalid transformation parameter options",
13
+ help: "",
14
+ }
15
+ CACHE_PURGE_URL_MISSING = {'message': "Missing URL parameter for this request",
16
+ help: "",}
17
+ CACHE_PURGE_STATUS_ID_MISSING = {'message': "Missing Request ID parameter for this request",
18
+ help: "",}
19
+ FILE_ID_MISSING = {'message': "Missing File ID parameter for this request",
20
+ help: "",}
21
+ UPDATE_DATA_MISSING = {'message': "Missing file update data for this request",
22
+ help: "",}
23
+
24
+ UPDATE_DATA_TAGS_INVALID = {'message': "Invalid tags parameter for this request",
25
+ help: "tags should be passed as null or an array like ['tag1', 'tag2']",}.freeze
26
+
27
+ UPDATE_DATA_COORDS_INVALID =
28
+ {'message': "Invalid custom_coordinates parameter for this request",
29
+ help: "custom_coordinates should be passed as null or a string like 'x,y,width,height'",}
30
+
31
+ LIST_FILES_INPUT_MISSING = {
32
+ 'message': "Missing options for list files",
33
+ help: "If you do not want to pass any parameter for listing, pass an empty object",
34
+ }
35
+ MISSING_FILE_URL = {'message': "Missing file_url for purge_cache", help: ""}
36
+ MISSING_UPLOAD_DATA = {'message': "Missing data for upload", help: ""}
37
+ MISSING_UPLOAD_FILE_PARAMETER = {
38
+ 'message': "Missing file parameter for upload",
39
+ help: "",
40
+ }
41
+ MISSING_UPLOAD_FILENAME_PARAM = {
42
+ 'message': "Missing fileName parameter for upload",
43
+ help: "",
44
+ }
45
+
46
+ INVALID_PHASH_VALUE =
47
+ {
48
+ 'message': "Invalid pHash value",
49
+ help: "Both pHash strings must be valid hexadecimal numbers",
50
+ }
51
+
52
+ MISSING_PHASH_VALUE = {
53
+ 'message': "Missing pHash value",
54
+ help: "Please pass two pHash values",
55
+ }
56
+ UNEQUAL_STRING_LENGTH = {
57
+ '': "Unequal pHash string length",
58
+ help: "For distance calculation, the two pHash strings must have equal length",
59
+ }
60
+
61
+ MISSING_PRIVATE_KEY = "ImageKitIo private key missing"
62
+
63
+ MISSING_PUBLIC_KEY = "ImageKitIo public key missing"
64
+
65
+ MISSING_URL_ENDPOINT = "ImageKitIo URL Endpoint missing. Default URL Endpoint: https://ik.imagekit.io/<YOUR_IMAGEKIT_ID>/"
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,11 @@
1
+ module ImageKitIo
2
+ module Constants
3
+ module File
4
+ VALID_FILE_OPTIONS = %w[path fileType tags includeFolder name limit skip]
5
+
6
+ VALID_FILE_DETAIL_OPTIONS = ["fileID"]
7
+
8
+ VALID_UPLOAD_OPTIONS = %w[file file_name use_unique_file_name tags folder is_private_file custom_coordinates response_fields extensions webhook_url overwrite_file overwrite_AI_tags overwrite_custom_metadata custom_metadata mime overwrite_tags ]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,64 @@
1
+ module ImageKitIo
2
+ module Constants
3
+ module SupportedTransformation
4
+ SUPPORTED_TRANS = {
5
+ 'height': "h",
6
+ 'width': "w",
7
+ 'aspect_ratio': "ar",
8
+ 'quality': "q",
9
+ 'crop': "c",
10
+ 'crop_mode': "cm",
11
+ 'x': "x",
12
+ 'y': "y",
13
+ 'focus': "fo",
14
+ 'format': "f",
15
+ 'radius': "r",
16
+ 'background': "bg",
17
+ 'border': "b",
18
+ 'rotation': "rt",
19
+ 'blur': "bl",
20
+ 'named': "n",
21
+ 'overlay_image': "oi",
22
+ 'overlay_image_trim': "oit",
23
+ 'overlay_image_cropping': "oic",
24
+ 'overlay_image_quality': "oiq",
25
+ 'overlay_image_DPR': "oidpr",
26
+ 'overlay_image_border': "oib",
27
+ 'overlay_image_background': "oibg",
28
+ 'overlay_image_aspect_ratio': "oiar",
29
+ 'overlay_x': "ox",
30
+ 'overlay_y': "oy",
31
+ 'overlay_focus': "ofo",
32
+ 'overlay_height': "oh",
33
+ 'overlay_width': "ow",
34
+ 'overlay_text': "ot",
35
+ 'overlay_text_font_size': "ots",
36
+ 'overlay_text_font_family': "otf",
37
+ 'overlay_text_encoded': "ote",
38
+ 'overlay_text_color': "otc",
39
+ 'overlay_text_width': "otw",
40
+ 'overlay_text_background': "otbg",
41
+ 'overlay_text_padding': "otp",
42
+ 'overlay_text_inner_alignment': "otia",
43
+ 'overlay_text_transparency': "oa",
44
+ 'overlay_alpha': "oa",
45
+ 'overlay_radius': "or",
46
+ 'overlay_text_typography': "ott",
47
+ 'overlay_background': "obg",
48
+ 'progressive': "pr",
49
+ 'lossless': "lo",
50
+ 'trim': "t",
51
+ 'metadata': "md",
52
+ 'color_profile': "cp",
53
+ 'default_image': "di",
54
+ 'dpr': "dpr",
55
+ 'effect_sharpen': "e-sharpen",
56
+ 'effect_usm': "e-usm",
57
+ 'effect_contrast': "e-contrast",
58
+ 'effect_gray': "e-grayscale",
59
+ 'original': "orig",
60
+ 'raw': 'raw',
61
+ }
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,14 @@
1
+ module ImageKitIo
2
+ module Constants
3
+ module URL
4
+ # Default URL Constants
5
+ BASE_URL = "https://api.imagekit.io/v1/files"
6
+ PURGE_CACHE = "/purge"
7
+ BULK_FILE_DELETE = "/batch/deleteByFileIds"
8
+ UPLOAD = "/upload"
9
+ REMOTE_METADATA_FULL_URL = "https://api.imagekit.io/v1/metadata"
10
+ BULK_BASE_URL = 'https://api.imagekit.io/v1/bulkJobs'
11
+ API_BASE_URL = 'https://api.imagekit.io/v1'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ module ImageKitIo
2
+ class Error < StandardError
3
+ end
4
+ end