class Conjur::DSL2::FlattenResolver
Flattens and sorts all records into a single list, including YAML
lists and policy body.
Public Instance Methods
resolve(records)
click to toggle source
# File lib/conjur/dsl2/resolver.rb, line 141 def resolve records @result = [] traverse records, Set.new, method(:resolve_record), method(:on_resolve_policy) # Sort record creation before anything else. # Sort record creation in dependency order (if A owns B, then A will be created before B). # Otherwise, preserve the existing order. @stable_index = {} @result.each_with_index do |obj, idx| @stable_index[obj] = idx end @referenced_record_index = {} @result.each_with_index do |obj, idx| @referenced_record_index[obj] = obj.referenced_records.select{|r| r.respond_to?(:roleid)}.map(&:roleid) end @result.flatten.sort do |a,b| score = sort_score(a) - sort_score(b) if score == 0 if a.respond_to?(:roleid) && @referenced_record_index[b].member?(a.roleid) score = -1 elsif b.respond_to?(:roleid) && @referenced_record_index[a].member?(b.roleid) score = 1 else score = @stable_index[a] - @stable_index[b] end end score end end
Protected Instance Methods
id_of(record)
click to toggle source
Select things uniquely by class and id, in this resolver.
Calls superclass method
Conjur::DSL2::Resolver#id_of
# File lib/conjur/dsl2/resolver.rb, line 175 def id_of record if record.respond_to?(:id) [ record.id, record.class.name ].join("@") else super end end
on_resolve_policy(policy, visited)
click to toggle source
Recurse on the policy body records.
# File lib/conjur/dsl2/resolver.rb, line 198 def on_resolve_policy policy, visited body = policy.body policy.remove_instance_variable "@body" traverse body, visited, method(:resolve_record), method(:on_resolve_policy) end
resolve_record(record, visited)
click to toggle source
Add the record to the result.
# File lib/conjur/dsl2/resolver.rb, line 193 def resolve_record record, visited @result += Array(record) end
sort_score(record)
click to toggle source
Sort “Create” and “Record” objects to the front.
# File lib/conjur/dsl2/resolver.rb, line 184 def sort_score record if record.is_a?(Types::Create) || record.is_a?(Types::Record) -1 else 0 end end