Class: ImageKitIo::ApiService::File

Inherits:
Object
  • Object
show all
Includes:
Constantable, Utils::OptionValidator
Defined in:
lib/imagekitio/api_service/file.rb

Instance Method Summary collapse

Methods included from Constantable

#constants, included

Methods included from Utils::OptionValidator

validate_upload_options

Methods included from Utils::Formatter

camel_to_snake, format_to_json, request_formatter, snake_to_camel

Constructor Details

#initialize(req_obj) ⇒ File

This File class holds file related operations like upload, list etc



14
15
16
# File 'lib/imagekitio/api_service/file.rb', line 14

def initialize(req_obj)
  @req_obj = req_obj
end

Instance Method Details

#copy(source_file_path: nil, destination_path: nil, include_file_versions: false) ⇒ Object



187
188
189
190
191
192
193
194
# File 'lib/imagekitio/api_service/file.rb', line 187

def copy(source_file_path: nil, destination_path: nil, include_file_versions: false)
  if source_file_path == '' || source_file_path.nil? || destination_path == '' || destination_path.nil?
    raise ArgumentError, 'parameters required'
  end
  url = "#{constants.BASE_URL}/copy"
  payload = { 'sourceFilePath': source_file_path, 'destinationPath': destination_path, 'includeFileVersions': include_file_versions }.to_json
  @req_obj.request('post', url, @req_obj.create_headers, payload)
end

#delete(file_id: nil) ⇒ Object



143
144
145
146
147
148
149
150
151
# File 'lib/imagekitio/api_service/file.rb', line 143

def delete(file_id: nil)
  # Delete a file_id by file_id
  if file_id == "" || file_id.nil?
    raise ArgumentError, "file_id is required"
  end
  url = "#{constants.BASE_URL}/#{file_id}"
  headers = @req_obj.create_headers
  @req_obj.request("delete", url, headers)
end

#delete_file_version(file_id: nil, version_id: nil) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/imagekitio/api_service/file.rb', line 100

def delete_file_version(file_id: nil, version_id: nil)
  if file_id == "" || file_id.nil?
    raise ArgumentError, "file_id is required"
  end
  if version_id == "" || version_id.nil?
    raise ArgumentError, "version_id is required"
  end
  url = "#{constants.BASE_URL}/#{file_id}/versions/#{version_id}"
  headers = @req_obj.create_headers
  @req_obj.request('delete', url, headers)
end

#details(file_identifier: nil) ⇒ Object



124
125
126
127
128
129
130
131
132
# File 'lib/imagekitio/api_service/file.rb', line 124

def details(file_identifier: nil)
  # Get detail of file by file_identifier
  if file_identifier == "" || file_identifier.nil?
    raise ArgumentError, "file_identifier is required"
  end
  url = "#{constants.BASE_URL}/#{file_identifier}/details/"
  headers = @req_obj.create_headers
  @req_obj.request("get", url, headers)
end

#get_file_version_detail(file_id: nil, version_id: nil) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/imagekitio/api_service/file.rb', line 88

def get_file_version_detail(file_id: nil, version_id: nil)
  if file_id == "" || file_id.nil?
    raise ArgumentError, "file_id is required"
  end
  if version_id == "" || version_id.nil?
    raise ArgumentError, "version_id is required"
  end
  url = "#{constants.BASE_URL}/#{file_id}/versions/#{version_id}"
  headers = @req_obj.create_headers
  @req_obj.request('get', url, headers)
end

#get_file_versions(file_id: nil) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/imagekitio/api_service/file.rb', line 79

def get_file_versions(file_id: nil)
  if file_id == '' || file_id.nil?
    raise ArgumentError, 'file_id is required'
  end
  url = "#{constants.BASE_URL}/#{file_id}/versions"
  headers = @req_obj.create_headers
  @req_obj.request('get', url, headers)
end

#get_metadata(file_id: nil) ⇒ Object



134
135
136
137
138
139
140
141
# File 'lib/imagekitio/api_service/file.rb', line 134

def (file_id: nil)
  # Get metadata of a file by file_id
  if file_id == "" || file_id.nil?
    raise ArgumentError, "file_id is required"
  end
  url = "#{constants.BASE_URL}/#{file_id}/metadata"
  @req_obj.request("get", url, @req_obj.create_headers)
end

#get_metadata_from_remote_url(remote_file_url: nil) ⇒ Object



172
173
174
175
176
177
178
# File 'lib/imagekitio/api_service/file.rb', line 172

def (remote_file_url: nil)
  if remote_file_url == "" || remote_file_url.nil?
    raise ArgumentError, "remote_file_url is required"
  end
  url = "#{constants.REMOTE_METADATA_FULL_URL}?url=#{remote_file_url}"
  @req_obj.request("get", url, @req_obj.create_headers)
end

#list(**options) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/imagekitio/api_service/file.rb', line 69

def list(**options)
  #  returns list of files on ImageKitIo Server
  #  :options dictionary of options
  formatted_options = request_formatter(options || {})
  raise KeyError(constants.LIST_FILES_INPUT_MISSING) unless formatted_options.is_a?(Hash)
  url = constants.BASE_URL
  headers = @req_obj.create_headers.update({params: formatted_options})
  @req_obj.request("get", url, headers, formatted_options)
end

#move(source_file_path: nil, destination_path: nil) ⇒ Object



