Class: Conjur::DSL2::IdResolver

Inherits:
Resolver show all
Defined in:
lib/conjur/dsl2/resolver.rb

Overview

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

Constant Summary collapse

SUBSTITUTIONS =
{ "$namespace" => :namespace }

Instance Attribute Summary

Attributes inherited from Resolver

#account, #namespace, #ownerid

Instance Method Summary collapse

Methods inherited from Resolver

#initialize, resolve

Constructor Details

This class inherits a constructor from Conjur::DSL2::Resolver

Instance Method Details

#on_resolve_policy(policy, visited) ⇒ Object



98
99
100
101
102
103
104
# 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) ⇒ Object



74
75
76
# 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) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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