Module: Hecks::Translation::Scaffold::Renderer

Included in:
Hecks::Translation::Scaffold
Defined in:
lib/hecks/translation/scaffold/renderer.rb

Overview

Render an edge into .bluebook text — confident rules inline, ambiguities as parse-refusing unresolved constructs, never comments, so an unresolved file can only boot into a refusal.

Instance Method Summary collapse

Instance Method Details

#render(edge) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/hecks/translation/scaffold/renderer.rb', line 8

def render(edge)
  lines = ["Hecks.data_translation #{edge.domain.inspect}, from: #{edge.from.inspect}, to: #{edge.to.inspect} do"]
  edge.aggregates.each do |aggregate|
    header = "  aggregate #{aggregate.name.inspect}"
    header += ", was: #{aggregate.was.inspect}" if aggregate.was
    if aggregate.rules.empty?
      lines << "#{header} do"
    else
      lines << "#{header} do"
      aggregate.rules.each { |rule| lines << "    #{render_rule(rule)}" }
    end
    lines << "  end"
  end
  edge.retired.each { |name| lines << "  retired #{name.inspect}" }
  lines << "end"
  "#{lines.join("\n")}\n"
end

#render_path(path) ⇒ Object



37
# File 'lib/hecks/translation/scaffold/renderer.rb', line 37

def render_path(path) = path.to_s.include?(".") ? path.to_s.inspect : ":#{path}"

#render_rule(rule) ⇒ Object



26
27
28
29
30
31
32
33
34
35
# File 'lib/hecks/translation/scaffold/renderer.rb', line 26

def render_rule(rule)
  case rule[:kind]
  when :rename then "rename :#{rule[:from]}, to: :#{rule[:to]}"
  when :move then "move #{rule[:from].inspect}, to: #{rule[:to].inspect}"
  when :retype then "retype #{rule[:from].inspect}, to: #{rule[:to].inspect}"
  when :unresolved
    candidates = rule[:candidates].map { |candidate| render_path(candidate) }.join(", ")
    "unresolved #{render_path(rule[:from])}, candidates: [#{candidates}]"
  end
end