Sha256: 7c69afc5bc1b8e657954af71c0ff60b24486ff3806220d41bc2f2542d3bafab0

Contents?: true

Size: 817 Bytes

Versions: 4

Compression:

Stored size: 817 Bytes

Contents

module SafeYAML
  class SyckResolver
    def resolve_node(node)
      case node.kind
      when :map
        return resolve_map(node.value)
      when :seq
        return resolve_seq(node.value)
      when :scalar
        return resolve_scalar(node.value)
      else
        raise "Don't know how to resolve a '#{node.kind}' node!"
      end
    end

    def resolve_map(map)
      hash = {}
      map.each do |key_node, value_node|
        if resolve_node(key_node) == "<<"
          hash.merge!(resolve_node(value_node))
        else
          hash[resolve_node(key_node)] = resolve_node(value_node)
        end
      end
      return hash
    end

    def resolve_seq(seq)
      seq.map { |node| resolve_node(node) }
    end

    def resolve_scalar(scalar)
      Transform.to_proper_type(scalar)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
safe_yaml-0.5.2 lib/safe_yaml/syck_resolver.rb
safe_yaml-0.5.1 lib/safe_yaml/syck_resolver.rb
safe_yaml-0.5 lib/safe_yaml/syck_resolver.rb
safe_yaml-0.4 lib/safe_yaml/syck_resolver.rb