def set(full_key, node)
      fail 'value should be a I18n::Processes::Data::Tree::Node' unless node.is_a?(Node)
      key_part, rest = split_key(full_key, 2)
      child          = key_to_node[key_part]

      if rest
        unless child
          child = Node.new(
            key: key_part,
            parent: parent,
            children: [],
            warn_about_add_children_to_leaf: @warn_add_children_to_leaf
          )
          append! child
        end
        unless child.children
          warn_add_children_to_leaf child if @warn_about_add_children_to_leaf
          child.children = []
        end
        child.children.set rest, node
      else
        remove! child if child
        append! node
      end
      dirty!
      node
    end
def set(full_key, node)
      fail 'value should be a I18n::Processes::Data::Tree::Node' unless node.is_a?(Node)
      key_part, rest = split_key(full_key, 2)
      child          = key_to_node[key_part]

      if rest
        unless child
          child = Node.new(
            key: key_part,
            parent: parent,
            children: [],
            warn_about_add_children_to_leaf: @warn_add_children_to_leaf
          )
          append! child
        end
        unless child.children
          warn_add_children_to_leaf child if @warn_about_add_children_to_leaf
          child.children = []
        end
        child.children.set rest, node
      else
        remove! child if child
        append! node
      end
      dirty!
      node
    end
add or replace node by full key