Sha256: 267ea87fb15e63adfa223d37fe8fb4cce9fe236d857a8a9dae29364f71f34afc

Contents?: true

Size: 1.84 KB

Versions: 99

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

module Bolt
  class PAL
    class YamlPlan
      class Parameter
        attr_reader :name, :value, :type_expr, :description

        PARAMETER_KEYS = Set['type', 'default', 'description']

        def initialize(param, definition)
          definition ||= {}
          validate_param(param, definition)

          @name = param
          @value = definition['default']
          @type_expr = Puppet::Pops::Types::TypeParser.singleton.parse(definition['type']) if definition['type']
          @description = definition['description']
        end

        def validate_param(param, definition)
          unless param.is_a?(String) && param.match?(Bolt::PAL::YamlPlan::VAR_NAME_PATTERN)
            raise Bolt::Error.new("Invalid parameter name #{param.inspect}", "bolt/invalid-plan")
          end

          definition_keys = definition.keys.to_set
          unless PARAMETER_KEYS.superset?(definition_keys)
            invalid_keys = definition_keys - PARAMETER_KEYS
            raise Bolt::Error.new("Plan parameter #{param.inspect} contains illegal key(s)" \
                                  " #{invalid_keys.to_a.inspect}",
                                  "bolt/invalid-plan")
          end
        end

        def captures_rest
          false
        end

        def transpile
          result = String.new
          result << "\n\s\s"

          # Param type
          if @type_expr.respond_to?(:type_string)
            result << @type_expr.type_string + " "
          elsif !@type_expr.nil?
            result << @type_expr.to_s + " "
          end

          # Param name
          result << "$#{@name}"

          # Param default
          if @value
            default = @type_expr.to_s =~ /String/ ? "'#{@value}'" : @value
            result << " = #{default}"
          end
          result
        end
      end
    end
  end
end

Version data entries

99 entries across 99 versions & 1 rubygems

Version Path
bolt-4.0.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.29.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.28.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.27.4 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.27.2 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.27.1 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.26.2 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.26.1 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.25.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.24.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.23.1 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.23.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.22.1 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.22.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.21.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.20.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.19.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.18.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.17.0 lib/bolt/pal/yaml_plan/parameter.rb
bolt-3.16.1 lib/bolt/pal/yaml_plan/parameter.rb