Class: Psych::Visitors::RestrictedYAMLTree
Constant Summary
collapse
- DEFAULT_PERMITTED_CLASSES =
{
TrueClass => true,
FalseClass => true,
NilClass => true,
Integer => true,
Float => true,
String => true,
Array => true,
Hash => true,
}.compare_by_identity.freeze
Instance Attribute Summary
Attributes inherited from YAMLTree
#finished, #started
Instance Method Summary
collapse
Methods inherited from YAMLTree
create, #finish, #push, #start, #tree, #visit_Array, #visit_BasicObject, #visit_BigDecimal, #visit_Class, #visit_Complex, #visit_Data, #visit_Date, #visit_DateTime, #visit_Encoding, #visit_Enumerator, #visit_Exception, #visit_Float, #visit_Hash, #visit_Integer, #visit_Module, #visit_NameError, #visit_NilClass, #visit_Object, #visit_Psych_Omap, #visit_Psych_Set, #visit_Range, #visit_Rational, #visit_Regexp, #visit_String, #visit_Struct, #visit_Time
Methods inherited from Visitor
dispatch_cache
Constructor Details
592
593
594
595
596
597
598
599
600
601
602
603
|
# File 'lib/psych/visitors/yaml_tree.rb', line 592
def initialize emitter, ss, options
super
@permitted_classes = DEFAULT_PERMITTED_CLASSES.dup
Array(options[:permitted_classes]).each do |klass|
@permitted_classes[klass] = true
end
@permitted_symbols = {}.compare_by_identity
Array(options[:permitted_symbols]).each do |symbol|
@permitted_symbols[symbol] = true
end
@aliases = options.fetch(:aliases, false)
end
|
Instance Method Details
#accept(target) ⇒ Object
605
606
607
608
609
610
611
612
613
614
615
|
# File 'lib/psych/visitors/yaml_tree.rb', line 605
def accept target
if !@aliases && @st.key?(target)
raise BadAlias, "Tried to dump an aliased object"
end
unless Symbol === target || @permitted_classes[target.class]
raise DisallowedClass.new('dump', target.class.name || target.class.inspect)
end
super
end
|
#visit_Symbol(sym) ⇒ Object
617
618
619
620
621
622
623
|
# File 'lib/psych/visitors/yaml_tree.rb', line 617
def visit_Symbol sym
unless @permitted_classes[Symbol] || @permitted_symbols[sym]
raise DisallowedClass.new('dump', "Symbol(#{sym.inspect})")
end
super
end
|