class Tataru::Compiler
compiler
Public Class Methods
new(dsl, extant_resources = {}, extant_dependencies = {})
click to toggle source
# File lib/tataru/compiler.rb, line 8 def initialize(dsl, extant_resources = {}, extant_dependencies = {}) @dsl = dsl @extant = extant_resources @extant_dependencies = extant_dependencies end
Public Instance Methods
deletables()
click to toggle source
# File lib/tataru/compiler.rb, line 54 def deletables @extant.reject { |k, _| @dsl.resources.key? k } end
generate_labels()
click to toggle source
# File lib/tataru/compiler.rb, line 45 def generate_labels count = 0 subroutines.values.map do |sub| arr = [sub.label, top_instructions.count + count] count += sub.body_instructions.count arr end.to_h end
generate_step_order(order, steps)
click to toggle source
# File lib/tataru/compiler.rb, line 81 def generate_step_order(order, steps) instructions = [] order.each do |level| steps.each do |step| instructions += level.map do |item| subroutines["#{item}_#{step}"].call_instruction end end end instructions end
generate_subroutines()
click to toggle source
# File lib/tataru/compiler.rb, line 62 def generate_subroutines result = {} # set up resources for deletion deletables.each do |k, v| desc = Tataru.const_get(v).new rrep = Representations::ResourceRepresentation.new(k, desc, {}) sp = SubPlanner.new(rrep, :delete) result.merge!(sp.subroutines) end # set up resources for updates or creates updatables.each do |k, rrep| action = @extant.key?(k) ? :update : :create sp = SubPlanner.new(rrep, action) result.merge!(sp.subroutines) end result end
generate_top_instructions()
click to toggle source
# File lib/tataru/compiler.rb, line 93 def generate_top_instructions order = Bunny::Tsort.tsort(@extant_dependencies.merge(@dsl.dep_graph)) generate_step_order(order, %i[start check]) + generate_step_order(order.reverse, %i[commit finish]) end
instr_hash()
click to toggle source
# File lib/tataru/compiler.rb, line 14 def instr_hash { init: { **InitHashCompiler.new(@dsl).result, labels: labels }, instructions: top_instructions + subroutine_instructions } end
labels()
click to toggle source
# File lib/tataru/compiler.rb, line 24 def labels @labels ||= generate_labels end
subroutine_instructions()
click to toggle source
# File lib/tataru/compiler.rb, line 40 def subroutine_instructions @subroutine_instructions ||= subroutines.values.flat_map(&:body_instructions) end
subroutines()
click to toggle source
# File lib/tataru/compiler.rb, line 28 def subroutines @subroutines ||= generate_subroutines end
top_instructions()
click to toggle source
# File lib/tataru/compiler.rb, line 32 def top_instructions @top_instructions ||= [ :init, *generate_top_instructions, :end ] end
updatables()
click to toggle source
# File lib/tataru/compiler.rb, line 58 def updatables @dsl.resources end