196
197
198
199
200
201
202
203
# File 'lib/imagekitio/api_service/file.rb', line 196

def move(source_file_path: nil, destination_path: nil)
  if source_file_path == '' || source_file_path.nil? || destination_path == '' || destination_path.nil?
    raise ArgumentError, 'parameters required'
  end
  url = "#{constants.BASE_URL}/move"
  payload = { 'sourceFilePath': source_file_path, 'destinationPath': destination_path }
  @req_obj.request('post', url, @req_obj.create_headers, payload)
end

#purge_cache(file_url: nil) ⇒ Object



153
154
155
156
157
158
159
160
161
# File 'lib/imagekitio/api_service/file.rb', line 153

def purge_cache(file_url: nil)
  # purges cache from server by file_url
  if file_url == "" || file_url.nil?
    raise ArgumentError, "file_url is required"
  end
  url = "#{constants.BASE_URL}/purge"
  payload = {'url': file_url}
  @req_obj.request("post", url, @req_obj.create_headers, payload)
end

#purge_cache_status(request_id: nil) ⇒ Object



163
164
165
166
167
168
169
170
# File 'lib/imagekitio/api_service/file.rb', line 163

def purge_cache_status(request_id: nil)
  # This function is to get cache_status
  if request_id == "" || request_id.nil?
    raise ArgumentError, "remote_file_url is required"
  end
  url = "#{constants.BASE_URL}/purge/#{request_id}"
  @req_obj.request("get", url, @req_obj.create_headers)
end

#rename(file_path: nil, new_file_name: nil, **options) ⇒ Object



205
206
207
208
209
210
211
212
# File 'lib/imagekitio/api_service/file.rb', line 205

def rename(file_path: nil, new_file_name: nil, **options)
  if file_path == '' || file_path.nil? || new_file_name == '' || new_file_name.nil?
    raise ArgumentError, 'parameters required'
  end
  url = "#{constants.BASE_URL}/rename"
  payload = { 'filePath': file_path, 'newFileName': new_file_name }.merge(request_formatter(options)).to_json
  @req_obj.request('put', url, @req_obj.create_headers, payload)
end

#restore_file_version(file_id: nil, version_id: nil) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/imagekitio/api_service/file.rb', line 112

def restore_file_version(file_id: nil, version_id: nil)
  if file_id == "" || file_id.nil?
    raise ArgumentError, "file_id is required"
  end
  if version_id == "" || version_id.nil?
    raise ArgumentError, "version_id is required"
  end
  url = "#{constants.BASE_URL}/#{file_id}/versions/#{version_id}/restore"
  headers = @req_obj.create_headers
  @req_obj.request('put', url, headers)
end

#stream_file(remote_file_url: nil, &block) ⇒ Object



180
181
182
183
184
185
# File 'lib/imagekitio/api_service/file.rb', line 180

def stream_file(remote_file_url: nil, &block)
  if remote_file_url == '' || remote_file_url.nil?
    raise ArgumentError, 'remote_file_url is required'
  end
  @req_obj.request_stream('get', remote_file_url, headers: @req_obj.create_headers, &block)
end

#update_details(file_id: nil, **options) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/imagekitio/api_service/file.rb', line 56

def update_details(file_id: nil, **options)
  unless options.fetch(:tags, []).is_a?(Array)
    raise ArgumentError, constants.UPDATE_DATA_TAGS_INVALID
  end
  unless options.fetch(:custom_coordinates, "").is_a?(String)
    raise ArgumentError, constants.UPDATE_DATA_COORDS_INVALID
  end
  url = "#{constants.BASE_URL}/#{file_id}/details/"
  headers = @req_obj.create_headers
  payload = request_formatter(options || {})
  @req_obj.request("patch", url, headers, payload.to_json)
end

#upload(file: nil, file_name: nil, **options) ⇒ Object

uploads files with required arguments, supports bot url and binary Options types:

- `extensions` should be array of hash
   eg: option['extension'] = [
         { 'name' => 'remove-bg', 'options' => { 'add_shadow' => 'true' } },
         { 'name' => 'google-auto-tagging', 'minConfidence' => 80 }
       ]
- `custom_metadata` should be hash
   eg: option['custom_metadata'] = {
          "SKU": "VS882HJ2JD",
          "price": 599.99,
          "brand": "H&M",
          "discount": 30
       }

Raises:

  • (ArgumentError)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/imagekitio/api_service/file.rb', line 32

def upload(file: nil, file_name: nil, **options)
  raise ArgumentError, constants.MISSING_UPLOAD_FILE_PARAMETER unless file
  raise ArgumentError, constants.MISSING_UPLOAD_FILE_PARAMETER unless file_name

  content_type = options.delete(:content_type) || ''
  options = format_to_json(options, :extensions, Array)
  options = format_to_json(options, :custom_metadata, Hash)
  options = format_to_json(options, :transformation, Hash)
  options = validate_upload_options(options || {})
  if options.is_a?(FalseClass)
    raise ArgumentError, "Invalid Upload option"
  else
    headers = @req_obj.create_headers
    payload =  {
      multipart: true,
      file: file.is_a?(String) ? file : ::UploadIO.new(file, content_type, file_name),
      fileName: file_name
    }
    payload.merge!(options)
    url = "#{constants.BASE_URL}#{constants.UPLOAD}"
    @req_obj.request("post", url, headers, payload)
  end
end