spp_nokogiri_ext 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.gem
2
+ .bundle
3
+
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use `./rubyversion` > /dev/null
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://gems.devint.lpo'
2
+ source "http://rubygems.org/"
3
+
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ spp_nokogiri_ext (0.0.4)
5
+ activesupport
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: http://gems.devint.lpo/
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ activesupport (3.2.6)
13
+ i18n (~> 0.6)
14
+ multi_json (~> 1.0)
15
+ diff-lcs (1.1.3)
16
+ i18n (0.6.0)
17
+ multi_json (1.3.6)
18
+ nokogiri (1.5.2)
19
+ nokogiri-diff (0.1.1)
20
+ nokogiri (~> 1.5)
21
+ tdiff (~> 0.3.2)
22
+ rake (0.9.2.2)
23
+ rspec (2.10.0)
24
+ rspec-core (~> 2.10.0)
25
+ rspec-expectations (~> 2.10.0)
26
+ rspec-mocks (~> 2.10.0)
27
+ rspec-core (2.10.1)
28
+ rspec-expectations (2.10.0)
29
+ diff-lcs (~> 1.1.3)
30
+ rspec-mocks (2.10.1)
31
+ tdiff (0.3.2)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ nokogiri-diff
38
+ rake
39
+ rspec
40
+ spp_nokogiri_ext!
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ load 'lib/tasks/gem.rake'
2
+ require 'rspec/core/rake_task'
3
+ desc 'Default: run specs.'
4
+ task :default => :spec
5
+
6
+ desc "Run specs"
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
9
+ # Put spec opts in a file named .rspec in root
10
+ end
data/build ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -a $HOME/.bashrc ]; then
4
+ source $HOME/.bashrc
5
+ fi
6
+ if [ -a /etc/profile.d/rvm.sh ]; then
7
+ source /etc/profile.d/rvm.sh
8
+ fi
9
+ set -e
10
+ LOCATION=`dirname $0`
11
+ rvm `$LOCATION/rubyversion` do ruby ./build.rb $@
data/build.rb ADDED
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+
3
+ #!/usr/bin/env ruby
4
+ Dir.chdir(File.dirname(__FILE__))
5
+ puts `gem install bundler` unless `gem list`.match /bundler/
6
+ system('bundle install --path $HOME/.bundle')
7
+ require 'rubygems'
8
+ require 'bundler/setup'
9
+
10
+ rake_args = ARGV.empty? ? [] : ARGV
11
+ exec(*(%w{bundle exec rake} + rake_args))
@@ -0,0 +1,77 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'nokogiri'
4
+ require 'nokogiri/diff'
5
+
6
+
7
+ if defined?(RSpec) && defined?(RSpec::Matchers)
8
+ RSpec::Matchers
9
+ else
10
+ Spec::Matchers
11
+ end.define :match_the_dom_of do |expected_xml_string|
12
+
13
+ def describe(string)
14
+ string ? string.to_s.gsub('"', "'").strip.inspect : 'NIL'
15
+ end
16
+
17
+ failure_message_for_should_not do |actual|
18
+ "expected that #{describe(actual)} would not match the dom of #{describe(expected)}"
19
+ end
20
+
21
+ failure_message_for_should do |actual|
22
+ actual = actual.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION) if actual.is_a? Nokogiri::XML::Document
23
+ <<-MESSAGE
24
+
25
+ expected:
26
+ #{describe(expected.first.squish) }
27
+
28
+ to equal:
29
+ #{describe(actual.squish) }
30
+
31
+ diff:
32
+ #{pretty_diff(expected.first, actual)}
33
+ (compared using Hash.from_xml.eql?)
34
+ MESSAGE
35
+ end
36
+
37
+ failure_message_for_should_not do |actual|
38
+ <<-MESSAGE
39
+
40
+ expected:
41
+ #{describe(expected.squish) }
42
+
43
+ not to equal actual:
44
+ #{describe(actual.squish) }
45
+
46
+ diff:
47
+ #{pretty_diff(expected.first, actual)}
48
+ (compared using Hash.from_xml.eql?)
49
+ MESSAGE
50
+ end
51
+
52
+ match do |actual_xml_string|
53
+ expected_hash = Hash.from_xml(hacky_canonicalise(expected_xml_string))
54
+ actual_hash = Hash.from_xml(hacky_canonicalise(actual_xml_string))
55
+ (expected_hash == actual_hash)
56
+ end
57
+
58
+ def hacky_canonicalise(xml_string)
59
+ xml_string.to_s.gsub(' ', '').gsub("\n", '')
60
+ end
61
+
62
+ def pretty_diff(expected_xml_string, actual_xml_string)
63
+ expected_doc = Nokogiri::XML.parse(hacky_canonicalise(expected_xml_string))
64
+ actual_doc = Nokogiri::XML.parse(hacky_canonicalise(actual_xml_string))
65
+ diff = ''
66
+
67
+ expected_doc.diff(actual_doc, :added => true) do |change, node|
68
+ diff << "+ #{node.to_html.ljust(80) + node.parent.path}\n"
69
+ end
70
+
71
+ expected_doc.diff(actual_doc, :removed => true) do |change, node|
72
+ diff << "- #{node.to_html.ljust(80) + node.parent.path}\n"
73
+ end
74
+
75
+ diff
76
+ end
77
+ end
@@ -0,0 +1,2 @@
1
+ require 'spp_nokogiri_ext/dom_matcher'
2
+ require 'spp_nokogiri_ext/xml_matcher'
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+
3
+ if defined?(RSpec) && defined?(RSpec::Matchers)
4
+ RSpec::Matchers
5
+ else
6
+ Spec::Matchers
7
+ end.define :match_xml do |expected_xml|
8
+
9
+ failure_message_for_should do |actual|
10
+ <<-MESSAGE
11
+
12
+ expected first, but got second:
13
+ #{expected}
14
+
15
+ actual:
16
+ #{actual}
17
+ MESSAGE
18
+ end
19
+
20
+ failure_message_for_should_not do |actual|
21
+ <<-MESSAGE
22
+
23
+ expected actual not to equal expected:
24
+ #{expected}
25
+
26
+ actual:
27
+ #{actual}
28
+ MESSAGE
29
+ end
30
+
31
+ match do |actual_xml|
32
+ begin
33
+ expected_hash = Hash.from_xml(expected_xml.to_s.gsub(' ', '').gsub("\n", ''))
34
+ actual_hash = Hash.from_xml(actual_xml.to_s.gsub(' ', '').gsub("\n", ''))
35
+ rescue NoMethodError, REXML::ParseException => e # Hash.from_xml uses rexml, yech
36
+ puts "failed XML parse: #{e.name}"
37
+ # Returns false immediately.
38
+ next false
39
+ end
40
+
41
+ unless expected_hash == actual_hash
42
+ puts "Expected: " + expected_hash.inspect
43
+ puts "Actual: " + actual_hash.inspect
44
+ end
45
+
46
+ (expected_hash == actual_hash)
47
+ end
48
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'nokogiri'
4
+ module Nokogiri
5
+ def self.strict_xml(string)
6
+ Nokogiri::XML(string, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ require 'lib/version'
2
+ namespace "gem" do
3
+
4
+ desc "Build a gem ready to push to gems.devint.lpo"
5
+ task "package" do
6
+ sh "gem build spp_nokogiri_ext.gemspec"
7
+ end
8
+
9
+ desc "Push the current version of the gem to gems.devint.lpo"
10
+ task "push_to_devint" do
11
+ sh "scp spp_nokogiri_ext-#{SppNokogiriExt::VERSION}.gem gems.devint.lpo:/lp/gem-repo/gems"
12
+ sh "ssh gems.devint.lpo 'gem generate_index -d /lp/gem-repo'"
13
+ end
14
+
15
+ desc "Build the current version & push it to gems.devint.lpo"
16
+ task "build_and_push" => ['gem:package', 'gem:push_to_devint']
17
+
18
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,4 @@
1
+ # encoding: UTF-8
2
+ module SppNokogiriExt
3
+ VERSION = '0.0.4'
4
+ end
data/rubyversion ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ RUBY=ree
3
+
4
+ if [ -a ~/.babushka/deps/ree_version ]; then
5
+ RUBY=`cat ~/.babushka/deps/ree_version`
6
+ fi
7
+ echo $RUBY
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'DOM matcher' do
4
+
5
+ it 'correctly identifies identical DOMs' do
6
+ '<foo><bar>baz</bar></foo>'.should match_the_dom_of '<foo><bar>baz</bar></foo>'
7
+ end
8
+
9
+ it 'correctly identifies different DOMs' do
10
+ '<foo><bar>baz</bar></foo>'.should_not match_the_dom_of '<foo><qux>baz</qux>quo</foo>'
11
+ end
12
+
13
+ # DB: this may be existing behaviour but I believe it's wrong; I don't think they _are_ equivalent
14
+ it 'treats whitespace between tags as equivalent to an empty closed tag' do
15
+ '<foo> </foo>'.should match_the_dom_of '<foo />'
16
+ end
17
+
18
+ it 'raises an exception when the expected XML is invalid' do
19
+ lambda { '<foo>'.should match_the_dom_of '<foo />'}.should raise_exception
20
+ end
21
+
22
+ it 'raises an exception when the actual XML is invalid' do
23
+ lambda { '<foo />'.should match_the_dom_of '<foo>'}.should raise_exception
24
+ end
25
+
26
+ describe 'prints a pretty diff when the match' do
27
+ before do
28
+ @pretty_failure = <<-PRETTY
29
+
30
+ expected:
31
+ "<foo><qux>baz</qux>quo</foo>"
32
+
33
+ to equal:
34
+ "<foo><bar>baz</bar></foo>"
35
+
36
+ diff:
37
+ + <bar>baz</bar> /foo
38
+ - <qux>baz</qux> /foo
39
+ - quo /foo
40
+
41
+ (compared using Hash.from_xml.eql?)
42
+ PRETTY
43
+ end
44
+
45
+ it 'fails for two strings' do
46
+ expectation = lambda { '<foo><bar>baz</bar></foo>'.should match_the_dom_of '<foo><qux>baz</qux>quo</foo>'}
47
+ output_for_failing_expectation(expectation).should == @pretty_failure
48
+ end
49
+
50
+ it 'fails for a Nokogiri doc and a string' do
51
+ expectation = lambda { Nokogiri::XML('<foo><bar>baz</bar></foo>').should match_the_dom_of '<foo><qux>baz</qux>quo</foo>'}
52
+ output_for_failing_expectation(expectation).should == @pretty_failure
53
+ end
54
+ end
55
+
56
+ def output_for_failing_expectation(expectation)
57
+ begin
58
+ expectation.call
59
+ rescue RSpec::Expectations::ExpectationNotMetError => e
60
+ return e.to_s
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,2 @@
1
+ require 'spp_nokogiri_ext/spec_helpers'
2
+ require 'active_support/all'
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "version"
4
+
5
+ Gem::Specification.new do |s|
6
+ # Metadata
7
+ s.name = "spp_nokogiri_ext"
8
+ s.version = SppNokogiriExt::VERSION
9
+ s.authors = ["Daniel Heath"]
10
+ s.email = ["daniel.heath@lonelyplanet.com.au"]
11
+ s.homepage = ""
12
+ s.summary = %q{Extensions to Nokogiri used across SPP programs}
13
+ s.description = %q{Extensions to Nokogiri used across SPP programs}
14
+
15
+ # Manifest
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rake"
22
+ s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "activesupport"
24
+ s.add_runtime_dependency "nokogiri"
25
+ # s.add_runtime_dependency "nokogiri-diff" # This currently requires that an up-to-date version of rubygems be installed (our app servers need updating - see INC478208)
26
+ s.add_development_dependency "nokogiri-diff" # TODO Remove this once INC478208 is resolved.
27
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spp_nokogiri_ext
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
11
+ platform: ruby
12
+ authors:
13
+ - Daniel Heath
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-07-03 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ requirement: *id001
33
+ prerelease: false
34
+ - !ruby/object:Gem::Dependency
35
+ name: rspec
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :development
46
+ requirement: *id002
47
+ prerelease: false
48
+ - !ruby/object:Gem::Dependency
49
+ name: activesupport
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :runtime
60
+ requirement: *id003
61
+ prerelease: false
62
+ - !ruby/object:Gem::Dependency
63
+ name: nokogiri
64
+ version_requirements: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ type: :runtime
74
+ requirement: *id004
75
+ prerelease: false
76
+ - !ruby/object:Gem::Dependency
77
+ name: nokogiri-diff
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ type: :development
88
+ requirement: *id005
89
+ prerelease: false
90
+ description: Extensions to Nokogiri used across SPP programs
91
+ email:
92
+ - daniel.heath@lonelyplanet.com.au
93
+ executables: []
94
+
95
+ extensions: []
96
+
97
+ extra_rdoc_files: []
98
+
99
+ files:
100
+ - .gitignore
101
+ - .rvmrc
102
+ - Gemfile
103
+ - Gemfile.lock
104
+ - README
105
+ - Rakefile
106
+ - build
107
+ - build.rb
108
+ - lib/spp_nokogiri_ext.rb
109
+ - lib/spp_nokogiri_ext/dom_matcher.rb
110
+ - lib/spp_nokogiri_ext/spec_helpers.rb
111
+ - lib/spp_nokogiri_ext/xml_matcher.rb
112
+ - lib/tasks/gem.rake
113
+ - lib/version.rb
114
+ - rubyversion
115
+ - spec/matchers/dom_matcher_spec.rb
116
+ - spec/spec_helper.rb
117
+ - spp_nokogiri_ext.gemspec
118
+ homepage: ""
119
+ licenses: []
120
+
121
+ post_install_message:
122
+ rdoc_options: []
123
+
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ requirements: []
145
+
146
+ rubyforge_project:
147
+ rubygems_version: 1.8.24
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: Extensions to Nokogiri used across SPP programs
151
+ test_files:
152
+ - spec/matchers/dom_matcher_spec.rb
153
+ - spec/spec_helper.rb