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