diff --git a/lib/reynard.rb b/lib/reynard.rb index c56695f..186ec6a 100644 --- a/lib/reynard.rb +++ b/lib/reynard.rb @@ -60,6 +60,21 @@ def self.http end end + def self.permitted_classes + @permitted_classes = parse_permitted_classes(ENV['REYNARD_PERMITTED_CLASSES']) || [] + end + + def self.parse_permitted_classes(env_value) + return nil unless env_value + + env_value.split(',').map(&:strip).map do |class_name| + Object.const_get(class_name) + rescue NameError + warn "Warning: Could not find class #{class_name}" + nil + end.compact + end + private def build_context diff --git a/lib/reynard/specification.rb b/lib/reynard/specification.rb index 04b6481..c561ec9 100644 --- a/lib/reynard/specification.rb +++ b/lib/reynard/specification.rb @@ -105,7 +105,7 @@ def self.media_type_matches?(media_type, expression) def read File.open(@filename, encoding: 'UTF-8') do |file| - YAML.safe_load(file, aliases: true) + YAML.safe_load(file, aliases: true, permitted_classes: Reynard.permitted_classes) end end