Class: TreezorConnect::TreezorObject

Inherits:
Object
  • Object
show all
Defined in:
lib/treezor_connect/treezor_object.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTreezorObject

Returns a new instance of TreezorObject.



5
6
7
# File 'lib/treezor_connect/treezor_object.rb', line 5

def initialize
  @attributes = {}
end

Class Method Details

.constantize_object_class(object_class) ⇒ Object



18
19
20
21
# File 'lib/treezor_connect/treezor_object.rb', line 18

def self.constantize_object_class(object_class)
  object_class_path = object_class.split('/').map { |value| Util.camelize(value) }.join('::')
  Module.const_get("TreezorConnect::#{object_class_path}")
end

.construct_from(data, opts = {}) ⇒ Object



9
10
11
12
13
14
15
16
# File 'lib/treezor_connect/treezor_object.rb', line 9

def self.construct_from(data, opts = {})
  object_class = constantize_object_class(opts[:object_class])
  id = extract_id(data, object_class)
  instance = create_instance(object_class, id)
  set_attributes(instance, data)
  define_readers(instance)
  instance
end

.create_instance(object_class, id) ⇒ Object



28
29
30
31
32
# File 'lib/treezor_connect/treezor_object.rb', line 28

def self.create_instance(object_class, id)
  instance = object_class.new
  instance.instance_variable_set(:@attributes, { 'id' => id })
  instance
end

.define_readers(instance) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/treezor_connect/treezor_object.rb', line 39

def self.define_readers(instance)
  @attributes = instance.instance_variable_get(:@attributes)
  @attributes.each_key do |key|
    instance.define_singleton_method(key) do
      @attributes[key]
    end
  end
end

.extract_id(data, object_class) ⇒ Object



23
24
25
26
# File 'lib/treezor_connect/treezor_object.rb', line 23

def self.extract_id(data, object_class)
  primary_key = object_class::OBJECT_PRIMARY_KEY
  data.delete(primary_key)
end

.set_attributes(instance, data) ⇒ Object



34
35
36
37
# File 'lib/treezor_connect/treezor_object.rb', line 34

def self.set_attributes(instance, data)
  snake_cased_data = data.transform_keys { |key| Util.snake_case(key) }
  instance.instance_variable_get(:@attributes).merge!(snake_cased_data)
end