class InvoiceMaker::Invoice

Constants

JSON_CONTENT_TYPE
PDF_CONTENT_TYPE

Attributes

data[R]
dest_dir[RW]

Public Class Methods

new() click to toggle source
# File lib/invoice_maker/invoice.rb, line 9
def initialize
  @dest_dir = '/tmp'
  @data = Hash.new
  @base_uri = 'https://invoice-generator.com'
end

Public Instance Methods

append_item(item) click to toggle source
# File lib/invoice_maker/invoice.rb, line 24
def append_item(item)
  raise "Unable to add items to an empty invoice data.  Did you 'set' first?" if @data.empty?
  @data['items'] = [] unless @data.has_key?('items')
  @data['items'].push item unless @data.empty?
end
generate() click to toggle source

Let's generate a pdf

# File lib/invoice_maker/invoice.rb, line 31
def generate
  response = HTTParty.post(@base_uri, body: @data.to_json, headers: { "Content-Type" => JSON_CONTENT_TYPE })
  if response.success? && response.content_type == PDF_CONTENT_TYPE
    filename = File.join(@dest_dir, SecureRandom.urlsafe_base64(16)) + '.pdf'
    save_pdf(filename, response.parsed_response)
  else
    return nil
  end
  return filename
end
set(options = {}) click to toggle source

set invoice data

# File lib/invoice_maker/invoice.rb, line 16
def set(options = {})
  @data = options
end

Private Instance Methods

save_pdf(filename, data) click to toggle source
# File lib/invoice_maker/invoice.rb, line 44
def save_pdf(filename, data)
  File.open(filename, "wb+") do |f|
    f << data
  end
end