class Ilovepdf::Task
Constants
- API_PARAMS
- DOWNLOAD_INFO
Attributes
ignore_errors[RW]
ignore_password[RW]
output_filename[RW]
packaged_filename[RW]
result[R]
task_id[RW]
tool[RW]
try_pdf_repair[RW]
Public Class Methods
new(public_key, secret_key)
click to toggle source
Calls superclass method
Ilovepdf::Ilovepdf::new
# File lib/ilovepdf/task.rb, line 11 def initialize(public_key, secret_key) super(public_key, secret_key) response = perform_create_request self.worker_server = 'https://' + response.body['server'] self.task_id = response.body['task'] # Assign default values self.ignore_errors = true self.ignore_password = true self.try_pdf_repair = true end
Public Instance Methods
add_file(filepath)
click to toggle source
# File lib/ilovepdf/task.rb, line 31 def add_file(filepath) raise ArgumentError.new("No file exists in '#{filepath}'") unless ::File.exist?(filepath) file = perform_upload_request(filepath) files << file files.last end
add_file_from_url(url)
click to toggle source
# File lib/ilovepdf/task.rb, line 38 def add_file_from_url(url) file = perform_upload_url_request(url) files << file files.last end
assign_meta_value(key, value)
click to toggle source
# File lib/ilovepdf/task.rb, line 23 def assign_meta_value(key, value) meta_values[key] = value end
blob()
click to toggle source
# File lib/ilovepdf/task.rb, line 60 def blob download_file download_info.output_file end
delete!()
click to toggle source
# File lib/ilovepdf/task.rb, line 79 def delete! send_request('delete', 'task/' + self.task_id) end
delete_file(file)
click to toggle source
# File lib/ilovepdf/task.rb, line 83 def delete_file(file) raise Error.new("File was already deleted") if file.deleted? file_was_found = files.find{|f| f.server_filename == file.server_filename } raise Error.new("File to delete not found") if !file_was_found response = perform_deletefile_request(file) if response.success? file.mark_as_deleted new_files = files.reject{|f| f.server_filename == file.server_filename } send(:files=, new_files) else raise ApiError.new(response, custom_msg: "No error ocurred but response was not successful when deleting the desired file") end true end
download(path=nil, create_directory: false)
click to toggle source
# File lib/ilovepdf/task.rb, line 44 def download(path=nil, create_directory: false) download_file if path path = Pathname.new(path).to_s if path.is_a?(Pathname) path.chop! if path.end_with? '/' else path = '.' end destination = "#{path}/#{download_info.output_filename}" FileUtils.mkdir_p(path) if create_directory ::File.open(destination, 'wb'){|file| file.write(download_info.output_file) } true end
download_info()
click to toggle source
# File lib/ilovepdf/task.rb, line 65 def download_info @download_info ||= Struct.new(*DOWNLOAD_INFO).new end
enable_file_encryption(enable, new_encrypt_key = nil)
click to toggle source
Calls superclass method
Ilovepdf::Ilovepdf#enable_file_encryption
# File lib/ilovepdf/task.rb, line 98 def enable_file_encryption(enable, new_encrypt_key = nil) raise Error.new("Encryption mode cannot be assigned after uploading the files") if files.size > 0 super(enable, new_encrypt_key) end
execute()
click to toggle source
# File lib/ilovepdf/task.rb, line 75 def execute @result = perform_process_request end
files()
click to toggle source
# File lib/ilovepdf/task.rb, line 27 def files @files ||= [] end
status()
click to toggle source
- API Methods
-
Actions on task
# File lib/ilovepdf/task.rb, line 71 def status http_response = query_task_status(worker_server,task_id) end
Private Instance Methods
download_file()
click to toggle source
# File lib/ilovepdf/task.rb, line 114 def download_file response = perform_filedownload_request content_disposition = response.headers[:content_disposition] if match_data = /filename\*\=utf-8\'\'([\W\w]+)/.match(content_disposition) filename = URI.unescape(match_data[1].gsub('"', '')) else match_data = / .*filename=\"([\W\w]+)\"/.match(content_disposition) filename = match_data[1].gsub('"', '') end download_info.output_filename = filename download_info.output_file = response.raw_body download_info.output_filetype = ::File.extname(filename) true end
extract_api_params()
click to toggle source
# File lib/ilovepdf/task.rb, line 205 def extract_api_params {}.tap do |h| self.class::API_PARAMS.each{ |param_name| h[param_name] = send(param_name) } end end
file_submit_params()
click to toggle source
# File lib/ilovepdf/task.rb, line 197 def file_submit_params h = {files:{}} files.each_with_index do |f, i| h[:files][i.to_s] = f.file_options end h end
files=(new_array_of_files)
click to toggle source
# File lib/ilovepdf/task.rb, line 110 def files=(new_array_of_files) @files = new_array_of_files end
meta_values()
click to toggle source
set meta values as www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf (page 844)
# File lib/ilovepdf/task.rb, line 106 def meta_values @meta_values ||= {} end
perform_create_request()
click to toggle source
# File lib/ilovepdf/task.rb, line 163 def perform_create_request request_opts = { body: {v: API_VERSION} } response = send_request('get', 'start/' + self.tool.to_s, request_opts) end
perform_deletefile_request(file)
click to toggle source
- HTTP request methods
# File lib/ilovepdf/task.rb, line 132 def perform_deletefile_request(file) body = { task: self.task_id, server_filename: file.server_filename, v: API_VERSION } response = send_request('post', 'upload/delete', body: body) end
perform_filedownload_request()
click to toggle source
# File lib/ilovepdf/task.rb, line 141 def perform_filedownload_request response = send_request('get', 'download/' + self.task_id, body: {v: API_VERSION}) end
perform_process_request()
click to toggle source
# File lib/ilovepdf/task.rb, line 145 def perform_process_request body = { task: self.task_id, tool: self.tool, packaged_filename: self.packaged_filename, output_filename: self.output_filename, ignore_errors: self.ignore_errors, ignore_password: self.ignore_password, try_pdf_repair: self.try_pdf_repair, meta: meta_values, v: API_VERSION, }.merge(file_submit_params) .merge(extract_api_params) response = send_request('post', 'process', body: body) response end
perform_upload_request(filepath)
click to toggle source
# File lib/ilovepdf/task.rb, line 170 def perform_upload_request filepath request_opts = { body: { multipart: true, v: API_VERSION, task: self.task_id, file: ::File.new(filepath, 'rb') } } # filepath response = send_request('post', 'upload', request_opts) File.new(response.body['server_filename'], Pathname.new(filepath).basename.to_s) end
perform_upload_url_request(url)
click to toggle source
# File lib/ilovepdf/task.rb, line 184 def perform_upload_url_request url request_opts = { body: { multipart: true, v: API_VERSION, task: self.task_id, cloud_file: url } } response = send_request('post', 'upload', request_opts) File.new(response.body['server_filename'], Pathname.new(url).basename.to_s) end