# TDiff * [Source](http://github.com/postmodern/tdiff) * [Issues](http://github.com/postmodern/tdiff/issues) * Postmodern (postmodern.mod3 at gmail.com) ## Description Calculates the differences between two tree-like structures. Similar to Rubys built-in [TSort](http://rubydoc.info/docs/ruby-stdlib/1.9.2/TSort) module. ## Features * Provides the {TDiff} mixin. * Allows custom node equality and traversal logic by overriding the {TDiff#tdiff_equal} and {TDiff#tdiff_each_child} methods. * Implements the [Longest Common Subsequence (LCS)](http://en.wikipedia.org/wiki/Longest_common_subsequence_problem). ## Examples Diff two HTML documents: require 'nokogiri' require 'tdiff' class Nokogiri::XML::Node include TDiff def tdiff_each_child(node,&block) node.children.each(&block) end def tdiff_equal(node1,node2) if (node1.text? && node2.text?) node1.text == node2.text elsif (node1.respond_to?(:root) && node2.respond_to?(:root)) tdiff_equal(node1.root,node2.root) elsif (node1.respond_to?(:name) && node2.respond_to?(:name)) node1.name == node2.name else false end end end doc1 = Nokogiri::HTML('
one
three
one
two
three
one
/html/body/div + /html/body/divone
/html/body/div /html/body/divthree
/html/body/div - one /html/body/div/p[1] + two /html/body/div/p[2] three /html/body/div/p[2] ## Install $ gem install tdiff ## Copyright See {file:LICENSE.txt} for details.