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
link(name)
click to toggle source
# File lib/myob/essentials/api/model/base.rb, line 88 def link(name) return nil unless @links link_hash = @links.select{|link_hash| link_hash['rel'] == name}.first link_hash ? link_hash['href'] : nil 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