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