Class: DbSpiderRootMerger
- Inherits:
-
Object
- Object
- DbSpiderRootMerger
- Defined in:
- lib/db_facet/db_spider_root_merger.rb
Instance Method Summary collapse
-
#initialize(root_node) ⇒ DbSpiderRootMerger
constructor
A new instance of DbSpiderRootMerger.
- #merge!(data) ⇒ Object
Constructor Details
#initialize(root_node) ⇒ DbSpiderRootMerger
Returns a new instance of DbSpiderRootMerger.
4 5 6 |
# File 'lib/db_facet/db_spider_root_merger.rb', line 4 def initialize root_node @root_node = root_node end |
Instance Method Details
#merge!(data) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 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 |