Module: ActiveRecord::VirtualAttributes::VirtualFields::ClassMethods
- Defined in:
- lib/active_record/virtual_attributes/virtual_fields.rb
Instance Method Summary collapse
- #include_to_hash(value) ⇒ Hash
- #merge_includes(hash1, hash2) ⇒ Object
- #replace_virtual_field_hash(associations) ⇒ Object
- #replace_virtual_fields(associations) ⇒ Object
- #virtual_field?(name) ⇒ Boolean
- #virtual_fields_base? ⇒ Boolean
Instance Method Details
#include_to_hash(value) ⇒ Hash
67 68 69 70 71 72 73 74 75 76 77 78 |
# 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) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# 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) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 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.[: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) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# 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) ⇒ Boolean
29 30 31 |
# 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? ⇒ Boolean
25 26 27 |
# File 'lib/active_record/virtual_attributes/virtual_fields.rb', line 25 def virtual_fields_base? !(superclass < VirtualFields) end |