module ActiveType::VirtualAttributes
Public Class Methods
attribute_for_inspect(value)
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 273 def self.attribute_for_inspect(value) if value.is_a?(String) && value.length > 50 "#{value[0, 50]}...".inspect elsif value.is_a?(Date) || value.is_a?(Time) %("#{value.to_formatted_s(:db)}") elsif value.is_a?(Array) && value.size > 10 inspected = value.first(10).inspect %(#{inspected[0...-1]}, ...]) else value.inspect end end
deep_dup(hash)
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 122 def self.deep_dup(hash) result = hash.dup result.each do |key, value| result[key] = value.dup if value.duplicable? end result end
Public Instance Methods
[](name)
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 181 def [](name) read_existing_virtual_attribute(name) { super } end
[]=(name, value)
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 198 def []=(name, value) write_existing_virtual_attribute(name, value) { super } end
_read_attribute(name)
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 186 def _read_attribute(name) read_existing_virtual_attribute(name) { super } end
_write_attribute(name, value)
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 203 def _write_attribute(name, value) write_existing_virtual_attribute(name, value) { super } end
attributes()
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 215 def attributes self.class._virtual_column_names.each_with_object(super) do |name, attrs| attrs[name] = read_virtual_attribute(name) end end
changed?()
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 221 def changed? self.class._virtual_column_names.any? { |attr| virtual_attributes_were[attr] != send(attr) } || super end
changes()
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 225 def changes changes = self.class._virtual_column_names.each_with_object({}) do |attr, changes| current_value = send(attr) previous_value = virtual_attributes_were[attr] changes[attr] = [previous_value, current_value] if previous_value != current_value end super.merge(changes) end
changes_applied()
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 236 def changes_applied super virtual_attributes.each do |attr, _| value = read_virtual_attribute(attr) virtual_attributes_were[attr] = value.duplicable? ? value.clone : value end end
initialize_dup(other)
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 145 def initialize_dup(other) @virtual_attributes_cache = {} @virtual_attributes = VirtualAttributes.deep_dup(virtual_attributes) @virtual_attributes_were = VirtualAttributes.deep_dup(virtual_attributes_were) super end
inspect()
click to toggle source
Returns the contents of the record as a nicely formatted string.
# File lib/active_type/virtual_attributes.rb, line 266 def inspect inspection = attributes.collect do |name, value| "#{name}: #{VirtualAttributes.attribute_for_inspect(value)}" end.sort.compact.join(", ") "#<#{self.class} #{inspection}>" end
read_attribute(name)
click to toggle source
in 6.1, read_attribute
does not call _read_attribute
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 193 def read_attribute(name) read_existing_virtual_attribute(name) { super } end
read_existing_virtual_attribute(name) { || ... }
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 165 def read_existing_virtual_attribute(name, &block_when_not_virtual) if self.singleton_class._has_virtual_column?(name) read_virtual_attribute(name) else yield end end
read_virtual_attribute(name)
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 246 def read_virtual_attribute(name) name = name.to_s if virtual_attributes_cache.has_key?(name) virtual_attributes_cache[name] else virtual_attributes_cache[name] = begin virtual_column = self.singleton_class._virtual_column(name) raw_value = virtual_attributes.fetch(name) { virtual_column.default_value(self) } virtual_column.type_cast(raw_value) end end end
virtual_attributes()
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 153 def virtual_attributes @virtual_attributes ||= {} end
virtual_attributes_cache()
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 161 def virtual_attributes_cache @virtual_attributes_cache ||= {} end
virtual_attributes_were()
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 157 def virtual_attributes_were @virtual_attributes_were ||= {} end
write_attribute(name, value)
click to toggle source
in 6.1, write_attribute
does not call _write_attribute
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 210 def write_attribute(name, value) write_existing_virtual_attribute(name, value) { super } end
write_existing_virtual_attribute(name, value) { || ... }
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 173 def write_existing_virtual_attribute(name, value, &block_when_not_virtual) if self.singleton_class._has_virtual_column?(name) write_virtual_attribute(name, value) else yield end end
write_virtual_attribute(name, value)
click to toggle source
# File lib/active_type/virtual_attributes.rb, line 259 def write_virtual_attribute(name, value) name = name.to_s virtual_attributes_cache.delete(name) virtual_attributes[name] = value end
Private Instance Methods
attribute_names_for_serialization()
click to toggle source
Calls superclass method
# File lib/active_type/virtual_attributes.rb, line 289 def attribute_names_for_serialization super + self.class._virtual_column_names end