lib/paquito/safe_yaml.rb in paquito-0.3.0 vs lib/paquito/safe_yaml.rb in paquito-0.3.1

- old
+ new

@@ -41,34 +41,39 @@ raise PackError, psych_error.message end class RestrictedYAMLTree < Psych::Visitors::YAMLTree class DispatchCache - def initialize(visitor, cache, permitted_classes) + def initialize(visitor, cache) @visitor = visitor @cache = cache - @permitted_classes = permitted_classes - - @permitted_cache = Hash.new do |h, klass| - unless @permitted_classes.include?(klass.name) - raise UnsupportedType, "Tried to dump unspecified class: #{klass.name.inspect}" - end - - h[klass] = true - end.compare_by_identity end def [](klass) - if @permitted_cache[klass] - @cache[klass] - end + @cache[klass] if @visitor.permitted_class?(klass) end end def initialize(...) super @permitted_classes = Set.new(@options[:permitted_classes]) - @dispatch_cache = DispatchCache.new(self, @dispatch_cache, @permitted_classes) + @dispatch_cache = DispatchCache.new(self, @dispatch_cache) + @permitted_cache = Hash.new do |h, klass| + unless @permitted_classes.include?(klass.name) + raise UnsupportedType, "Tried to dump unspecified class: #{klass.name.inspect}" + end + + h[klass] = true + end.compare_by_identity + end + + def dump_coder(target) + return unless permitted_class?(target.class) + super + end + + def permitted_class?(klass) + @permitted_cache[klass] end end end end