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
- #initialize(params = {}) ⇒ Object
- #new_record? ⇒ Boolean
- #read_attribute(attr_name) ⇒ Object
- #write_attribute(attr_name, value) ⇒ Object
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] = 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(:"#{}=", self.class.clean_and_transform_value(value, attr_name)) if != attr_name end end end end |
#new_record? ⇒ 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 |