class BridgeBankin::BridgeObject
BridgeObject
is the base class from which all other more specific BridgeBankin
resources derive.
Constants
- HIDDEN_ATTRIBUTES
Public Class Methods
convert_to_bridge_object(data)
click to toggle source
Convert any API
response body with its corresponding resource object if exists
@param [Hash] data parsed API
response body
@return [Account, Bank
, Category
, Item
, Stock
, Transaction
, Transfer
, User
, BridgeObject] a resource object
# File lib/bridge_bankin/bridge_object.rb, line 27 def convert_to_bridge_object(data) if data[:resources] data[:resources].map { |resource| convert_to_bridge_object(resource) } elsif data.is_a?(Array) data.map { |val| convert_to_bridge_object(val) } else object_from_resource_type(data) end end
new(**attrs)
click to toggle source
Initializes BridgeObject
@param [Hash] attrs any informations returned by the API
as a valid response
# File lib/bridge_bankin/bridge_object.rb, line 15 def initialize(**attrs) define_instance_variables(attrs) end
Private Class Methods
object_classes()
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 39 def object_classes @object_classes ||= ObjectTypes.resource_types_to_classes end
object_from_resource_type(data)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 43 def object_from_resource_type(data) object_classes.fetch(data[:resource_type], BridgeObject).new(**data) end
Public Instance Methods
==(other)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 66 def ==(other) other.is_a?(BridgeObject) && to_hash == other.to_hash end
to_hash()
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 48 def to_hash instance_variables.each_with_object({}) do |var, hash| hash[var.to_s.delete("@")] = case instance_variable_get(var) when BridgeObject instance_variable_get(var).to_hash when Array instance_variable_get(var).map { |val| val.is_a?(BridgeObject) ? val.to_hash : val } else instance_variable_get(var) end end.transform_keys!(&:to_sym) end
to_json(*_args)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 62 def to_json(*_args) to_hash.to_json end
Private Instance Methods
define_instance_variables(attrs)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 72 def define_instance_variables(attrs) attrs.each do |key, value| next if HIDDEN_ATTRIBUTES.include?(key) handle_values_types(key, value) do |parsed_value| instance_variable_set("@#{key}".to_sym, parsed_value) self.class.class_eval { attr_reader key } end end end
handle_array_values(array)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 98 def handle_array_values(array) array.map do |value| next value unless value.is_a?(Hash) handle_hash_values(value) end end
handle_hash_values(hash)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 106 def handle_hash_values(hash) self.class.convert_to_bridge_object(hash) end
handle_time_values(key, value)
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 110 def handle_time_values(key, value) if key == :date Date.parse(value) elsif key.to_s.match?(/_at$/) Time.parse(value) else value end end
handle_values_types(key, value) { |case value when Array handle_array_values(value) when Hash handle_hash_values(value) when String handle_time_values(key, value) else value end| ... }
click to toggle source
# File lib/bridge_bankin/bridge_object.rb, line 83 def handle_values_types(key, value) yield( case value when Array handle_array_values(value) when Hash handle_hash_values(value) when String handle_time_values(key, value) else value end ) end