Module: BetterRecord::BaseExtensions::AttributeMethods::Write
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb
Instance Method Summary collapse
- #_write_attribute(attr_name, value) ⇒ Object
- #normalize_attribute_value(attr_name, value) ⇒ Object
- #should_normalize?(attr_name) ⇒ Boolean
Instance Method Details
#_write_attribute(attr_name, value) ⇒ Object
9 10 11 12 13 14 15 |
# File 'lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb', line 9 def _write_attribute(attr_name, value) if should_normalize? attr_name super(attr_name, normalize_attribute_value(attr_name, value)) else super(attr_name, value) end end |
#normalize_attribute_value(attr_name, value) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb', line 17 def normalize_attribute_value(attr_name, value) case t = type_for_attribute(attr_name) when ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array [value].flatten.select(&:present?) when ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb value.presence || {} when ActiveRecord::Type::Boolean BetterRecord.strict_booleans ? Boolean.strict_parse(value) : Boolean.parse(value) when BetterRecord::CustomType t.class.normalize_type_value(value) else value.presence end end |
#should_normalize?(attr_name) ⇒ Boolean
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb', line 32 def should_normalize?(attr_name) if !respond_to?(:normalize_columns?) || normalize_columns? if respond_to?(:normalized_columns) normalized_columns.is_a?(Array) ? normalized_columns.include?(attr_name.to_sym) : normalized_columns[attr_name] else true end else false end end |