Sha256: b89e9bcdaac8260b6c17c08578ccf2b137caa57152a66aeb1d24a12b0bf341bb

Contents?: true

Size: 1.41 KB

Versions: 40

Compression:

Stored size: 1.41 KB

Contents

class Terraspace::Builder::Allow
  class Base
    include Terraspace::App::CallableOption::Concern

    def initialize(mod)
      @mod = mod # Only Region subclass uses @mod but keeping interface same for Env for simplicity
      @stack_name = mod.name
    end

    def check!
      messages = []
      unless allowed?
        messages << message # message is interface method
      end
      unless messages.empty?
        puts "ERROR: The configs do not allow this.".color(:red)
        puts messages
        exit 1
      end
    end

    def allowed?
      if allows.nil? && denys.nil?
        true
      elsif denys.nil?
        allows.include?(check_value)
      elsif allows.nil?
        !denys.include?(check_value)
      else
        allows.include?(check_value) && !denys.include?(check_value)
      end
    end

    def allows
      callable_option(
        config_name: "config.allow.#{config_name}",
        config_value: config.dig(:allow, config_name),
        passed_args: [@stack_name],
      )
    end

    def denys
      callable_option(
        config_name: "config.deny.#{config_name}",
        config_value: config.dig(:deny, config_name),
        passed_args: [@stack_name],
      )
    end

  private
    def config
      Terraspace.config
    end

    def config_name
      self.class.to_s.split('::').last.underscore.pluralize.to_sym # ActiveSuport::HashWithIndifferentAccess#dig requires symbol
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

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