Method: Masamune::DataPlan::Engine#prepare

Defined in:
lib/masamune/data_plan/engine.rb

#prepare(rule, options = {}) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/masamune/data_plan/engine.rb', line 118

def prepare(rule, options = {})
  @targets[rule].merge options.fetch(:targets, [])
  @sources[rule].merge options.fetch(:sources, [])
  @target_rules[rule].try(:prepare)
  @source_rules[rule].try(:prepare)

  if options.fetch(:resolve, true)
    constrain_max_depth(rule) do
      sources(rule).group_by { |source| rule_for_target(source.input) }.each do |derived_rule, sources|
        prepare(derived_rule, targets: sources.map(&:input)) if derived_rule != Masamune::DataPlan::Rule::TERMINAL
      end
    end
  end
  clear!
end