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