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