# File lib/hashdiff/patch.rb, line 57
  def self.unpatch!(obj, changes, options = {})
    delimiter = options[:delimiter] || '.'

    changes.reverse_each do |change|
      parts = change[1]
      parts = decode_property_path(parts, delimiter) unless parts.is_a?(Array)

      last_part = parts.last

      parent_node = node(obj, parts[0, parts.size-1])

      if change[0] == '+'
        if parent_node.is_a?(Array)
          parent_node.delete_at(last_part)
        else
          parent_node.delete(last_part)
        end
      elsif change[0] == '-'
        if parent_node.is_a?(Array)
          parent_node.insert(last_part, change[2])
        else
          parent_node[last_part] = change[2]
        end
      elsif change[0] == '~'
        parent_node[last_part] = change[2]
      end
    end

    obj
  end