Sha256: d5d2a3a1bf0822ce6e4491263721d60d92c63a6a6242af5c54ae426b9cbc51f7

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

require 'psych'
require_relative 'yaml_ast_proxy/node'
require_relative 'yaml_ast_proxy/mapping'
require_relative 'yaml_ast_proxy/sequence'

module I18nFlow::YamlAstProxy
  def self.create(node, parent: nil, scopes: [], file_path: nil)
    case node
    when NilClass
      nil
    when Node
      if node.parent == parent \
        && node.scopes == scopes \
        && node.file_path == file_path
        node
      else
        node.class.new(node.node,
          parent:    parent,
          scopes:    scopes,
          file_path: file_path,
        )
      end
    when Psych::Nodes::Stream, Psych::Nodes::Document
      Node.new(node.children.first,
        parent:    node,
        scopes:    scopes,
        file_path: file_path,
      )
    when Psych::Nodes::Mapping
      Mapping.new(node,
        parent:    parent,
        scopes:    scopes,
        file_path: file_path,
      )
    when Psych::Nodes::Sequence
      Sequence.new(node,
        parent:    parent,
        scopes:    scopes,
        file_path: file_path,
      )
    else
      Node.new(node,
        parent:    parent,
        scopes:    scopes,
        file_path: file_path,
      )
    end
  end

  def self.new_root
    doc = Psych::Nodes::Document.new([], [], true)
    doc.children << Psych::Nodes::Mapping.new
    stream = Psych::Nodes::Stream.new
    stream.children << doc
    create(stream)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
i18n_flow-0.1.0 lib/i18n_flow/yaml_ast_proxy.rb