module ActiveRecord::VirtualAttributes::VirtualFields::ClassMethods
Public Instance Methods
include_to_hash(value)
click to toggle source
@param [Hash, Array, String, Symbol] value @return [Hash]
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 67 def include_to_hash(value) case value when String, Symbol {value => {}} when Array value.flatten.each_with_object({}) { |k, h| h[k] = {} } when nil {} else value end end
merge_includes(hash1, hash2)
click to toggle source
@param [Hash] hash1 @param [Hash] hash2
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 82 def merge_includes(hash1, hash2) return hash1 if hash2.blank? hash1 = include_to_hash(hash1) hash2 = include_to_hash(hash2) hash1.deep_merge!(hash2) do |_k, v1, v2| merge_includes(v1, v2) end end
replace_virtual_field_hash(associations)
click to toggle source
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 48 def replace_virtual_field_hash(associations) associations.each_with_object({}) do |(parent, child), h| if virtual_field?(parent) # form virtual_attribute => {} merge_includes(h, replace_virtual_fields(virtual_includes(parent))) else reflection = reflect_on_association(parent.to_sym) if reflection.nil? merge_includes(h, parent) elsif reflection.options[:polymorphic] merge_includes(h, parent => child) else merge_includes(h, parent => reflection.klass.replace_virtual_fields(child) || {}) end end end end
replace_virtual_fields(associations)
click to toggle source
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 33 def replace_virtual_fields(associations) return associations if associations.blank? case associations when String, Symbol virtual_field?(associations) ? replace_virtual_fields(virtual_includes(associations)) : associations when Array associations.collect { |association| replace_virtual_fields(association) }.compact when Hash replace_virtual_field_hash(associations) else associations end end
virtual_field?(name)
click to toggle source
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 29 def virtual_field?(name) virtual_attribute?(name) || virtual_reflection?(name) end
virtual_fields_base?()
click to toggle source
# File lib/active_record/virtual_attributes/virtual_fields.rb, line 25 def virtual_fields_base? !(superclass < VirtualFields) end