class DbSpiderRootMerger
Public Class Methods
new(root_node)
click to toggle source
# File lib/db_facet/db_spider_root_merger.rb, line 4 def initialize root_node @root_node = root_node end
Public Instance Methods
merge!(data)
click to toggle source
# File lib/db_facet/db_spider_root_merger.rb, line 8 def merge! data root_model = @root_node[:class_name].constantize root_model.reflections.each do |ref_name, reflection| next unless data[ref_name] case data[ref_name] when Hash, Array, ActiveRecord::Base [data[ref_name]].flatten.each do |ref_data| rec = if ref_data.is_a? ActiveRecord::Base ref_data else reflection.klass.new ref_data end @root_node[:reflections][ref_name] ||= [] @root_node[:reflections][ref_name] << DbSpiderReaderNode.new(rec).data_tree end when Proc @root_node[:reflections][ref_name].each do |ref_node| data[ref_name].call ref_node[:data] end else raise "Invalid value. data[ref_name] must be a Hash, Array of Hash`es or Lambda. Found #{data[ref_name].class} for ref_name #{ref_name}." end data.delete ref_name end @root_node[:data].merge! data.stringify_keys end