class Acumatica::Resource

Public Class Methods

create(body = {}, params = {}) click to toggle source
# File lib/acumatica/resource.rb, line 15
def create(body = {}, params = {})
  response = Acumatica::Client.instance.connection.put do |req|
    req.url url
    req.body = format_request_body(body) if body
    req.params = parse_query_params(params) if params
  end

  new(response.body)
end
find_all(params = {}) click to toggle source
# File lib/acumatica/resource.rb, line 25
def find_all(params = {})
  response = Acumatica::Client.instance.connection.get do |req|
    req.url url
    req.params = parse_query_params(params) if params
  end

  response.body.map { |attrs| new(attrs) }
end
new(params = {}) click to toggle source
Calls superclass method
# File lib/acumatica/resource.rb, line 70
def initialize(params = {})
  super(format_params(params))
  format_attributes!
end
url() click to toggle source
# File lib/acumatica/resource.rb, line 34
def url
  URI.join(Acumatica::Client.instance.base_url, to_s.split("::").last)
end

Private Class Methods

deep_transform_values!(object) click to toggle source
# File lib/acumatica/resource.rb, line 40
def deep_transform_values!(object)
  case object
  when Array
    object.map! { |e| deep_transform_values!(e) }
  when Hash
    object.each do |key, value|
      object[key] = deep_transform_values!(value)
    end
  else
    { "value" => object }
  end
end
format_request_body(body_hash) click to toggle source
# File lib/acumatica/resource.rb, line 53
def format_request_body(body_hash)
  body = body_hash.deep_transform_keys { |key| key.to_s.camelize.gsub("Id", "ID") }
  deep_transform_values!(body)
end
parse_query_params(params) click to toggle source
# File lib/acumatica/resource.rb, line 58
def parse_query_params(params)
  query_params = {}

  query_params['$select'] = params[:select] if params[:select]
  query_params['$filter'] = params[:filter] if params[:filter]
  query_params['$expand'] = params[:expand] if params[:expand]
  query_params['$skip']   = params[:offset] if params[:offset]
  query_params['$top']    = params[:limit]  if params[:limit]
  query_params
end

Private Instance Methods

format_attributes!() click to toggle source
# File lib/acumatica/resource.rb, line 82
def format_attributes!
  self.attributes ||= []
  attributes.each { |a| self[methodify(a['AttributeID']['value'])] = a['Value']['value'] }
end
format_params(params) click to toggle source
# File lib/acumatica/resource.rb, line 77
def format_params(params)
  new_params = params.transform_keys { |k| methodify(k) }
  new_params.transform_values! { |v| v.is_a?(Hash) && v.keys == ["value"] ? v.values.first : v }
end
methodify(string) click to toggle source
# File lib/acumatica/resource.rb, line 87
def methodify(string)
  string.underscore.parameterize(methodify_separator)
end
methodify_separator() click to toggle source
# File lib/acumatica/resource.rb, line 91
def methodify_separator
  @methodify_separator ||=
    if Gem.loaded_specs["activesupport"].version < Gem::Version.create("5.0.0")
      '_'
    else
      { separator: '_' }
    end
end