nokogiri-diff-0.2.0/ 0000755 0001756 0001757 00000000000 12626261277 013314 5 ustar pravi pravi nokogiri-diff-0.2.0/spec/ 0000755 0001756 0001757 00000000000 12626261277 014246 5 ustar pravi pravi nokogiri-diff-0.2.0/spec/spec_helper.rb 0000644 0001756 0001757 00000000046 12626261277 017064 0 ustar pravi pravi gem 'rspec', '~> 2.4' require 'rspec' nokogiri-diff-0.2.0/spec/diff_spec.rb 0000644 0001756 0001757 00000020642 12626261277 016521 0 ustar pravi pravi require 'spec_helper' require 'nokogiri/diff' describe "nokogiri/diff" do let(:contents) { '
one
one
twoone
two
one
one
two
one
one
one
one
one
twoone
three
one
twoone
/div # - two /div # + /div # +three
/div # + id="1" /div/p[1] # one /div/p Only find the added nodes: doc1.diff(doc2, :added => true) do |change,node| puts node.to_html.ljust(30) + node.parent.path end # /div #three
/div # id="1" /div/p[1] Only find the removed nodes: doc1.diff(doc2, :removed => true) do |change,node| puts node.to_html.ljust(30) + node.parent.path end # two /div ## Requirements * [ruby](http://www.ruby-lang.org/) >= 1.8.7 * [tdiff](http://github.com/postmodern/tdiff) ~> 0.3, >= 0.3.2 * [nokogiri](http://nokogiri.rubyforge.org/) ~> 1.5 ## Install $ gem install nokogiri-diff ## Copyright Copyright (c) 2010-2012 Hal Brodigan See {file:LICENSE.txt} for details. nokogiri-diff-0.2.0/gemspec.yml 0000644 0001756 0001757 00000001037 12626261277 015463 0 ustar pravi pravi name: nokogiri-diff summary: Calculate the differences between two XML/HTML documents. description: Nokogiri::Diff adds the ability to calculate the differences (added or removed nodes) between two XML/HTML documents. license: MIT authors: Postmodern email: postmodern.mod3@gmail.com homepage: https://github.com/postmodern/nokogiri-diff#readme has_yard: true required_ruby_version: ">= 1.8.7" dependencies: tdiff: ~> 0.3, >= 0.3.2 nokogiri: ~> 1.5 development_dependencies: rubygems-tasks: ~> 0.1 rspec: ~> 2.4 yard: ~> 0.7 nokogiri-diff-0.2.0/.yardopts 0000644 0001756 0001757 00000000104 12626261277 015155 0 ustar pravi pravi --markup markdown --title "nokogiri-diff Documentation" --protected nokogiri-diff-0.2.0/metadata.yml 0000644 0001756 0001757 00000006757 12626261277 015636 0 ustar pravi pravi --- !ruby/object:Gem::Specification name: nokogiri-diff version: !ruby/object:Gem::Version version: 0.2.0 prerelease: platform: ruby authors: - Postmodern autorequire: bindir: bin cert_chain: [] date: 2013-04-22 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: tdiff requirement: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.3' - - ! '>=' - !ruby/object:Gem::Version version: 0.3.2 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.3' - - ! '>=' - !ruby/object:Gem::Version version: 0.3.2 - !ruby/object:Gem::Dependency name: nokogiri requirement: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '1.5' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '1.5' - !ruby/object:Gem::Dependency name: rubygems-tasks requirement: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.1' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.1' - !ruby/object:Gem::Dependency name: rspec requirement: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '2.4' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '2.4' - !ruby/object:Gem::Dependency name: yard requirement: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.7' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement none: false requirements: - - ~> - !ruby/object:Gem::Version version: '0.7' description: Nokogiri::Diff adds the ability to calculate the differences (added or removed nodes) between two XML/HTML documents. email: postmodern.mod3@gmail.com executables: [] extensions: [] extra_rdoc_files: - ChangeLog.md - LICENSE.txt - README.md files: - .document - .gemtest - .gitignore - .rspec - .yardopts - ChangeLog.md - LICENSE.txt - README.md - Rakefile - gemspec.yml - lib/nokogiri/diff.rb - lib/nokogiri/diff/version.rb - lib/nokogiri/diff/xml.rb - lib/nokogiri/diff/xml/document.rb - lib/nokogiri/diff/xml/node.rb - nokogiri-diff.gemspec - spec/diff_spec.rb - spec/spec_helper.rb homepage: https://github.com/postmodern/nokogiri-diff#readme licenses: - MIT post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement none: false requirements: - - ! '>=' - !ruby/object:Gem::Version version: 1.8.7 required_rubygems_version: !ruby/object:Gem::Requirement none: false requirements: - - ! '>=' - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 1.8.25 signing_key: specification_version: 3 summary: Calculate the differences between two XML/HTML documents. test_files: [] nokogiri-diff-0.2.0/lib/ 0000755 0001756 0001757 00000000000 12626261277 014062 5 ustar pravi pravi nokogiri-diff-0.2.0/lib/nokogiri/ 0000755 0001756 0001757 00000000000 12626261277 015703 5 ustar pravi pravi nokogiri-diff-0.2.0/lib/nokogiri/diff/ 0000755 0001756 0001757 00000000000 12626261277 016613 5 ustar pravi pravi nokogiri-diff-0.2.0/lib/nokogiri/diff/xml/ 0000755 0001756 0001757 00000000000 12626261277 017413 5 ustar pravi pravi nokogiri-diff-0.2.0/lib/nokogiri/diff/xml/node.rb 0000644 0001756 0001757 00000004653 12626261277 020675 0 ustar pravi pravi require 'nokogiri' require 'tdiff' class Nokogiri::XML::Node include TDiff include TDiff::Unordered # # Compares the XML/HTML node with another. # # @param [Nokogiri::XML::Node] node # The other XMl/HTML node. # # @return [Boolean] # Specifies whether the two nodes are equal. # def tdiff_equal(node) if (self.class == node.class) case node when Nokogiri::XML::Attr (self.name == node.name && self.value == node.value) when Nokogiri::XML::Element, Nokogiri::XML::DTD self.name == node.name when Nokogiri::XML::Text, Nokogiri::XML::Comment self.text == node.text when Nokogiri::XML::ProcessingInstruction (self.name == node.name && self.content = self.content) else false end else false end end # # Enumerates over the children of another XML/HTML node. # # @param [Nokogiri::XML::Node] node # The other XMl/HTML node. # # @yield [child] # The given block will be passed every child of the node. # # @yieldparam [Nokogiri::XML::Node] node # A child node. # def tdiff_each_child(node,&block) if node.kind_of?(Nokogiri::XML::Element) node.attribute_nodes.sort_by(&:name).each(&block) end node.children.each(&block) end # # Finds the differences between the node and another node. # # @param [Nokogiri::XML::Node] other # The other node to compare against. # # @param [Hash] options # Additional options for filtering changes. # # @option options [Boolean] :added # Yield nodes that were added. # # @option options [Boolean] :removed # Yield nodes that were removed. # # @yield [change, node] # The given block will be passed each changed node. # # @yieldparam [' ', '-', '+'] change # Indicates whether the node stayed the same, was removed or added. # # @yieldparam [Nokogiri::XML::Node] node # The changed node. # # @return [Enumerator] # If no block was given, an Enumerator object will be returned. # def diff(other,options={},&block) return enum_for(__method__,other,options) unless block if (options[:added] || options[:removed]) tdiff_unordered(other) do |change,node| if (change == '+' && options[:added]) then yield change, node elsif (change == '-' && options[:removed]) then yield change, node end end else tdiff(other,&block) end end end nokogiri-diff-0.2.0/lib/nokogiri/diff/xml/document.rb 0000644 0001756 0001757 00000001037 12626261277 021557 0 ustar pravi pravi require 'nokogiri/diff/xml/node' class Nokogiri::XML::Document < Nokogiri::XML::Node # # Overrides `tdiff` to only compare the child nodes of the document. # def tdiff(tree,&block) return enum_for(__method__,tree) unless block tdiff_recursive(tree,&block) return self end # # Overrides `tdiff_unordered` to only compare the child nodes of the document. # def tdiff_unordered(tree,&block) return enum_for(__method__,tree) unless block tdiff_recursive_unordered(tree,&block) return self end end nokogiri-diff-0.2.0/lib/nokogiri/diff/version.rb 0000644 0001756 0001757 00000000132 12626261277 020621 0 ustar pravi pravi module Nokogiri module Diff # nokogiri-diff version VERSION = '0.2.0' end end nokogiri-diff-0.2.0/lib/nokogiri/diff/xml.rb 0000644 0001756 0001757 00000000106 12626261277 017735 0 ustar pravi pravi require 'nokogiri/diff/xml/node' require 'nokogiri/diff/xml/document' nokogiri-diff-0.2.0/lib/nokogiri/diff.rb 0000644 0001756 0001757 00000000074 12626261277 017141 0 ustar pravi pravi require 'nokogiri/diff/xml' require 'nokogiri/diff/version' nokogiri-diff-0.2.0/Rakefile 0000644 0001756 0001757 00000001230 12626261277 014755 0 ustar pravi pravi require 'rubygems' require 'rake' begin gem 'rubygems-tasks', '~> 0.1' require 'rubygems/tasks' Gem::Tasks.new rescue LoadError => e warn e.message warn "Run `gem install rubygems-tasks` to install 'rubygems/tasks'." end begin gem 'rspec', '~> 2.4' require 'rspec/core/rake_task' RSpec::Core::RakeTask.new rescue LoadError => e task :spec do abort "Please run `gem install rspec` to install RSpec." end end task :test => :spec task :default => :spec begin gem 'yard', '~> 0.7' require 'yard' YARD::Rake::YardocTask.new rescue LoadError => e task :yard do abort "Please run `gem install yard` to install YARD." end end nokogiri-diff-0.2.0/nokogiri-diff.gemspec 0000644 0001756 0001757 00000003763 12626261277 017421 0 ustar pravi pravi # encoding: utf-8 require 'yaml' Gem::Specification.new do |gem| gemspec = YAML.load_file('gemspec.yml') gem.name = gemspec.fetch('name') gem.version = gemspec.fetch('version') do lib_dir = File.join(File.dirname(__FILE__),'lib') $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir) require 'nokogiri/diff/version' Nokogiri::Diff::VERSION end gem.summary = gemspec['summary'] gem.description = gemspec['description'] gem.licenses = Array(gemspec['license']) gem.authors = Array(gemspec['authors']) gem.email = gemspec['email'] gem.homepage = gemspec['homepage'] glob = lambda { |patterns| gem.files & Dir[*patterns] } gem.files = `git ls-files`.split($/) gem.files = glob[gemspec['files']] if gemspec['files'] gem.executables = gemspec.fetch('executables') do glob['bin/*'].map { |path| File.basename(path) } end gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.' gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb'] gem.test_files = glob[gemspec['test_files'] || '{test/{**/}*_test.rb'] gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}'] gem.require_paths = Array(gemspec.fetch('require_paths') { %w[ext lib].select { |dir| File.directory?(dir) } }) gem.requirements = gemspec['requirements'] gem.required_ruby_version = gemspec['required_ruby_version'] gem.required_rubygems_version = gemspec['required_rubygems_version'] gem.post_install_message = gemspec['post_install_message'] split = lambda { |string| string.split(/,\s*/) } if gemspec['dependencies'] gemspec['dependencies'].each do |name,versions| gem.add_dependency(name,split[versions]) end end if gemspec['development_dependencies'] gemspec['development_dependencies'].each do |name,versions| gem.add_development_dependency(name,split[versions]) end end end nokogiri-diff-0.2.0/.gitignore 0000644 0001756 0001757 00000000012 12626261277 015275 0 ustar pravi pravi doc/ pkg/