module ActiveRecord::VirtualAttributes::ClassMethods
Public Instance Methods
virtual_attribute(name, type, **options)
click to toggle source
# File lib/active_record/virtual_attributes.rb, line 58 def virtual_attribute(name, type, **options) name = name.to_s reload_schema_from_cache self.virtual_attributes_to_define = virtual_attributes_to_define.merge(name => [type, options]) end
virtual_attribute?(name)
click to toggle source
Introspection
# File lib/active_record/virtual_attributes.rb, line 70 def virtual_attribute?(name) load_schema has_attribute?(name) && ( !respond_to?(:column_for_attribute) || column_for_attribute(name).kind_of?(ActiveRecord::ConnectionAdapters::NullColumn) ) end
virtual_attribute_names()
click to toggle source
# File lib/active_record/virtual_attributes.rb, line 78 def virtual_attribute_names if respond_to?(:column_names) attribute_names - column_names else attribute_names end end
virtual_column(name, **options)
click to toggle source
Compatibility method: `virtual_attribute` is a more accurate name
# File lib/active_record/virtual_attributes.rb, line 51 def virtual_column(name, **options) type = options.delete(:type) raise ArgumentError, "missing :type attribute" unless type virtual_attribute(name, type, **options) end
Private Instance Methods
define_virtual_attribute(name, cast_type, uses: nil, arel: nil)
click to toggle source
# File lib/active_record/virtual_attributes.rb, line 118 def define_virtual_attribute(name, cast_type, uses: nil, arel: nil) attribute_types[name] = cast_type define_virtual_include(name, uses) if uses define_virtual_arel(name, arel) if arel end
load_schema!()
click to toggle source
Calls superclass method
# File lib/active_record/virtual_attributes.rb, line 103 def load_schema! super virtual_attributes_to_define.each do |name, (type, options)| type = type.call if type.respond_to?(:call) type = ActiveRecord::Type.lookup(type, **options.except(:uses, :arel)) if type.kind_of?(Symbol) define_virtual_attribute(name, type, **options.slice(:uses, :arel)) end virtual_delegates_to_define.each do |method_name, (method, options)| define_virtual_delegate(method_name, method, options) end end