Module: ActiveData::Model::Attributes

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_data/model/attributes.rb,
lib/active_data/model/attributes/base.rb,
lib/active_data/model/attributes/attribute.rb,
lib/active_data/model/attributes/localized.rb,
lib/active_data/model/attributes/collection.rb,
lib/active_data/model/attributes/dictionary.rb,
lib/active_data/model/attributes/represents.rb,
lib/active_data/model/attributes/reference_one.rb,
lib/active_data/model/attributes/reference_many.rb,
lib/active_data/model/attributes/reflections/base.rb,
lib/active_data/model/attributes/reflections/attribute.rb,
lib/active_data/model/attributes/reflections/localized.rb,
lib/active_data/model/attributes/reflections/collection.rb,
lib/active_data/model/attributes/reflections/dictionary.rb,
lib/active_data/model/attributes/reflections/represents.rb,
lib/active_data/model/attributes/reflections/reference_one.rb,
lib/active_data/model/attributes/reflections/reference_many.rb

Defined Under Namespace

Modules: ClassMethods, Reflections Classes: Attribute, Base, Collection, Dictionary, Localized, ReferenceMany, ReferenceOne, Represents

Instance Method Summary collapse

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



146
147
148
# File 'lib/active_data/model/attributes.rb', line 146

def == other
  super || other.instance_of?(self.class) && other.attributes(false) == attributes(false)
end

#assign_attributes(attrs) ⇒ Object Also known as: attributes=



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/active_data/model/attributes.rb', line 185

def assign_attributes attrs
  if self.class.represented_attributes.present? ||
      (self.class.is_a?(ActiveData::Model::Associations::NestedAttributes) &&
      self.class.nested_attributes_options.present?)
    attrs.stringify_keys!
    represented_attrs = self.class.represented_names_and_aliases
      .each_with_object({}) do |name, result|
        result[name] = attrs.delete(name) if attrs.has_key?(name)
      end
    if self.class.is_a?(ActiveData::Model::Associations::NestedAttributes)
      nested_attrs = self.class.nested_attributes_options.keys
        .each_with_object({}) do |association_name, result|
          name = "#{association_name}_attributes"
          result[name] = attrs.delete(name) if attrs.has_key?(name)
        end
    end

    _assign_attributes(attrs)
    _assign_attributes(represented_attrs)
    _assign_attributes(nested_attrs) if nested_attrs
  else
    _assign_attributes(attrs)
  end
  true
end

#attribute(name) ⇒ Object



151
152
153
154
155
156
# File 'lib/active_data/model/attributes.rb', line 151

def attribute(name)
  if reflection = self.class.reflect_on_attribute(name)
    (@_attributes ||= {})[reflection.name] ||= reflection
      .build_attribute(self, @initial_attributes.try(:[], reflection.name))
  end
end

#attribute_present?(name) ⇒ Boolean

Returns:



172
173
174
# File 'lib/active_data/model/attributes.rb', line 172

def attribute_present? name
  attribute(name).value_present?
end

#attributes(include_associations = true) ⇒ Object



176
177
178
# File 'lib/active_data/model/attributes.rb', line 176

def attributes(include_associations = true)
  Hash[attribute_names(include_associations).map { |name| [name, read_attribute(name)] }]
end

#initialize(attrs = {}) ⇒ Object



142
143
144
# File 'lib/active_data/model/attributes.rb', line 142

def initialize attrs = {}
  assign_attributes attrs
end

#initialize_copy(_) ⇒ Object



216
217
218
219
220
221
222
# File 'lib/active_data/model/attributes.rb', line 216

def initialize_copy _
  @initial_attributes = Hash[attribute_names.map do |name|
    [name, read_attribute_before_type_cast(name)]
  end]
  @_attributes = nil
  super
end

#inspectObject



212
213
214
# File 'lib/active_data/model/attributes.rb', line 212

def inspect
  "#<#{self.class.send(:original_inspect)} #{attributes_for_inspect.presence || '(no attributes)'}>"
end

#read_attribute(name) ⇒ Object Also known as: []



163
164
165
# File 'lib/active_data/model/attributes.rb', line 163

def read_attribute name
  attribute(name).read
end

#read_attribute_before_type_cast(name) ⇒ Object



168
169
170
# File 'lib/active_data/model/attributes.rb', line 168

def read_attribute_before_type_cast name
  attribute(name).read_before_type_cast
end

#update(attrs) ⇒ Object Also known as: update_attributes



180
181
182
# File 'lib/active_data/model/attributes.rb', line 180

def update attrs
  assign_attributes(attrs)
end

#write_attribute(name, value) ⇒ Object Also known as: []=



158
159
160
# File 'lib/active_data/model/attributes.rb', line 158

def write_attribute name, value
  attribute(name).write(value)
end