Sha256: 1aba060b51f98ab24fcf08e54e506a5e1f60bb1e3538fa1b41bf2173e4d1941d

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module Cfer::Cfn
  class Resource < Cfer::Block
    NON_PROXIED_METHODS = [:parameters, :options, :lookup_output]

    def initialize(name, type, **options, &block)
      @name = name

      self[:Type] = type
      self.merge!(options)
      self[:Properties] = HashWithIndifferentAccess.new
      build_from_block(&block)
    end

    def tag(k, v, **options)
      self[:Properties][:Tags] ||= []
      self[:Properties][:Tags].unshift({"Key" => k, "Value" => v}.merge(options))
    end

    def properties(**keyvals)
      self[:Properties].merge!(keyvals)
    end

    def respond_to?(method_sym)
      !NON_PROXIED_METHODS.include?(method_sym)
    end

    def method_missing(method_sym, *arguments, &block)
      key = camelize_property(method_sym)
      case arguments.size
      when 0
        Cfer::Core::Fn::ref(method_sym)
      when 1
        properties key => arguments.first
      else
        properties key => arguments
      end
    end

    private
    def camelize_property(sym)
      sym.to_s.camelize.to_sym
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cfer-0.3.0 lib/cfer/core/resource.rb