imagekitio 1.0.8 → 2.0.1

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 +186 -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 -54
  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 +55 -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 -236
  44. data/lib/imagekit/utils/calculation.rb +0 -36
  45. data/lib/imagekit/utils/formatter.rb +0 -29
@@ -1,77 +0,0 @@
1
- MANDATORY_INIT_MISSING = {
2
- 'message': "Missing public_key or private_key or url_endpoint during ImageKit initialization",
3
- help: "",
4
- }
5
- INVALID_TRANSFORMATION_POS = {'message': "Invalid transformationPosition parameter",
6
- help: "",}
7
- INVALID_URL_GENERATION_PARAM = {'message': "Invalid url parameter", help: ""}
8
- INVALID_TRANSFORMATION_OPTIONS = {
9
- 'message': "Invalid transformation parameter options",
10
- help: "",
11
- }
12
- CACHE_PURGE_URL_MISSING = {'message': "Missing URL parameter for this request",
13
- help: "",}
14
- CACHE_PURGE_STATUS_ID_MISSING = {'message': "Missing Request ID parameter for this request",
15
- help: "",}
16
- FILE_ID_MISSING = {'message': "Missing File ID parameter for this request",
17
- help: "",}
18
- UPDATE_DATA_MISSING = {'message': "Missing file update data for this request",
19
- help: "",}
20
-
21
- UPDATE_DATA_TAGS_INVALID = {'message': "Invalid tags parameter for this request",
22
- help: "tags should be passed as null or an array like ['tag1', 'tag2']",}.freeze
23
-
24
- UPDATE_DATA_COORDS_INVALID =
25
- {'message': "Invalid custom_coordinates parameter for this request",
26
- help: "custom_coordinates should be passed as null or a string like 'x,y,width,height'",}
27
-
28
- LIST_FILES_INPUT_MISSING = {
29
- 'message': "Missing options for list files",
30
- help: "If you do not want to pass any parameter for listing, pass an empty object",
31
- }
32
- MISSING_FILE_URL = {'message': "Missing file_url for purge_cache", help: ""}
33
- MISSING_UPLOAD_DATA = {'message': "Missing data for upload", help: ""}
34
- MISSING_UPLOAD_FILE_PARAMETER = {
35
- 'message': "Missing file parameter for upload",
36
- help: "",
37
- }
38
- MISSING_UPLOAD_FILENAME_PARAM = {
39
- 'message': "Missing fileName parameter for upload",
40
- help: "",
41
- }
42
-
43
- INVALID_PHASH_VALUE =
44
- {
45
- 'message': "Invalid pHash value",
46
- help: "Both pHash strings must be valid hexadecimal numbers",
47
- }
48
-
49
- MISSING_PHASH_VALUE = {
50
- 'message': "Missing pHash value",
51
- help: "Please pass two pHash values",
52
- }
53
- UNEQUAL_STRING_LENGTH = {
54
- '': "Unequal pHash string length",
55
- help: "For distance calculation, the two pHash strings must have equal length",
56
- }
57
-
58
- MISSING_UPLOAD_FILE_PARAMETER = {'message': "Missing file parameter for upload",
59
- 'help': "",}
60
- MISSING_UPLOAD_FILENAME_PARAM = {
61
- 'message': "Missing fileName parameter for upload",
62
- 'help': "",
63
- }
64
-
65
- INVALID_PHASH_VALUE = {'message': "Invalid pHash value",
66
- 'help': "Both pHash strings must be valid hexadecimal numbers",}
67
-
68
- MISSING_PHASH_VALUE = {'message': "Missing pHash value",
69
- 'help': "Please pass two pHash values",}
70
- UNEQUAL_STRING_LENGTH = {'message': "Unequal pHash string length",
71
- 'help': "For distance calculation, the two pHash strings must have equal length",}
72
-
73
- MISSING_PRIVATE_KEY = "ImageKit private key missing"
74
-
75
- MISSING_PUBLIC_KEY = "ImageKit public key missing"
76
-
77
- MISSING_URL_ENDPOINT = "ImageKit URL Endpoint missing. Default URL Endpoint: https://ik.imagekit.io/<YOUR_IMAGEKIT_ID>/"
@@ -1,5 +0,0 @@
1
- VALID_FILE_OPTIONS = %w[path fileType tags includeFolder name limit skip]
2
-
3
- VALID_FILE_DETAIL_OPTIONS = ["fileID"]
4
-
5
- VALID_UPLOAD_OPTIONS = %w[file file_name use_unique_file_name tags folder is_private_file custom_coordinates response_fields]
@@ -1,57 +0,0 @@
1
- SUPPORTED_TRANS = {
2
- 'height': "h",
3
- 'width': "w",
4
- 'aspect_ratio': "ar",
5
- 'quality': "q",
6
- 'crop': "c",
7
- 'crop_mode': "cm",
8
- 'x': "x",
9
- 'y': "y",
10
- 'focus': "fo",
11
- 'format': "f",
12
- 'radius': "r",
13
- 'background': "bg",
14
- 'border': "b",
15
- 'rotation': "rt",
16
- 'blur': "bl",
17
- 'named': "n",
18
- 'overlay_image': "oi",
19
- 'overlay_image_trim': "oit",
20
- 'overlay_image_cropping': "oic",
21
- 'overlay_image_quality': "oiq",
22
- 'overlay_image_DPR': "oidpr",
23
- 'overlay_image_border': "oib",
24
- 'overlay_image_background': "oibg",
25
- 'overlay_image_aspect_ratio': "oiar",
26
- 'overlay_x': "ox",
27
- 'overlay_y': "oy",
28
- 'overlay_focus': "ofo",
29
- 'overlay_height': "oh",
30
- 'overlay_width': "ow",
31
- 'overlay_text': "ot",
32
- 'overlay_text_font_size': "ots",
33
- 'overlay_text_font_family': "otf",
34
- 'overlay_text_encoded': "ote",
35
- 'overlay_text_color': "otc",
36
- 'overlay_text_width': "otw",
37
- 'overlay_text_background': "otbg",
38
- 'overlay_text_padding': "otp",
39
- 'overlay_text_inner_alignment': "otia",
40
- 'overlay_text_transparency': "oa",
41
- 'overlay_alpha': "oa",
42
- 'overlay_radius': "or",
43
- 'overlay_text_typography': "ott",
44
- 'overlay_background': "obg",
45
- 'progressive': "pr",
46
- 'lossless': "lo",
47
- 'trim': "t",
48
- 'metadata': "md",
49
- 'color_profile': "cp",
50
- 'default_image': "di",
51
- 'dpr': "dpr",
52
- 'effect_sharpen': "e-sharpen",
53
- 'effect_usm': "e-usm",
54
- 'effect_contrast': "e-contrast",
55
- 'effect_gray': "e-grayscale",
56
- 'original': "orig",
57
- }
@@ -1,9 +0,0 @@
1
- class URL
2
- # Default URL Constants
3
- BASE_URL = "https://api.imagekit.io/v1/files"
4
- PURGE_CACHE = "/purge"
5
- BULK_FILE_DELETE = "/batch/deleteByFileIds"
6
- UPLOAD = "/upload"
7
- REMOTE_METADATA_FULL_URL = "https://api.imagekit.io/v1/metadata"
8
-
9
- end
data/lib/imagekit/file.rb DELETED
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "./constants/errors"
4
- require_relative "./constants/file"
5
- require_relative "./constants/url"
6
-
7
- require_relative "./utils/formatter"
8
-
9
- class ImageKitFile
10
- # This File class holds file related operations like
11
- # upload, list etc
12
- def initialize(req_obj)
13
- @req_obj = req_obj
14
- end
15
-
16
- def upload(file, file_name, options)
17
- # uploads files with required arguments
18
- # supports bot url and binary
19
- raise ArgumentError, MISSING_UPLOAD_FILE_PARAMETER unless file
20
- raise ArgumentError, MISSING_UPLOAD_FILE_PARAMETER unless file_name
21
- options = validate_upload_options(options || {})
22
- if options.is_a?(FalseClass)
23
- raise ArgumentError, "Invalid Upload option"
24
- else
25
- headers = @req_obj.create_headers
26
- payload = {multipart: true, file: file, fileName: file_name}.merge(options)
27
-
28
- url = "#{URL::BASE_URL}#{URL::UPLOAD}"
29
- @req_obj.request("post", url, headers, payload)
30
- end
31
- end
32
-
33
- def update_details(file_id, options)
34
- # Update file detail by file_id and options
35
-
36
- unless (options.key? :tags) || (options.key? :custom_coordinates)
37
- raise ArgumentError, UPDATE_DATA_MISSING
38
- end
39
- unless options.fetch(:tags, []).is_a?(Array)
40
- raise ArgumentError, UPDATE_DATA_TAGS_INVALID
41
- end
42
- unless options.fetch(:custom_coordinates, "").is_a?(String)
43
- raise ArgumentError, UPDATE_DATA_COORDS_INVALID
44
- end
45
- url = "#{URL::BASE_URL}/#{file_id}/details/"
46
- headers = @req_obj.create_headers
47
- payload = request_formatter(options)
48
- @req_obj.request("patch", url, headers, payload.to_json)
49
- end
50
-
51
- def list(options)
52
- # returns list of files on ImageKit Server
53
- # :options dictionary of options
54
- formatted_options = request_formatter(options)
55
- raise KeyError(LIST_FILES_INPUT_MISSING) unless formatted_options.is_a?(Hash)
56
- url = URL::BASE_URL
57
- headers = @req_obj.create_headers.update({params: options})
58
- @req_obj.request("get", url, headers, options)
59
- end
60
-
61
- def details(file_identifier)
62
- # Get detail of file by file_identifier
63
- url = "#{URL::BASE_URL}/#{file_identifier}/details/"
64
- headers = @req_obj.create_headers
65
- @req_obj.request("get", url, headers)
66
- end
67
-
68
- def get_metadata(file_id)
69
- # Get metadata of a file by file_id
70
- url = "#{URL::BASE_URL}/#{file_id}/metadata"
71
- @req_obj.request("get", url, @req_obj.create_headers)
72
- end
73
-
74
- def delete(file_id)
75
- # Delete a file_id by file_id
76
- url = "#{URL::BASE_URL}/#{file_id}"
77
- headers = @req_obj.create_headers
78
- @req_obj.request("delete", url, headers)
79
- end
80
-
81
- def batch_delete(file_ids)
82
- url = "#{URL::BASE_URL}#{URL::BULK_FILE_DELETE}"
83
- payload = {'fileIds': file_ids}
84
- @req_obj.request("post", url, @req_obj.create_headers, payload.to_json)
85
- end
86
-
87
- def purge_cache(file_url)
88
-
89
- # purges cache from server by file_url
90
-
91
- url = "#{URL::BASE_URL}/purge"
92
- payload = {'url': file_url}
93
- @req_obj.request("post", url, @req_obj.create_headers, payload)
94
- end
95
-
96
- def purge_cache_status(request_id)
97
- # This function is to get cache_status
98
- url = "#{URL::BASE_URL}/purge/#{request_id}"
99
- @req_obj.request("get", url, @req_obj.create_headers)
100
- end
101
-
102
- def get_metadata_from_remote_url(remote_file_url)
103
- if remote_file_url == ""
104
- raise ArgumentError, "remote_file_url is required"
105
- end
106
- url = "#{URL::REMOTE_METADATA_FULL_URL}?url=#{remote_file_url}"
107
- @req_obj.request("get", url, @req_obj.create_headers)
108
- end
109
-
110
- def validate_upload_options(options)
111
-
112
- # Validates upload value, checks if params are valid,
113
- # changes snake to camel case which is supported by
114
- # ImageKit server
115
-
116
-
117
- response_list = []
118
- options.each do |key, val|
119
- if VALID_UPLOAD_OPTIONS.include?(key.to_s)
120
- if val.is_a?(Array)
121
- val = val.join(",")
122
- end
123
- if val.is_a?(TrueClass) || val.is_a?(FalseClass)
124
- val = val.to_s
125
- end
126
- options[key] = val
127
- else
128
- return false
129
- end
130
- end
131
- request_formatter(options)
132
- end
133
- end
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- $VERBOSE = nil
4
-
5
- require_relative "./resource"
6
- require_relative "./file"
7
- require_relative "./url"
8
- require_relative "./utils/calculation"
9
-
10
- module ImageKit
11
- class Error < StandardError
12
- end
13
-
14
- # ImageKit class holds each method will be used by user
15
- class ImageKitClient
16
- attr_reader :file
17
-
18
- def initialize(private_key, public_key, url_endpoint, transformation_pos = nil, options = nil)
19
-
20
- unless(private_key.is_a?(String) && private_key.to_s.strip.length != 0)
21
- raise ArgumentError, MISSING_PRIVATE_KEY
22
- end
23
- unless(public_key.is_a?(String) && public_key.to_s.strip.length != 0)
24
- raise ArgumentError, MISSING_PUBLIC_KEY
25
- end
26
- unless(url_endpoint.is_a?(String) && url_endpoint.to_s.strip.length != 0)
27
- raise ArgumentError, MISSING_URL_ENDPOINT
28
- end
29
-
30
- @private_key = private_key
31
- @public_key = public_key
32
- @url_endpoint = url_endpoint
33
- @transformation_position = transformation_pos
34
- @options = options
35
-
36
- @ik_req = ImageKitRequest.new(private_key, public_key, url_endpoint)
37
- @file = ImageKitFile.new(@ik_req)
38
- @url_obj = Url.new(@ik_req)
39
-
40
- end
41
-
42
- def set_ik_request(ik_req)
43
- # setter for imagekit request mainly will be used for
44
- # test
45
- @ik_req = ik_req
46
- end
47
-
48
- def url(options)
49
- @url_obj.generate_url(options)
50
- end
51
-
52
- def upload_file(file = nil, file_name = nil, options = nil)
53
- # upload file to imagekit server
54
- @file.upload(file, file_name, options)
55
- end
56
-
57
- def list_files(options)
58
- # list all files
59
- @file.list(options)
60
- end
61
-
62
- def get_file_details(file_identifier)
63
- # Get file detail by file-id or file_url
64
- @file.details(file_identifier)
65
- end
66
-
67
- def update_file_details(file_id, options)
68
- # update file details by file id and other options payload
69
- @file.update_details(file_id, options)
70
- end
71
-
72
- def delete_file(file_id)
73
- # Delete a file by file-id
74
- @file.delete(file_id)
75
- end
76
-
77
- def bulk_file_delete(file_ids)
78
- # Delete file in bulks by list of file id
79
- @file.batch_delete(file_ids)
80
- end
81
-
82
- def get_file_metadata(file_id)
83
- # Get metadata of a file by file-id
84
- @file.get_metadata(file_id)
85
- end
86
-
87
- def purge_file_cache(file_url)
88
- # Purge cache from ImageKit server by file_url
89
- @file.purge_cache(file_url)
90
- end
91
-
92
- def purge_file_cache_status(request_id)
93
- @file.purge_cache_status(request_id.to_s)
94
- end
95
-
96
- def get_remote_file_url_metadata(remote_file_url = "")
97
- @file.get_metadata_from_remote_url(remote_file_url)
98
- end
99
-
100
- # Get metadata from remote_file_url
101
- # param remote_file_url: url string of remote file
102
-
103
- def phash_distance(first, second)
104
- # Get hamming distance between two phash(image hash) to check
105
- # similarity between images
106
- if first.to_s.strip == "" || second.to_s.strip == ""
107
- raise ArgumentError, Error::MISSING_PHASH_VALUE
108
- end
109
- hamming_distance(first, second)
110
- end
111
-
112
- def get_authentication_parameters(token = nil, expire = nil)
113
- # Get Authentication params
114
- get_authenticated_params(token, expire, @ik_req.private_key)
115
- end
116
- end
117
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "base64"
4
- require "rest-client"
5
- require "json"
6
- require_relative "./constants/defaults"
7
-
8
- # ImageKitRequest requests and sends data from server
9
- class ImageKitRequest
10
- attr_reader :private_key, :public_key, :url_endpoint, :transformation_position, :options
11
-
12
- def initialize(private_key, public_key, url_endpoint, transformation_position = nil, options = nil)
13
- @private_key = private_key
14
- @public_key = public_key
15
- @url_endpoint = url_endpoint
16
- @transformation_position = transformation_position || Default::TRANSFORMATION_POSITION
17
- @options = options || {}
18
- end
19
-
20
- # creates required headers
21
- def create_headers
22
- headers = {'Accept-Encoding': "application/json", 'Content-Type': "application/json"}
23
- headers.update(auth_headers)
24
- end
25
-
26
- def auth_headers
27
- encoded_private_key = Base64.strict_encode64(@private_key+":")
28
- {Authorization: "Basic #{encoded_private_key}"}
29
- end
30
-
31
- # request method communicates with server
32
- def request(method, url, headers = nil, payload = nil)
33
- headers ||= create_headers
34
- response = {response: nil, error: nil}
35
- begin
36
- resp = RestClient::Request.new(method: method,
37
- url: url,
38
- headers: headers,
39
- payload: payload).execute
40
-
41
- if (resp.code >= 200) && (resp.code < 204)
42
- if (resp.headers[:content_type].include? "application/json")
43
- response[:response] = JSON.parse(resp.body.to_s)
44
- else
45
- raise =RestClient::ExceptionWithResponse
46
- end
47
- elsif resp.code == 204
48
- response[:response] = {'success': true}
49
- end
50
-
51
- rescue RestClient::ExceptionWithResponse => err
52
- err.http_code == 404 ? response[:error] = {'message': err.response.to_s} : JSON.parse(err.response)
53
- end
54
- response
55
- end
56
- end
@@ -1,5 +0,0 @@
1
- module Imagekit
2
- module Sdk
3
- VERSION = '1.0.8'
4
- end
5
- end