Module: Eluvia::ActiveModel::Attributes

Extended by:
ActiveSupport::Concern
Includes:
ActiveModel::Model
Included in:
AmountAttribute, ArrayAttribute, EnumAttribute, ObjectAttribute, Eluvia::ActiveRecord::FileAttribute, Eluvia::ActiveRecord::FiltersModel, File, FileWrapper, ImageWrapper
Defined in:
lib/eluvia/active_model/attributes.rb

Constant Summary collapse

SIMPLE_TYPES =
%i[any string uuid date datetime integer float boolean].freeze
COMPLEX_TYPES =
%i[has_one has_many].freeze

Instance Method Summary collapse

Instance Method Details

#initialize(params = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/eluvia/active_model/attributes.rb', line 10

def initialize(params = {})
  super(params)
  if params
    self.class.attrs(type: SIMPLE_TYPES).each do |attr_spec|
      attr_name = attr_spec[:attr_name]
      underlying_attr_name = attr_spec[:underlying_attr_name] || attr_name

      # Get value from input params
      key = nil
      if params.key?(attr_name)
        key = attr_name
      elsif params.key?(attr_name.to_s)
        key = attr_name.to_s
      end

      # Clean, transform and assign value only if key defined in params
      if key
        value = params[key]
        self.send(:"#{attr_name}=", self.class.clean_value(value, attr_name))
        self.send(:"#{underlying_attr_name}=", self.class.clean_and_transform_value(value, attr_name)) if underlying_attr_name != attr_name
      end
    end
  end
end

#new_record?Boolean

Returns:

  • (Boolean)


35
36
37
38
39
40
41
# File 'lib/eluvia/active_model/attributes.rb', line 35

def new_record?
  if self.respond_to?(:id)
    self.id.blank?
  else
    true
  end
end

#read_attribute(attr_name) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/eluvia/active_model/attributes.rb', line 51

def read_attribute(attr_name)
  if self.class.has_attr?(attr_name)
    instance_variable_get("@#{attr_name}")
  else
    super(attr_name)
  end
end

#write_attribute(attr_name, value) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/eluvia/active_model/attributes.rb', line 43

def write_attribute(attr_name, value)
  if self.class.has_attr?(attr_name)
    instance_variable_set("@#{attr_name}", value)
  else
    super(attr_name, value)
  end
end