blob: 851989bef91822cf14c608c06e888f90950bde40 [file] [log] [blame]
module SafeYAML
class PsychResolver < Resolver
NODE_TYPES = {
Psych::Nodes::Document => :root,
Psych::Nodes::Mapping => :map,
Psych::Nodes::Sequence => :seq,
Psych::Nodes::Scalar => :scalar,
Psych::Nodes::Alias => :alias
}.freeze
def initialize(options={})
super
@aliased_nodes = {}
end
def resolve_root(root)
resolve_seq(root).first
end
def resolve_alias(node)
resolve_node(@aliased_nodes[node.anchor])
end
def native_resolve(node)
@visitor ||= SafeYAML::SafeToRubyVisitor.new(self)
@visitor.accept(node)
end
def get_node_type(node)
NODE_TYPES[node.class]
end
def get_node_tag(node)
node.tag
end
def get_node_value(node)
@aliased_nodes[node.anchor] = node if node.respond_to?(:anchor) && node.anchor
case get_node_type(node)
when :root, :map, :seq
node.children
when :scalar
node.value
end
end
def value_is_quoted?(node)
node.quoted
end
end
end