module Asana::Resources::AttachmentUploading

Internal: Mixin to add the ability to upload an attachment to a specific Asana resource (a Task, really).

Public Instance Methods

attach(filename: required('filename'), mime: required('mime'), options: {}, **data) click to toggle source

Uploads a new attachment to the resource.

filename - [String] the absolute path of the file to upload. mime - [String] the MIME type of the file options - [Hash] the request I/O options data - [Hash] extra attributes to post

rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength

# File lib/asana/resource_includes/attachment_uploading.rb, line 15
def attach(filename: required('filename'),
           mime: required('mime'),
           options: {}, **data)
  path = File.expand_path(filename)
  unless File.exist?(path)
    fail ArgumentError, "file #{filename} doesn't exist"
  end
  upload = Faraday::UploadIO.new(path, mime)
  response = client.post("/#{self.class.plural_name}/#{id}/attachments",
                         body: data,
                         upload: upload,
                         options: options)
  Attachment.new(parse(response).first, client: client)
end