imagekitio 1.0.10 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +292 -82
- data/Rakefile +1 -1
- data/lib/active_storage/active_storage.rb +2 -0
- data/lib/active_storage/service/ik_file.rb +111 -0
- data/lib/active_storage/service/image_kit_io_service.rb +185 -0
- data/lib/carrierwave/carrierwave.rb +79 -0
- data/lib/carrierwave/storage/ik_file.rb +8 -7
- data/lib/carrierwave/storage/imagekit_store.rb +54 -51
- data/lib/carrierwave/support/uri_filename.rb +9 -7
- data/lib/imagekitio/api_service/bulk.rb +58 -0
- data/lib/imagekitio/api_service/custom_metadata_field.rb +52 -0
- data/lib/imagekitio/api_service/file.rb +162 -0
- data/lib/imagekitio/api_service/folder.rb +49 -0
- data/lib/imagekitio/base.rb +12 -0
- data/lib/imagekitio/client.rb +186 -0
- data/lib/imagekitio/configurable.rb +43 -0
- data/lib/imagekitio/constant.rb +36 -0
- data/lib/imagekitio/constants/default.rb +22 -0
- data/lib/imagekitio/constants/error.rb +69 -0
- data/lib/imagekitio/constants/file.rb +11 -0
- data/lib/imagekitio/constants/supported_transformation.rb +64 -0
- data/lib/imagekitio/constants/url.rb +14 -0
- data/lib/imagekitio/errors.rb +4 -0
- data/lib/imagekitio/railtie.rb +1 -1
- data/lib/imagekitio/request.rb +79 -0
- data/lib/imagekitio/sdk/version.rb +5 -0
- data/lib/imagekitio/url.rb +241 -0
- data/lib/imagekitio/utils/calculation.rb +44 -0
- data/lib/imagekitio/utils/formatter.rb +48 -0
- data/lib/imagekitio/utils/option_validator.rb +36 -0
- data/lib/imagekitio.rb +10 -83
- metadata +41 -15
- data/lib/imagekit/constants/defaults.rb +0 -20
- data/lib/imagekit/constants/errors.rb +0 -77
- data/lib/imagekit/constants/file.rb +0 -5
- data/lib/imagekit/constants/supported_transformation.rb +0 -57
- data/lib/imagekit/constants/url.rb +0 -9
- data/lib/imagekit/file.rb +0 -133
- data/lib/imagekit/imagekit.rb +0 -117
- data/lib/imagekit/resource.rb +0 -56
- data/lib/imagekit/sdk/version.rb +0 -5
- data/lib/imagekit/url.rb +0 -237
- data/lib/imagekit/utils/calculation.rb +0 -36
- 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
|