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
@@ -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