Sha256: e91634fe6bd260baf6b0666e2015f8d26586e4d6ab5cfe87f06834b30331fc24

Contents?: true

Size: 1.23 KB

Versions: 30

Compression:

Stored size: 1.23 KB

Contents

module Terraspace::Hooks
  class Builder
    extend Memoist
    include Dsl
    include DslEvaluator
    include Terraspace::Util

    # IE: dsl_file: config/hooks/terraform.rb
    attr_accessor :name
    def initialize(mod, file, name)
      @mod, @file, @name = mod, file, name
      @hooks = {before: {}, after: {}}
    end

    def build
      evaluate_file("#{Terraspace.root}/config/hooks/#{@file}")
      evaluate_file("#{@mod.root}/config/hooks/#{@file}")
      @hooks.deep_stringify_keys!
    end
    memoize :build

    def run_hooks
      build
      run_each_hook("before")
      out = yield if block_given?
      run_each_hook("after")
      out
    end

    def run_each_hook(type)
      hooks = @hooks.dig(type, @name) || []
      hooks.each do |hook|
        run_hook(type, hook)
      end
    end

    def run_hook(type, hook)
      return unless run?(hook)

      command = File.basename(@file).sub('.rb','') # IE: terraform or terraspace
      id = "#{command} #{type} #{@name}"
      label = " label: #{hook["label"]}" if hook["label"]
      logger.info  "Hook: Running #{id} hook.#{label}".color(:cyan) if Terraspace.config.hooks.show
      Runner.new(@mod, hook).run
    end

    def run?(hook)
      !!hook["execute"]
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
terraspace-2.2.17 lib/terraspace/hooks/builder.rb
terraspace-2.2.16 lib/terraspace/hooks/builder.rb
terraspace-2.2.15 lib/terraspace/hooks/builder.rb
terraspace-2.2.14 lib/terraspace/hooks/builder.rb
terraspace-2.2.13 lib/terraspace/hooks/builder.rb
terraspace-2.2.12 lib/terraspace/hooks/builder.rb
terraspace-2.2.11 lib/terraspace/hooks/builder.rb
terraspace-2.2.10 lib/terraspace/hooks/builder.rb
terraspace-2.2.9 lib/terraspace/hooks/builder.rb
terraspace-2.2.8 lib/terraspace/hooks/builder.rb
terraspace-2.2.7 lib/terraspace/hooks/builder.rb
terraspace-2.2.6 lib/terraspace/hooks/builder.rb
terraspace-2.2.5 lib/terraspace/hooks/builder.rb
terraspace-2.2.4 lib/terraspace/hooks/builder.rb
terraspace-2.2.3 lib/terraspace/hooks/builder.rb
terraspace-2.2.2 lib/terraspace/hooks/builder.rb
terraspace-2.2.1 lib/terraspace/hooks/builder.rb
terraspace-2.2.0 lib/terraspace/hooks/builder.rb
terraspace-2.1.7 lib/terraspace/hooks/builder.rb
terraspace-2.1.6 lib/terraspace/hooks/builder.rb