rslt 1.1.8
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/.travis.yml +10 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +53 -0
- data/History.txt +4 -0
- data/PostInstall.txt +1 -0
- data/README.md +67 -0
- data/Rakefile +55 -0
- data/TODO +3 -0
- data/lib/rslt/element_wrapper.rb +37 -0
- data/lib/rslt/rule.rb +45 -0
- data/lib/rslt/stylesheet.rb +94 -0
- data/lib/rslt.rb +9 -0
- data/rdoc/RSLT/ElementWrapper.html +357 -0
- data/rdoc/RSLT/Rule.html +379 -0
- data/rdoc/RSLT/Stylesheet.html +311 -0
- data/rdoc/RSLT.html +132 -0
- data/rdoc/created.rid +6 -0
- data/rdoc/images/add.png +0 -0
- data/rdoc/images/brick.png +0 -0
- data/rdoc/images/brick_link.png +0 -0
- data/rdoc/images/bug.png +0 -0
- data/rdoc/images/bullet_black.png +0 -0
- data/rdoc/images/bullet_toggle_minus.png +0 -0
- data/rdoc/images/bullet_toggle_plus.png +0 -0
- data/rdoc/images/date.png +0 -0
- data/rdoc/images/delete.png +0 -0
- data/rdoc/images/find.png +0 -0
- data/rdoc/images/loadingAnimation.gif +0 -0
- data/rdoc/images/macFFBgHack.png +0 -0
- data/rdoc/images/package.png +0 -0
- data/rdoc/images/page_green.png +0 -0
- data/rdoc/images/page_white_text.png +0 -0
- data/rdoc/images/page_white_width.png +0 -0
- data/rdoc/images/plugin.png +0 -0
- data/rdoc/images/ruby.png +0 -0
- data/rdoc/images/tag_blue.png +0 -0
- data/rdoc/images/tag_green.png +0 -0
- data/rdoc/images/transparent.png +0 -0
- data/rdoc/images/wrench.png +0 -0
- data/rdoc/images/wrench_orange.png +0 -0
- data/rdoc/images/zoom.png +0 -0
- data/rdoc/index.html +75 -0
- data/rdoc/js/darkfish.js +153 -0
- data/rdoc/js/jquery.js +18 -0
- data/rdoc/js/navigation.js +142 -0
- data/rdoc/js/search.js +94 -0
- data/rdoc/js/search_index.js +1 -0
- data/rdoc/js/searcher.js +228 -0
- data/rdoc/rdoc.css +543 -0
- data/rdoc/table_of_contents.html +83 -0
- data/rslt.gemspec +150 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/element_wrapper_spec.rb +22 -0
- data/spec/excesselt_spec.rb +112 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/matchers/dom_matcher.rb +45 -0
- data/tasks/rspec.rake +13 -0
- metadata +307 -0
data/rslt.gemspec
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = "rslt"
|
|
8
|
+
s.version = "1.1.8"
|
|
9
|
+
|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
|
11
|
+
s.authors = ["Daniel Heath"]
|
|
12
|
+
s.date = "2012-04-05"
|
|
13
|
+
s.description = "I had a lot of XML transformation to do and the requirements kept changing, so I sat down and wrote something that was easy to modify."
|
|
14
|
+
s.email = ["daniel.r.heath@gmail.com"]
|
|
15
|
+
s.extra_rdoc_files = [
|
|
16
|
+
"README.md",
|
|
17
|
+
"TODO"
|
|
18
|
+
]
|
|
19
|
+
s.files = [
|
|
20
|
+
".travis.yml",
|
|
21
|
+
"Gemfile",
|
|
22
|
+
"Gemfile.lock",
|
|
23
|
+
"History.txt",
|
|
24
|
+
"PostInstall.txt",
|
|
25
|
+
"README.md",
|
|
26
|
+
"Rakefile",
|
|
27
|
+
"TODO",
|
|
28
|
+
"lib/rslt.rb",
|
|
29
|
+
"lib/rslt/element_wrapper.rb",
|
|
30
|
+
"lib/rslt/rule.rb",
|
|
31
|
+
"lib/rslt/stylesheet.rb",
|
|
32
|
+
"rdoc/RSLT.html",
|
|
33
|
+
"rdoc/RSLT/ElementWrapper.html",
|
|
34
|
+
"rdoc/RSLT/Rule.html",
|
|
35
|
+
"rdoc/RSLT/Stylesheet.html",
|
|
36
|
+
"rdoc/created.rid",
|
|
37
|
+
"rdoc/images/add.png",
|
|
38
|
+
"rdoc/images/brick.png",
|
|
39
|
+
"rdoc/images/brick_link.png",
|
|
40
|
+
"rdoc/images/bug.png",
|
|
41
|
+
"rdoc/images/bullet_black.png",
|
|
42
|
+
"rdoc/images/bullet_toggle_minus.png",
|
|
43
|
+
"rdoc/images/bullet_toggle_plus.png",
|
|
44
|
+
"rdoc/images/date.png",
|
|
45
|
+
"rdoc/images/delete.png",
|
|
46
|
+
"rdoc/images/find.png",
|
|
47
|
+
"rdoc/images/loadingAnimation.gif",
|
|
48
|
+
"rdoc/images/macFFBgHack.png",
|
|
49
|
+
"rdoc/images/package.png",
|
|
50
|
+
"rdoc/images/page_green.png",
|
|
51
|
+
"rdoc/images/page_white_text.png",
|
|
52
|
+
"rdoc/images/page_white_width.png",
|
|
53
|
+
"rdoc/images/plugin.png",
|
|
54
|
+
"rdoc/images/ruby.png",
|
|
55
|
+
"rdoc/images/tag_blue.png",
|
|
56
|
+
"rdoc/images/tag_green.png",
|
|
57
|
+
"rdoc/images/transparent.png",
|
|
58
|
+
"rdoc/images/wrench.png",
|
|
59
|
+
"rdoc/images/wrench_orange.png",
|
|
60
|
+
"rdoc/images/zoom.png",
|
|
61
|
+
"rdoc/index.html",
|
|
62
|
+
"rdoc/js/darkfish.js",
|
|
63
|
+
"rdoc/js/jquery.js",
|
|
64
|
+
"rdoc/js/navigation.js",
|
|
65
|
+
"rdoc/js/search.js",
|
|
66
|
+
"rdoc/js/search_index.js",
|
|
67
|
+
"rdoc/js/searcher.js",
|
|
68
|
+
"rdoc/rdoc.css",
|
|
69
|
+
"rdoc/table_of_contents.html",
|
|
70
|
+
"rslt.gemspec",
|
|
71
|
+
"script/console",
|
|
72
|
+
"script/destroy",
|
|
73
|
+
"script/generate",
|
|
74
|
+
"spec/element_wrapper_spec.rb",
|
|
75
|
+
"spec/excesselt_spec.rb",
|
|
76
|
+
"spec/spec_helper.rb",
|
|
77
|
+
"spec/support/matchers/dom_matcher.rb",
|
|
78
|
+
"tasks/rspec.rake"
|
|
79
|
+
]
|
|
80
|
+
s.homepage = "http://www.github.com/danielheath/rslt"
|
|
81
|
+
s.rdoc_options = ["--charset=UTF-8", "-mREADME.md"]
|
|
82
|
+
s.require_paths = ["lib"]
|
|
83
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
|
84
|
+
s.rubygems_version = "1.8.10"
|
|
85
|
+
s.summary = "Helps you to transform XML without using XSLT."
|
|
86
|
+
|
|
87
|
+
if s.respond_to? :specification_version then
|
|
88
|
+
s.specification_version = 3
|
|
89
|
+
|
|
90
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
91
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
|
92
|
+
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
|
93
|
+
s.add_development_dependency(%q<activesupport>, [">= 0"])
|
|
94
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
|
95
|
+
s.add_development_dependency(%q<i18n>, [">= 0"])
|
|
96
|
+
s.add_development_dependency(%q<rspec>, ["> 2.0.0"])
|
|
97
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
|
98
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
|
99
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
100
|
+
s.add_runtime_dependency(%q<nokogiri>, ["~> 1"])
|
|
101
|
+
s.add_runtime_dependency(%q<builder>, ["> 2"])
|
|
102
|
+
s.add_development_dependency(%q<activesupport>, [">= 0"])
|
|
103
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
|
104
|
+
s.add_development_dependency(%q<i18n>, [">= 0"])
|
|
105
|
+
s.add_development_dependency(%q<rspec>, ["> 2.0.0"])
|
|
106
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
|
107
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
|
108
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
109
|
+
else
|
|
110
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
111
|
+
s.add_dependency(%q<builder>, [">= 0"])
|
|
112
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
113
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
114
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
|
115
|
+
s.add_dependency(%q<rspec>, ["> 2.0.0"])
|
|
116
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
117
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
118
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
119
|
+
s.add_dependency(%q<nokogiri>, ["~> 1"])
|
|
120
|
+
s.add_dependency(%q<builder>, ["> 2"])
|
|
121
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
122
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
123
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
|
124
|
+
s.add_dependency(%q<rspec>, ["> 2.0.0"])
|
|
125
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
126
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
127
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
128
|
+
end
|
|
129
|
+
else
|
|
130
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
131
|
+
s.add_dependency(%q<builder>, [">= 0"])
|
|
132
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
133
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
134
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
|
135
|
+
s.add_dependency(%q<rspec>, ["> 2.0.0"])
|
|
136
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
137
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
138
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
139
|
+
s.add_dependency(%q<nokogiri>, ["~> 1"])
|
|
140
|
+
s.add_dependency(%q<builder>, ["> 2"])
|
|
141
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
|
142
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
143
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
|
144
|
+
s.add_dependency(%q<rspec>, ["> 2.0.0"])
|
|
145
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
146
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
147
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
data/script/console
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# File: script/console
|
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
|
4
|
+
|
|
5
|
+
libs = " -r irb/completion"
|
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/mygem.rb'}"
|
|
9
|
+
puts "Loading mygem gem"
|
|
10
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'rubigen'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'rubigen'
|
|
9
|
+
end
|
|
10
|
+
require 'rubigen/scripts/destroy'
|
|
11
|
+
|
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'rubigen'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'rubigen'
|
|
9
|
+
end
|
|
10
|
+
require 'rubigen/scripts/generate'
|
|
11
|
+
|
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSLT::ElementWrapper do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
@stylesheet = Object.new
|
|
7
|
+
@element = Object.new
|
|
8
|
+
@builder = Object.new
|
|
9
|
+
@wrapper = RSLT::ElementWrapper.new(@stylesheet, @element, @builder)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "passing through method calls" do
|
|
13
|
+
describe "when an error is raised in a passed through call" do
|
|
14
|
+
it "should raise an error" do
|
|
15
|
+
lambda {
|
|
16
|
+
@wrapper.foo
|
|
17
|
+
}.should raise_exception
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
|
2
|
+
require 'json'
|
|
3
|
+
describe "rslt" do
|
|
4
|
+
|
|
5
|
+
describe "When a developer wants to transform their hello world xml" do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
|
|
9
|
+
module TestHelper
|
|
10
|
+
def error_text_in_parent(options=nil)
|
|
11
|
+
error("Text is not allowed within a parent node! Options were #{options.to_json}") unless (text.strip == '')
|
|
12
|
+
end
|
|
13
|
+
def uppercase_text
|
|
14
|
+
add text.upcase
|
|
15
|
+
end
|
|
16
|
+
def text
|
|
17
|
+
self.to_xml
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
@stylesheet = Class.new(RSLT::Stylesheet) do
|
|
22
|
+
def rules
|
|
23
|
+
render('parent > child') { builder.p(:style => "child_content" ) { child_content } }
|
|
24
|
+
render('parent') { builder.p(:style => "parent_content") { child_content } }
|
|
25
|
+
helper TestHelper do
|
|
26
|
+
render('parent.explode > text()', :with => :a_method_that_doesnt_exist)
|
|
27
|
+
within 'parent' do
|
|
28
|
+
render('> text()', :with => :error_text_in_parent, :passing => 'a custom option')
|
|
29
|
+
end
|
|
30
|
+
render('text()', :with => :uppercase_text)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should transform a hello world document according to a stylesheet" do
|
|
38
|
+
xml = <<-XML
|
|
39
|
+
<parent>
|
|
40
|
+
<child>Hello World</child>
|
|
41
|
+
</parent>
|
|
42
|
+
XML
|
|
43
|
+
expected = <<-EXPECTED
|
|
44
|
+
<p style="parent_content">
|
|
45
|
+
<p style="child_content">HELLO WORLD</p>
|
|
46
|
+
</p>
|
|
47
|
+
EXPECTED
|
|
48
|
+
@stylesheet.transform(xml).should match_the_dom_of(expected)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should ignore comments" do
|
|
52
|
+
xml = <<-XML
|
|
53
|
+
<parent>
|
|
54
|
+
<!-- Ignore me -->
|
|
55
|
+
</parent>
|
|
56
|
+
XML
|
|
57
|
+
expected = <<-EXPECTED
|
|
58
|
+
<p style="parent_content"/>
|
|
59
|
+
EXPECTED
|
|
60
|
+
@stylesheet.transform(xml).should match_the_dom_of(expected)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should transform a goodbye document according to a stylesheet" do
|
|
64
|
+
xml = <<-XML
|
|
65
|
+
<parent>
|
|
66
|
+
<parent>
|
|
67
|
+
<child>Goodbye</child>
|
|
68
|
+
</parent>
|
|
69
|
+
</parent>
|
|
70
|
+
XML
|
|
71
|
+
expected = <<-EXPECTED
|
|
72
|
+
<p style="parent_content" >
|
|
73
|
+
<p style="parent_content" >
|
|
74
|
+
<p style="child_content" >
|
|
75
|
+
GOODBYE
|
|
76
|
+
</p>
|
|
77
|
+
</p>
|
|
78
|
+
</p>
|
|
79
|
+
EXPECTED
|
|
80
|
+
@stylesheet.transform(xml).should match_the_dom_of(expected)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "error handling" do
|
|
84
|
+
|
|
85
|
+
it "should record errors encountered during processing" do
|
|
86
|
+
xml = <<-XML
|
|
87
|
+
<parent>foo</parent>
|
|
88
|
+
XML
|
|
89
|
+
@instance = @stylesheet.new
|
|
90
|
+
@instance.transform(xml)
|
|
91
|
+
@instance.errors.should == ['Text is not allowed within a parent node! Options were {"passing":"a custom option"}']
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should record errors encountered during processing" do
|
|
95
|
+
xml = <<-XML
|
|
96
|
+
<parent><unexpected></unexpected></parent>
|
|
97
|
+
XML
|
|
98
|
+
@instance = @stylesheet.new
|
|
99
|
+
lambda { @instance.transform(xml) }.should raise_exception {|e|
|
|
100
|
+
e.message.should =~ /With selector '.*' and included modules: \[TestHelper\]/
|
|
101
|
+
e.message.should =~ /There is no style defined to handle this element/
|
|
102
|
+
e.message.should =~ /CSS Path: 'parent > unexpected'/
|
|
103
|
+
e.message.should =~ /Xpath: '\/parent\/unexpected'/
|
|
104
|
+
e.message.should =~ /Context: 'document, parent'/
|
|
105
|
+
}
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'nokogiri'
|
|
2
|
+
require 'active_support/core_ext/hash/conversions'
|
|
3
|
+
|
|
4
|
+
RSpec::Matchers.define :match_the_dom_of do |expected_xml_string|
|
|
5
|
+
|
|
6
|
+
def describe(string)
|
|
7
|
+
string ? string.to_s.gsub('"', "'").strip.inspect : 'NIL'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
failure_message_for_should_not do |actual|
|
|
11
|
+
"expected that #{describe(actual)} would not match the dom of #{describe(expected)}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
failure_message_for_should do |actual|
|
|
15
|
+
<<-MESSAGE
|
|
16
|
+
|
|
17
|
+
expected first, but got second:
|
|
18
|
+
#{describe(expected) }
|
|
19
|
+
#{describe(actual) }
|
|
20
|
+
|
|
21
|
+
(compared using Nokogiri::XML::Node#==)
|
|
22
|
+
MESSAGE
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
failure_message_for_should_not do |actual|
|
|
26
|
+
<<-MESSAGE
|
|
27
|
+
|
|
28
|
+
expected actual not to equal expected:
|
|
29
|
+
#{describe(expected) }
|
|
30
|
+
#{describe(actual) }
|
|
31
|
+
|
|
32
|
+
(compared using Nokogiri::XML::Node#==)
|
|
33
|
+
MESSAGE
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def hash_for(string)
|
|
37
|
+
Hash.from_xml("<container>#{string.to_s.gsub(' ', '').gsub("\n", '')}</container>")['container']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
match do |actual_xml_string|
|
|
41
|
+
expected_hash = hash_for(expected_xml_string)
|
|
42
|
+
actual_hash = hash_for(actual_xml_string)
|
|
43
|
+
expected_hash == actual_hash
|
|
44
|
+
end
|
|
45
|
+
end
|
data/tasks/rspec.rake
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'rspec/core/rake_task'
|
|
2
|
+
|
|
3
|
+
if RUBY_VERSION =~ /^1\.8/
|
|
4
|
+
desc "Run all specs with rcov"
|
|
5
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
|
6
|
+
t.rcov = true
|
|
7
|
+
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/ --failure-threshold 100}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
else
|
|
11
|
+
desc "Run all specs"
|
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
13
|
+
end
|