class ActiveRecord::Remote::Base

Attributes

parsed_data[RW]
raw_data[RW]
response[RW]

Public Class Methods

all() click to toggle source
# File lib/active_record/remote/base.rb, line 46
def self.all
  where({})
end
api_type(type) click to toggle source
# File lib/active_record/remote/base.rb, line 23
def self.api_type(type)
  self.api_type = type
end
new(options = {}) click to toggle source
Calls superclass method
# File lib/active_record/remote/base.rb, line 27
def initialize(options = {})
  super(options.merge(custom_options))
end
where(attrs) click to toggle source
# File lib/active_record/remote/base.rb, line 40
def self.where(attrs)
  instance = new(attrs)
  instance.response = instance.handle_response(instance.request)
  instance.parse_records rescue []
end

Public Instance Methods

base_module() click to toggle source
# File lib/active_record/remote/base.rb, line 71
def base_module
  self.class.to_s.split('::').first.constantize
end
client() click to toggle source
# File lib/active_record/remote/base.rb, line 106
def client
  base_module.const_get("Client").new(self.class.action_path)
end
custom_options() click to toggle source
# File lib/active_record/remote/base.rb, line 31
def custom_options
  # overwrite in subclass to provide custom options to initalizer
end
full_module() click to toggle source
# File lib/active_record/remote/base.rb, line 75
def full_module
  self.class.to_s.split('::')[0..-2].join('::').constantize
end
handle_response(response) click to toggle source
# File lib/active_record/remote/base.rb, line 98
def handle_response(response)
  base_module.const_get("Response").new(
    operation:    self.class.operation_path,
    raw_response: response,
    instance:     self
  )
end
parse_records() click to toggle source
# File lib/active_record/remote/base.rb, line 83
def parse_records
  data = response.data.is_a?(Array) ? response.data : [response.data]
  return [] if data.compact.empty?
  data.flat_map do |data_item|
    instance = self.class.new
    read_attributes = "#{record_class}ReadAttributes"
    if full_module.const_defined?(read_attributes)
      instance.extend(read_attributes.constantize)
    end
    attrs = data_item.transform_keys! {|k| k.downcase.to_sym }
    instance.update_attributes(attrs)
    instance
  end
end
record_class() click to toggle source
# File lib/active_record/remote/base.rb, line 79
def record_class
  self.class.to_s.split('::').last
end
request() click to toggle source
# File lib/active_record/remote/base.rb, line 50
def request
  request_body    = send("as_#{api_type}")
  client.api_type = api_type
  client.request(request_body)
end
save() click to toggle source
# File lib/active_record/remote/base.rb, line 35
def save
  @response = handle_response(request)
  valid?
end
update_attributes(attrs) click to toggle source
# File lib/active_record/remote/base.rb, line 56
def update_attributes(attrs)
  attrs.each { |k, v| send("#{k}=", v) }
end
valid?() click to toggle source
Calls superclass method
# File lib/active_record/remote/base.rb, line 60
def valid?
  if response.present?
    # all model validations may pass, but response
    # may have contained an error message
    response.success?
  else
    # use model validations
    super
  end
end