Class: JSONORM::BaseModel

Inherits:
Object
  • Object
show all
Includes:
Validations
Defined in:
lib/json-orm/base_model.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Validations

included, #validate!

Constructor Details

#initialize(attributes = {}, orm_instance:) ⇒ BaseModel

Returns a new instance of BaseModel.



27
28
29
30
31
32
33
34
35
# File 'lib/json-orm/base_model.rb', line 27

def initialize(attributes = {}, orm_instance:)
  raise 'ORM instance is required' unless orm_instance

  self.class.orm_instance = orm_instance
  @orm_instance = orm_instance
  attributes.each do |attr, value|
    send("#{attr}=", value) if self.class.attributes_list.include?(attr.to_sym)
  end
end

Class Attribute Details

.attributes_listObject

Returns the value of attribute attributes_list.



9
10
11
# File 'lib/json-orm/base_model.rb', line 9

def attributes_list
  @attributes_list
end

.orm_instanceObject

Returns the value of attribute orm_instance.



9
10
11
# File 'lib/json-orm/base_model.rb', line 9

def orm_instance
  @orm_instance
end

Class Method Details

.attributes(*names) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/json-orm/base_model.rb', line 11

def attributes(*names)
  @attributes_list ||= []
  names.each do |name|
    attr_accessor name unless method_defined?(name)
    @attributes_list << name unless @attributes_list.include?(name)
  end
  attr_accessor :id unless method_defined?(:id)
  @attributes_list << :id unless @attributes_list.include?(:id)
end

.inherited(subclass) ⇒ Object



22
23
24
25
# File 'lib/json-orm/base_model.rb', line 22

def self.inherited(subclass)
  subclass.attributes_list = []
  subclass.orm_instance = nil
end

Instance Method Details

#saveObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/json-orm/base_model.rb', line 37

def save
  validate!
  data = self.class.attributes_list.each_with_object({}) do |attr, hash|
    hash[attr] = send(attr)
  end

  result = if id.nil? || id.to_s.empty?
             @orm_instance.create(data)
           else
             @orm_instance.update(id, data)
           end
  self.id = result[:id] if result.is_a?(Hash) && result.key?(:id)
  true
rescue StandardError => e
  logger.error("Failed to save record for #{self.class.name}, Error: #{e.message}")
  raise "Failed to save record: #{e.message}"
end