class Myob::Essentials::Api::Model::Base

Public Class Methods

new(client, model_name=nil) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 7
def initialize(client, model_name=nil)
  @client          = client
  @model_name      = model_name || 'Base'
  
  @links = nil
end

Public Instance Methods

all_items() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 35
def all_items
  results = get["items"]
  while link('next')
    results += next_page["items"] || []
  end
  results
end
destroy(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 31
def destroy(object)
  @client.connection.delete(url(object), :headers => @client.headers)
end
find(id) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 22
def find(id)
  object = { 'uid' => id }
  perform_request(url(object))
end
get() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 18
def get
  perform_request(url)
end
model_route() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 14
def model_route
  @model_name.to_s.downcase
end
next_page() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 43
def next_page
  perform_request(link('next')) if link('next')
end
previous_page() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 47
def previous_page
  perform_request(link('previous')) if link('previous')
end
save(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 27
def save(object)
  new_record?(object) ? create(object) : update(object)
end

Protected Instance Methods

create(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 66
def create(object)
  object = typecast(object)
  @client.connection.post(url, {:headers => @client.headers, :body => object.to_json})
end
date_formatter() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 94
def date_formatter
  "%Y-%m-%dT%H:%M:%S"
end
new_record?(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 62
def new_record?(object)
  object["uid"].nil? || object["uid"] == ""
end
perform_request(url) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 104
def perform_request(url)
  response = @client.connection.get(url, {:headers => @client.headers})
  hash = JSON.parse(response.body)
  @links = hash['_links']
  hash
end
resource_url() click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 98
def resource_url
  url = "https://api.myob.com/#{@client.endpoint}/essentials/#{model_route}"
  url.gsub!(':business_uid', @client.business_uid) if @client.business_uid
  url
end
typecast(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 76
def typecast(object)
  returned_object = object.dup # don't change the original object

  returned_object.each do |key, value|
    if value.respond_to?(:strftime)
      returned_object[key] = value.strftime(date_formatter)
    end
  end

  returned_object
end
update(object) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 71
def update(object)
  object = typecast(object)
  @client.connection.put(url(object), {:headers => @client.headers, :body => object.to_json})
end
url(object = nil) click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 52
def url(object = nil)
  if model_route == ''
    "https://api.myob.com/#{@client.endpoint}/essentials"
  elsif object && object['uid']
    "#{resource_url}/#{object['uid']}"
  else
    resource_url
  end
end