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?



117
118
119
# File 'lib/active_data/model/attributes.rb', line 117

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

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



161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/active_data/model/attributes.rb', line 161

def assign_attributes(attrs)
  attrs.each do |name, value|
    name = name.to_s
    sanitize_value = self.class._sanitize && name == self.class.primary_name

    if respond_to?("#{name}=") && !sanitize_value
      public_send("#{name}=", value)
    else
      logger.info("Ignoring #{sanitize_value ? 'primary' : 'undefined'} `#{name}` attribute value for #{self} during mass-assignment")
    end
  end
end

#attribute(name) ⇒ Object



122
123
124
125
126
127
128
# File 'lib/active_data/model/attributes.rb', line 122

def attribute(name)
  reflection = self.class.reflect_on_attribute(name)
  return unless reflection
  initial_value = @initial_attributes.to_h.fetch(reflection.name, ActiveData::UNDEFINED)
  @_attributes ||= {}
  @_attributes[reflection.name] ||= reflection.build_attribute(self, initial_value)
end

#attribute_came_from_user?(name) ⇒ Boolean

Returns:



144
145
146
# File 'lib/active_data/model/attributes.rb', line 144

def attribute_came_from_user?(name)
  attribute(name).came_from_user?
end

#attribute_present?(name) ⇒ Boolean

Returns:



148
149
150
# File 'lib/active_data/model/attributes.rb', line 148

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

#attributes(include_associations = true) ⇒ Object



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

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

#initialize(attrs = {}) ⇒ Object



113
114
115
# File 'lib/active_data/model/attributes.rb', line 113

def initialize(attrs = {})
  assign_attributes attrs
end

#initialize_copy(_) ⇒ Object



179
180
181
182
183
184
185
# File 'lib/active_data/model/attributes.rb', line 179

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

#inspectObject



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

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

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



135
136
137
# File 'lib/active_data/model/attributes.rb', line 135

def read_attribute(name)
  attribute(name).read
end

#read_attribute_before_type_cast(name) ⇒ Object



140
141
142
# File 'lib/active_data/model/attributes.rb', line 140

def read_attribute_before_type_cast(name)
  attribute(name).read_before_type_cast
end

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



156
157
158
# File 'lib/active_data/model/attributes.rb', line 156

def update(attrs)
  assign_attributes(attrs)
end

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



130
131
132
# File 'lib/active_data/model/attributes.rb', line 130

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