Sha256: 03c323a196c023723ab1d9fd321257186fd267102cfc20931782a16f748c1cd3

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 KB

Contents

class Miam::DSL::Context::Role
  include Miam::TemplateHelper

  def initialize(context, name, &block)
    @role_name = name
    @context = context.merge(:role_name => name)
    @result = {:instance_profiles => [], :max_session_duration => 3600, :policies => {}, :attached_managed_policies => []}
    instance_eval(&block)
  end

  def result
    unless @result[:assume_role_policy_document]
      raise "Role `#{@role_name}`: AssumeRolePolicyDocument is not defined"
    end

    @result
  end

  private

  def instance_profiles(*profiles)
    @result[:instance_profiles].concat(profiles.map(&:to_s))
  end

  def max_session_duration(duration)
    @result[:max_session_duration] = duration
  end

  def assume_role_policy_document
    if @result[:assume_role_policy_document]
      raise "Role `#{@role_name}` > AssumeRolePolicyDocument: already defined"
    end

    assume_role_policy_document = yield

    unless assume_role_policy_document.kind_of?(Hash)
      raise "Role `#{@role_name}` > AssumeRolePolicyDocument: wrong argument type #{policy_document.class} (expected Hash)"
    end

    @result[:assume_role_policy_document] = assume_role_policy_document
  end

  def policy(name)
    name = name.to_s

    if @result[:policies][name]
      raise "Role `#{@role_name}` > Policy `#{name}`: already defined"
    end

    policy_document = yield

    unless policy_document.kind_of?(Hash)
      raise "Role `#{@role_name}` > Policy `#{name}`: wrong argument type #{policy_document.class} (expected Hash)"
    end

    @result[:policies][name] = policy_document
  end

  def attached_managed_policies(*policies)
    @result[:attached_managed_policies].concat(policies.map(&:to_s))
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
miam-0.2.5.beta1 lib/miam/dsl/context/role.rb
miam-0.2.4 lib/miam/dsl/context/role.rb
miam-0.2.4.beta18 lib/miam/dsl/context/role.rb
miam-0.2.4.beta17 lib/miam/dsl/context/role.rb
miam-0.2.4.beta16 lib/miam/dsl/context/role.rb