class Conjur::DSL2::IdResolver

Makes all ids absolute, by prepending the namespace (if any) and the enclosing policy (if any).

Constants

SUBSTITUTIONS

Public Instance Methods

on_resolve_policy(policy, visited) click to toggle source
# File lib/conjur/dsl2/resolver.rb, line 98
def on_resolve_policy policy, visited
  saved_namespace = @namespace
  @namespace = policy.id
  traverse policy.body, visited, method(:resolve_id), method(:on_resolve_policy)
ensure
  @namespace = saved_namespace
end
resolve(records) click to toggle source
# File lib/conjur/dsl2/resolver.rb, line 74
def resolve records
  traverse records, Set.new, method(:resolve_id), method(:on_resolve_policy)
end
resolve_id(record, visited) click to toggle source
# File lib/conjur/dsl2/resolver.rb, line 78
def resolve_id record, visited
  if record.respond_to?(:id) && record.respond_to?(:id=)
    id = record.id
    if id.blank?
      raise "#{record.to_s} has no id, and no namespace is available to populate it" unless namespace
      id = namespace
    elsif id[0] == '/'
      id = id[1..-1]
    else
      id = [ namespace, id ].compact.join('/')
    end

    substitute! id
    
    record.id = id
  end
  
  traverse record.referenced_records, visited, method(:resolve_id), method(:on_resolve_policy)
end

Protected Instance Methods

substitute!(id) click to toggle source
# File lib/conjur/dsl2/resolver.rb, line 108
def substitute! id
  SUBSTITUTIONS.each do |k,v|
    next unless value = send(v)
    id.gsub! k, value
  end
end