lib/conjur/policy/yaml/loader.rb in conjur-asset-policy-0.12.0 vs lib/conjur/policy/yaml/loader.rb in conjur-asset-policy-0.13.0

- old
+ new

@@ -4,24 +4,49 @@ module Policy module YAML class Loader class << self def load yaml, filename = nil + dirname = if filename + File.dirname(filename) + else + '.' + end + parser = Psych::Parser.new(handler = Handler.new) handler.filename = filename handler.parser = parser begin parser.parse(yaml) rescue handler.log { $!.message } handler.log { $!.backtrace.join(" \n") } raise Invalid.new($!.message || "(no message)", filename, parser.mark) end - handler.result + records = handler.result + + parse_includes records, dirname + + records end def load_file filename load File.read(filename), filename + end + + protected + + def parse_includes records, dirname + records.each_with_index do |record, idx| + if record.is_a?(Array) + parse_includes record, dirname + elsif record.is_a?(Types::Policy) + parse_includes record.body, dirname + elsif record.is_a?(Types::Include) + included = load File.read(File.expand_path(record.file, dirname)), record.file + records[idx..idx] = included + end + end end end end end end