Sha256: 3650dfbc2ae6dc1d645bfa6526ba75d80b6f3a4ca4c4369520bcbe7abc7c4821

Contents?: true

Size: 1.34 KB

Versions: 25

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

require 'forwardable'
require 'json'
require_relative 'deep_merge'

module CfnDsl
  # Handles all external parameters
  class ExternalParameters
    extend Forwardable

    def_delegators :parameters, :fetch, :keys, :values, :each_pair

    attr_reader :parameters

    class << self
      def defaults(params = {})
        @defaults ||= {}
        @defaults.merge! params
        @defaults
      end

      def current
        @current || refresh!
      end

      def refresh!
        @current = new
      end
    end

    def initialize
      @parameters = self.class.defaults.clone
    end

    def set_param(key, val)
      parameters[key.to_sym] = val
    end

    def merge_param(xray)
      parameters.deep_merge!(xray)
    end

    def get_param(key)
      parameters[key.to_sym]
    end
    alias [] get_param

    def to_h
      parameters
    end

    def load_file(fname)
      format = File.extname fname
      case format
      when /ya?ml/
        params = YAML.load_file fname
      when /json/
        params = JSON.parse File.read(fname)
      else
        raise "Unrecognized extension #{format}"
      end
      if CfnDsl.disable_deep_merge?
        params.each { |key, val| set_param(key, val) }
      else
        x = {}
        params.map { |k, v| x[k.to_sym] = v }
        merge_param(x)
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
cfndsl-1.7.2 lib/cfndsl/external_parameters.rb
cfndsl-1.6.0 lib/cfndsl/external_parameters.rb
cfndsl-1.5.0 lib/cfndsl/external_parameters.rb
cfndsl-1.4.0 lib/cfndsl/external_parameters.rb
cfndsl-1.3.9 lib/cfndsl/external_parameters.rb
cfndsl-1.3.8 lib/cfndsl/external_parameters.rb
cfndsl-1.3.7 lib/cfndsl/external_parameters.rb
cfndsl-1.3.6 lib/cfndsl/external_parameters.rb
cfndsl-1.3.5 lib/cfndsl/external_parameters.rb
cfndsl-1.3.4 lib/cfndsl/external_parameters.rb
cfndsl-1.3.3 lib/cfndsl/external_parameters.rb
cfndsl-1.3.2 lib/cfndsl/external_parameters.rb
cfndsl-1.3.1 lib/cfndsl/external_parameters.rb
cfndsl-1.3.0 lib/cfndsl/external_parameters.rb
cfndsl-1.2.0 lib/cfndsl/external_parameters.rb
cfndsl-1.1.1 lib/cfndsl/external_parameters.rb
cfndsl-1.1.0 lib/cfndsl/external_parameters.rb
cfndsl-1.0.6 lib/cfndsl/external_parameters.rb
cfndsl-1.0.5 lib/cfndsl/external_parameters.rb
cfndsl-1.0.4 lib/cfndsl/external_parameters.rb