Module: ActiveType::VirtualAttributes

Extended by:
ActiveSupport::Concern
Included in:
Object, Record
Defined in:
lib/active_type/virtual_attributes.rb

Defined Under Namespace

Modules: ClassMethods Classes: AccessorGenerator, VirtualColumn

Instance Method Summary collapse

Instance Method Details

#[](name) ⇒ Object



104
105
106
107
108
109
110
# File 'lib/active_type/virtual_attributes.rb', line 104

def [](name)
  if self.singleton_class._has_virtual_column?(name)
    read_virtual_attribute(name)
  else
    super
  end
end

#[]=(name, value) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/active_type/virtual_attributes.rb', line 112

def []=(name, value)
  if self.singleton_class._has_virtual_column?(name)
    write_virtual_attribute(name, value)
  else
    super
  end
end

#attributesObject



120
121
122
123
124
# File 'lib/active_type/virtual_attributes.rb', line 120

def attributes
  self.class._virtual_column_names.each_with_object(super) do |name, attrs|
    attrs[name] = read_virtual_attribute(name)
  end
end

#initializeObject



98
99
100
101
102
# File 'lib/active_type/virtual_attributes.rb', line 98

def initialize(*)
  @virtual_attributes = {}
  @virtual_attributes_cache = {}
  super
end

#read_virtual_attribute(name) ⇒ Object



126
127
128
129
130
131
# File 'lib/active_type/virtual_attributes.rb', line 126

def read_virtual_attribute(name)
  name = name.to_s
  @virtual_attributes_cache[name] ||= begin
    self.singleton_class._virtual_column(name).type_cast(@virtual_attributes[name])
  end
end

#write_virtual_attribute(name, value) ⇒ Object



133
134
135
136
137
# File 'lib/active_type/virtual_attributes.rb', line 133

def write_virtual_attribute(name, value)
  name = name.to_s
  @virtual_attributes_cache.delete(name)
  @virtual_attributes[name] = value
end