Class: Conjur::DSL2::FlattenResolver
- Defined in:
- lib/conjur/dsl2/resolver.rb
Overview
Flattens and sorts all records into a single list, including YAML lists and policy body.
Instance Attribute Summary
Attributes inherited from Resolver
#account, #namespace, #ownerid
Instance Method Summary collapse
Methods inherited from Resolver
Constructor Details
This class inherits a constructor from Conjur::DSL2::Resolver
Instance Method Details
#resolve(records) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# 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 |