class MyobAdvanced::Api::Model::Base

Constants

QUERY_OPTIONS

Public Class Methods

new(client, model_name) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 7
def initialize(client, model_name)
  @client          = client
  @api_url         = client.default_api_url
  @model_name      = model_name || 'Base'
end

Public Instance Methods

all(options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 17
def all(options = {})
  perform_request(self.url(nil, options[:params]), options)
end
Also aliased as: get
create(object, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 65
def create(object, options = {})
  object = typecast(object)
  request_options = { body: object, method: 'put' }
  perform_request(self.url(nil, options[:params]), request_options)
end
destroy(id) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 36
def destroy(id)
  object = { 'ID' => id }
  @client.connection.delete(self.url(object), :headers => @client.headers)
end
destroy_by_path(sub_path) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 41
def destroy_by_path(sub_path)
  object = { 'sub_path' => sub_path }
  @client.connection.delete(self.url(object), :headers => @client.headers)
end
exec_action(action, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 46
def exec_action(action, options = {})
  options[:method] = 'post'
  object = { 'sub_path' => action }
  perform_request(self.url(object, options[:params]), options)
end
find(id, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 22
def find(id, options = {})
  object = { 'ID' => id }
  perform_request(self.url(object, options[:params]), options)
end
find_by_path(sub_path, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 27
def find_by_path(sub_path, options = {})
  object = { 'sub_path' => sub_path }
  perform_request(self.url(object, options[:params]), options)
end
first(options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 32
def first(options = {})
  all(options).first
end
get(options = {})
Alias for: all
get_attach(options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 59
def get_attach(options = {})
  object = nil
  object = { 'sub_path' => options[:sub_path] } if options[:sub_path]
  perform_request(self.url(object, options[:params]), options)
end
model_route() click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 13
def model_route
  @model_name.to_s
end
put_attach(options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 52
def put_attach(options = {})
  options[:method] = 'put'
  object = nil
  object = { 'sub_path' => options[:sub_path] } if options[:sub_path]
  perform_request(self.url(object, options[:params]), options)
end
update(object, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 71
def update(object, options = {})
  object = typecast(object)
  request_options = { body: object, method: 'put' }
  perform_request(self.url(nil, options[:params]), request_options)
end
url(object = nil, params = nil) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 77
def url(object = nil, params = nil)
  @model_route ||= model_route
  url =  @api_url

  if @model_route.present?
    sub_path = nil
    sub_path = "/#{object['ID']}" if object && object['ID']
    sub_path = "/#{object['sub_path']}" if object && object['sub_path']
    # Init url
    url = "#{@api_url}/#{@model_route}#{sub_path}"
  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_advanced/api/models/base.rb, line 137
def build_filter(value)
  return value unless value.is_a?(Hash)

  temp = "\\\\'"
  value.map { |key, value| "#{key} eq '#{value.to_s.gsub("'", temp)}'" }.join(' and ')
end
date_formatter() click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 111
def date_formatter
  "%Y-%m-%dT%H:%M:%S"
end
parse_response(response) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 144
def parse_response(response)
  return response.body unless response.body.present?

  JSON.parse(response.body) rescue {}
end
perform_request(url, options = {}) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 119
def perform_request(url, options = {})
  request_options = { headers: @client.headers }
  request_options[:body] = options[:body].to_json if options[:body]
  method = options[:method] || 'get'
  parse_response(@client.connection.send(method, url, request_options))
end
process_query(data, query) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 150
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_advanced/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_advanced/api/models/base.rb, line 115
def resource_url
  "#{@api_url}/#{self.model_route}"
end
typecast(object) click to toggle source
# File lib/myob_advanced/api/models/base.rb, line 99
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