Sha256: 61f84b31db25473d2591aab87ae6b4c41fa6482f93f6c419e3eb6e011f692a64

Contents?: true

Size: 956 Bytes

Versions: 1

Compression:

Stored size: 956 Bytes

Contents

module SafeYAML
  class SyckResolver
    QUOTE_STYLES = [:quote1, :quote2]

    def resolve_node(node)
      case node.value
      when Hash
        return resolve_map(node)
      when Array
        return resolve_seq(node)
      when String
        return resolve_scalar(node)
      else
        raise "Don't know how to resolve this node: #{node.inspect}"
      end
    end

    def resolve_map(node)
      map = node.value

      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(node)
      seq = node.value

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

    def resolve_scalar(node)
      Transform.to_proper_type(node.value, QUOTE_STYLES.include?(node.instance_variable_get(:@style)))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
safe_yaml-0.6.2 lib/safe_yaml/syck_resolver.rb