module AWSDSL::DSL

Attributes

name[RW]

Public Class Methods

included(base) click to toggle source
# File lib/awsdsl/dsl.rb, line 11
def self.included(base)
  base.extend(ClassMethods)
end
new(name, &block) click to toggle source
# File lib/awsdsl/dsl.rb, line 15
def initialize(name, &block)
  @name = name
  self.class.class_eval do
    attributes.each do |attr|
      define_method(attr) do |*args|
        if args.length > 0
          args = args.length > 1 ? args : args.first
          instance_variable_set(attr.ivar, args)
        else
          instance_variable_get(attr.ivar)
        end
      end
    end

    multi_attributes.each do |attr|
      define_method(attr) do |*args|
        cur = instance_variable_get(attr.plural_ivar) || []
        instance_variable_set(attr.plural_ivar, cur + args)
      end
      define_method(attr.plural_fn) do |*_, &_|
        instance_variable_get(attr.plural_ivar) || []
      end
    end

    sub_components.each do |attr|
      define_method(attr) do |*args, &b|
        cur = instance_variable_get(attr.plural_ivar) || []
        klass_name = attr.to_s.split('_').collect!(&:capitalize).join
        klass = Object.const_get("AWSDSL::#{klass_name}")
        instance_variable_set(attr.plural_ivar, cur + [klass.new(args.first, &b)])
      end
      define_method(attr.plural_fn) do |*_, &_|
        instance_variable_get(attr.plural_ivar) || []
      end
    end
  end

  instance_eval(&block) if block_given?
end

Public Instance Methods

to_h() click to toggle source
# File lib/awsdsl/dsl.rb, line 55
def to_h
  h = {}
  (self.class.attributes + [:name]).each { |attr| h.store(attr, send(attr)) }
  self.class.multi_attributes.each { |attr| h.store(attr.plural_fn, send(attr.plural_fn)) }
  self.class.sub_components.each do |attr|
    comp = send(attr.plural_fn).map(&:to_h)
    h.store(attr.plural_fn, comp)
  end
  h.delete_if { |_, v| v.blank? }
  h
end