class Myob::Api::Model::Base
Constants
- API_URL
- QUERY_OPTIONS
Public Class Methods
new(client, model_name)
click to toggle source
# File lib/myob/api/models/base.rb, line 9 def initialize(client, model_name) @client = client @model_name = model_name || 'Base' @next_page_link = nil end
Public Instance Methods
all(params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 19 def all(params = nil) perform_request(self.url(nil, params)) end
Also aliased as: get
all_items(params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 37 def all_items(params = nil) results = all(params)["Items"] while next_page? results += next_page["Items"] || [] end results end
destroy(object)
click to toggle source
# File lib/myob/api/models/base.rb, line 58 def destroy(object) @client.connection.delete(self.url(object), :headers => @client.headers) end
find(id)
click to toggle source
# File lib/myob/api/models/base.rb, line 45 def find(id) object = { 'UID' => id } perform_request(self.url(object)) end
first(params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 50 def first(params = nil) all(params).first end
model_route()
click to toggle source
# File lib/myob/api/models/base.rb, line 15 def model_route @model_name.to_s end
new_record?(object)
click to toggle source
# File lib/myob/api/models/base.rb, line 81 def new_record?(object) object["UID"].nil? || object["UID"] == "" end
next_page(params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 33 def next_page(params = nil) perform_request(@next_page_link) end
next_page?()
click to toggle source
# File lib/myob/api/models/base.rb, line 29 def next_page? !!@next_page_link end
records(params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 24 def records(params = nil) response = all(params) response.is_a?(Hash) && response.key?('Items') ? response['Items'] : response end
save(object)
click to toggle source
# File lib/myob/api/models/base.rb, line 54 def save(object) new_record?(object) ? create(object) : update(object) end
url(object = nil, params = nil)
click to toggle source
# File lib/myob/api/models/base.rb, line 62 def url(object = nil, params = nil) url = if self.model_route == '' API_URL else if @client && @client.current_company_file_url "#{@client.current_company_file_url}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}" else "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}#{"/#{object['UID']}" if object && object['UID']}" end end if params.is_a?(Hash) query = query_string(params) url += "?#{query}" if !query.nil? && query.length > 0 end url end
Private Instance Methods
build_filter(value)
click to toggle source
# File lib/myob/api/models/base.rb, line 137 def build_filter(value) return value unless value.is_a?(Hash) value.map { |key, value| "#{key} eq '#{value.to_s.gsub("'", %q(\\\'))}'" }.join(' and ') end
create(object)
click to toggle source
# File lib/myob/api/models/base.rb, line 86 def create(object) object = typecast(object) response = @client.connection.post(self.url, {:headers => @client.headers, :body => object.to_json}) end
date_formatter()
click to toggle source
# File lib/myob/api/models/base.rb, line 108 def date_formatter "%Y-%m-%dT%H:%M:%S" end
parse_response(response)
click to toggle source
# File lib/myob/api/models/base.rb, line 143 def parse_response(response) JSON.parse(response.body) end
perform_request(url)
click to toggle source
# File lib/myob/api/models/base.rb, line 120 def perform_request(url) model_data = parse_response(@client.connection.get(url, {:headers => @client.headers})) @next_page_link = model_data['NextPageLink'] if self.model_route != '' model_data end
process_query(data, query)
click to toggle source
# File lib/myob/api/models/base.rb, line 147 def process_query(data, query) query.each do |property, value| data.select! {|x| x[property] == value} end data end
query_string(params)
click to toggle source
# File lib/myob/api/models/base.rb, line 126 def query_string(params) params.map do |key, value| if QUERY_OPTIONS.include?(key) value = build_filter(value) if key == :filter key = "$#{key}" end "#{key}=#{CGI.escape(value.to_s)}" end.join('&') end
resource_url()
click to toggle source
# File lib/myob/api/models/base.rb, line 112 def resource_url if @client && @client.current_company_file_url "#{@client.current_company_file_url}/#{self.model_route}" else "#{API_URL}#{@client.current_company_file[:id]}/#{self.model_route}" end end
typecast(object)
click to toggle source
# File lib/myob/api/models/base.rb, line 96 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/api/models/base.rb, line 91 def update(object) object = typecast(object) response = @client.connection.put(self.url(object), {:headers => @client.headers, :body => object.to_json}) end