Sha256: 30bc1f405b56a211392674d0b528fa613b659fdf64cf548606448f9068b6348b

Contents?: true

Size: 1.15 KB

Versions: 6

Compression:

Stored size: 1.15 KB

Contents

class Terraspace::Builder
  class Children
    include Terraspace::Util::Logging

    def initialize(mod, options={})
      @mod, @options = mod, options
      @queue = []
    end

    def build
      dependencies = Terraspace::Dependency::Registry.data
      # Find out if current deploy stack contains dependency
      found = dependencies.find do |parent_child|
        parent, _ = parent_child.split(':')
        parent == @mod.name
      end
      return unless found

      # Go down graph children, which are the dependencies to build a queue
      parent, _ = found.split(':')
      node = Terraspace::Dependency::Node.find_by(name: parent)
      build_queue(node)

      logger.debug "Terraspace::Builder::Children @queue #{@queue}"

      # Process queue in reverse order to build leaf nodes first
      @queue.reverse.each do |node|
        mod = Terraspace::Mod.new(node.name, @options)
        Terraspace::Compiler::Perform.new(mod).compile
      end
    end

    # Use depth first traversal to build queue
    def build_queue(node)
      node.children.each do |child|
        @queue << child
        build_queue(child)
      end
      @queue
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
terraspace-1.1.6 lib/terraspace/builder/children.rb
terraspace-1.1.5 lib/terraspace/builder/children.rb
terraspace-1.1.4 lib/terraspace/builder/children.rb
terraspace-1.1.3 lib/terraspace/builder/children.rb
terraspace-1.1.2 lib/terraspace/builder/children.rb
terraspace-1.1.1 lib/terraspace/builder/children.rb