om 3.0.3 → 3.0.5
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.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +113 -0
- data/History.textile +0 -6
- data/README.md +41 -0
- data/gemfiles/gemfile.rails4 +1 -1
- data/lib/om.rb +2 -0
- data/lib/om/version.rb +1 -1
- data/lib/om/xml/document.rb +6 -1
- data/lib/om/xml/dynamic_node.rb +12 -2
- data/lib/om/xml/term.rb +242 -239
- data/lib/om/xml/term_builder.rb +39 -8
- data/lib/om/xml/terminology.rb +4 -1
- data/lib/om/xml/terminology_based_solrizer.rb +1 -1
- data/om.gemspec +1 -2
- data/spec/integration/serialization_spec.rb +37 -19
- data/spec/integration/subclass_terminology_spec.rb +14 -2
- data/spec/unit/container_spec.rb +2 -2
- data/spec/unit/dynamic_node_spec.rb +23 -0
- data/spec/unit/term_builder_spec.rb +41 -19
- data/spec/unit/term_spec.rb +3 -3
- data/spec/unit/term_xpath_generator_spec.rb +1 -1
- data/spec/unit/xml_terminology_based_solrizer_spec.rb +1 -0
- metadata +40 -68
- data/README.textile +0 -36
data/lib/om/xml/term_builder.rb
CHANGED
@@ -93,7 +93,7 @@ module OM::XML::TermBuilder
|
|
93
93
|
# @param [OM::XML::Terminology] terminology that this Term is being built for
|
94
94
|
def build(terminology=nil)
|
95
95
|
self.resolve_refs!
|
96
|
-
if
|
96
|
+
if settings.has_key?(:proxy)
|
97
97
|
term = OM::XML::NamedTermProxy.new(self.name, self.settings[:proxy], terminology, self.settings)
|
98
98
|
else
|
99
99
|
term = OM::XML::Term.new(self.name, {}, terminology)
|
@@ -118,14 +118,45 @@ module OM::XML::TermBuilder
|
|
118
118
|
return self
|
119
119
|
end
|
120
120
|
|
121
|
+
def root_term= val
|
122
|
+
@settings[:is_root_term] = val
|
123
|
+
end
|
121
124
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
@settings[
|
128
|
-
|
125
|
+
def index_as= val
|
126
|
+
@settings[:index_as] = val
|
127
|
+
end
|
128
|
+
|
129
|
+
def required= val
|
130
|
+
@settings[:required] = val
|
131
|
+
end
|
132
|
+
|
133
|
+
def ref= val
|
134
|
+
@settings[:ref] = val
|
135
|
+
end
|
136
|
+
|
137
|
+
def attributes= val
|
138
|
+
@settings[:attributes] = val
|
139
|
+
end
|
140
|
+
|
141
|
+
def proxy= val
|
142
|
+
@settings[:proxy] = val
|
143
|
+
end
|
144
|
+
|
145
|
+
def type= val
|
146
|
+
@settings[:type] = val
|
147
|
+
end
|
148
|
+
|
149
|
+
def path= val
|
150
|
+
@settings[:path] = val
|
129
151
|
end
|
152
|
+
|
153
|
+
def variant_of= val
|
154
|
+
@settings[:variant_of] = val
|
155
|
+
end
|
156
|
+
|
157
|
+
def default_content_path= val
|
158
|
+
@settings[:default_content_path] = val
|
159
|
+
end
|
160
|
+
|
130
161
|
end
|
131
162
|
end
|
data/lib/om/xml/terminology.rb
CHANGED
@@ -51,7 +51,10 @@ class OM::XML::Terminology
|
|
51
51
|
@namespaces["oxns"] = ns_pair.last
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
path = opts.fetch(:path,:root).to_s.sub(/[_!]$/, '')
|
55
|
+
root_term_builder = OM::XML::Term::Builder.new(path).tap do |t|
|
56
|
+
t.root_term= true
|
57
|
+
end
|
55
58
|
term_opts = opts.dup
|
56
59
|
term_opts.delete(:schema)
|
57
60
|
root_term_builder.settings.merge!(term_opts)
|
@@ -15,7 +15,7 @@ module OM::XML::TerminologyBasedSolrizer
|
|
15
15
|
def solrize(doc, solr_doc=Hash.new, field_mapper = nil)
|
16
16
|
unless doc.class.terminology.nil?
|
17
17
|
doc.class.terminology.terms.each_pair do |term_name,term|
|
18
|
-
doc.solrize_term(term, solr_doc, field_mapper)
|
18
|
+
doc.solrize_term(term, solr_doc, field_mapper) unless term.is_root_term?
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/om.gemspec
CHANGED
@@ -32,8 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
33
33
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
34
34
|
s.extra_rdoc_files = [
|
35
|
-
"LICENSE"
|
36
|
-
"README.textile"
|
35
|
+
"LICENSE"
|
37
36
|
]
|
38
37
|
s.require_paths = ["lib"]
|
39
38
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'active_support/core_ext/string/conversions' # for String#to_time conversion
|
2
3
|
|
3
4
|
describe "element values" do
|
4
5
|
before(:all) do
|
@@ -20,7 +21,7 @@ describe "element values" do
|
|
20
21
|
|
21
22
|
|
22
23
|
describe "when the xml template has existing values" do
|
23
|
-
|
24
|
+
let(:datastream) do
|
24
25
|
ElementValueTerminology.from_xml <<-EOF
|
25
26
|
<outer outerId="hypatia:outer" type="outer type">
|
26
27
|
<my_date>2012-10-30</my_date>
|
@@ -30,6 +31,7 @@ describe "element values" do
|
|
30
31
|
</outer>
|
31
32
|
EOF
|
32
33
|
end
|
34
|
+
subject { datastream }
|
33
35
|
describe "reading values" do
|
34
36
|
it "should deserialize date" do
|
35
37
|
subject.my_date.should == [Date.parse('2012-10-30')]
|
@@ -45,26 +47,42 @@ EOF
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
describe "Writing to xml" do
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
<
|
54
|
-
|
55
|
-
|
56
|
-
|
50
|
+
context "serializing time" do
|
51
|
+
context "with a valid time" do
|
52
|
+
subject { datastream.to_xml }
|
53
|
+
before { datastream.my_time = [DateTime.parse('2011-01-30T03:45:15Z')] }
|
54
|
+
it { should be_equivalent_to '<?xml version="1.0"?>
|
55
|
+
<outer outerId="hypatia:outer" type="outer type">
|
56
|
+
<my_date>2012-10-30</my_date>
|
57
|
+
<my_time>2011-01-30T03:45:15Z</my_time>
|
58
|
+
<my_int>7</my_int>
|
59
|
+
<active>true</active>
|
60
|
+
</outer>' }
|
61
|
+
end
|
62
|
+
|
63
|
+
context "setting an invalid time" do
|
64
|
+
it "raises a type mismatch error" do
|
65
|
+
expect { datastream.my_time = '' }.to raise_error OM::TypeMismatch
|
66
|
+
end
|
67
|
+
end
|
57
68
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
69
|
+
|
70
|
+
context "serializing dates" do
|
71
|
+
|
72
|
+
subject { datastream.to_xml }
|
73
|
+
context "with a valid date" do
|
74
|
+
|
75
|
+
before { datastream.my_date = [Date.parse('2012-09-22')] }
|
76
|
+
it { should be_equivalent_to '<?xml version="1.0"?>
|
77
|
+
<outer outerId="hypatia:outer" type="outer type">
|
78
|
+
<my_date>2012-09-22</my_date>
|
79
|
+
<my_time>2012-10-30T12:22:33Z</my_time>
|
80
|
+
<my_int>7</my_int>
|
81
|
+
<active>true</active>
|
82
|
+
</outer>' }
|
83
|
+
end
|
67
84
|
end
|
85
|
+
|
68
86
|
it "should serialize ints" do
|
69
87
|
subject.my_int = [9]
|
70
88
|
subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
|
@@ -12,6 +12,9 @@ describe "Inherited terminology" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class ConcreteTerminology < AbstractTerminology
|
15
|
+
extend_terminology do |t|
|
16
|
+
t.bar
|
17
|
+
end
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
@@ -20,7 +23,7 @@ describe "Inherited terminology" do
|
|
20
23
|
Object.send(:remove_const, :AbstractTerminology)
|
21
24
|
end
|
22
25
|
|
23
|
-
describe "
|
26
|
+
describe "the subclass" do
|
24
27
|
subject do
|
25
28
|
xml = '<root xmlns="asdf"><foo>fooval</foo><bar>barval</bar></root>'
|
26
29
|
ConcreteTerminology.from_xml(xml)
|
@@ -30,9 +33,14 @@ describe "Inherited terminology" do
|
|
30
33
|
subject.foo = "Test value"
|
31
34
|
subject.foo.should == ["Test value"]
|
32
35
|
end
|
36
|
+
|
37
|
+
it "should have extended terminology" do
|
38
|
+
subject.bar = "Test value"
|
39
|
+
subject.bar.should == ["Test value"]
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
35
|
-
describe "
|
43
|
+
describe "the superclass" do
|
36
44
|
subject do
|
37
45
|
xml = '<root xmlns="asdf"><foo>fooval</foo><bar>barval</bar></root>'
|
38
46
|
AbstractTerminology.from_xml(xml)
|
@@ -42,6 +50,10 @@ describe "Inherited terminology" do
|
|
42
50
|
subject.foo = "Test value"
|
43
51
|
subject.foo.should == ["Test value"]
|
44
52
|
end
|
53
|
+
|
54
|
+
it "should not have extended terminology" do
|
55
|
+
expect { subject.bar }.to raise_error NoMethodError
|
56
|
+
end
|
45
57
|
end
|
46
58
|
end
|
47
59
|
|
data/spec/unit/container_spec.rb
CHANGED
@@ -54,7 +54,7 @@ describe "OM::XML::Container" do
|
|
54
54
|
|
55
55
|
it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
|
56
56
|
doc = Nokogiri::XML::Document.parse("<test_xml/>")
|
57
|
-
mock_new_node =
|
57
|
+
mock_new_node = double("new node")
|
58
58
|
doc.root.should_receive(:add_child).with(subject.ng_xml.root).and_return(mock_new_node)
|
59
59
|
result = subject.to_xml(doc)
|
60
60
|
end
|
@@ -65,7 +65,7 @@ describe "OM::XML::Container" do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'should add to root of Nokogiri::XML::Documents, but add directly to the elements if a Nokogiri::XML::Node is passed in' do
|
68
|
-
mock_new_node =
|
68
|
+
mock_new_node = double("new node")
|
69
69
|
mock_new_node.stub(:to_xml).and_return("foo")
|
70
70
|
|
71
71
|
doc = Nokogiri::XML::Document.parse("<test_document/>")
|
@@ -47,6 +47,11 @@ describe "OM::XML::DynamicNode" do
|
|
47
47
|
@sample.date_created = ['A long time ago']
|
48
48
|
@sample.date_created.should == ['A long time ago']
|
49
49
|
end
|
50
|
+
|
51
|
+
it "checks inequality" do
|
52
|
+
@sample.foo = ['in a galaxy far far away']
|
53
|
+
expect(@sample.foo != ['nearby']).to be true
|
54
|
+
end
|
50
55
|
end
|
51
56
|
|
52
57
|
|
@@ -80,6 +85,10 @@ describe "OM::XML::DynamicNode" do
|
|
80
85
|
@article.person.last_name.first.should == "FAMILY NAME"
|
81
86
|
end
|
82
87
|
|
88
|
+
it "should respond_to? things an array can do" do
|
89
|
+
expect(@article.person.last_name).to respond_to(:map)
|
90
|
+
end
|
91
|
+
|
83
92
|
it "should delegate with blocks to the found array" do
|
84
93
|
arr = []
|
85
94
|
@article.person.last_name.each{|x| arr << x}
|
@@ -161,6 +170,20 @@ describe "OM::XML::DynamicNode" do
|
|
161
170
|
@article.journal.title_info = %W(six seven)
|
162
171
|
@article.journal.title_info.should == ["six", "seven"]
|
163
172
|
end
|
173
|
+
|
174
|
+
describe '==' do
|
175
|
+
it "returns true when values of dynamic nodes are equal." do
|
176
|
+
@article.name(0).last_name = "Steven"
|
177
|
+
@article.name(0).first_name = "Steven"
|
178
|
+
(@article.name(0).last_name == @article.name(0).first_name).should == true
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'returns false when values of dynamic nodes are not equal.' do
|
182
|
+
@article.name(0).first_name = "Horatio"
|
183
|
+
@article.name(0).last_name = "Hogginobble"
|
184
|
+
(@article.name(0).last_name == @article.name(0).first_name).should == false
|
185
|
+
end
|
186
|
+
end
|
164
187
|
end
|
165
188
|
end
|
166
189
|
end
|
@@ -33,7 +33,7 @@ describe "OM::XML::Term::Builder" do
|
|
33
33
|
|
34
34
|
describe '#new' do
|
35
35
|
it "should set terminology_builder attribute if provided" do
|
36
|
-
mock_terminology_builder =
|
36
|
+
mock_terminology_builder = double("TerminologyBuilder")
|
37
37
|
OM::XML::Term::Builder.new("term1", mock_terminology_builder).terminology_builder.should == mock_terminology_builder
|
38
38
|
end
|
39
39
|
end
|
@@ -41,17 +41,19 @@ describe "OM::XML::Term::Builder" do
|
|
41
41
|
describe "configuration methods" do
|
42
42
|
it "should set the corresponding .settings value return the mapping object" do
|
43
43
|
[:path, :index_as, :required, :type, :variant_of, :path, :attributes, :default_content_path].each do |method_name|
|
44
|
-
@test_builder.send(method_name, "#{method_name.to_s}foo")
|
44
|
+
@test_builder.send("#{method_name}=".to_sym, "#{method_name.to_s}foo")
|
45
45
|
@test_builder.settings[method_name].should == "#{method_name.to_s}foo"
|
46
46
|
end
|
47
47
|
end
|
48
|
-
it "should be chainable" do
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
48
|
+
# it "should be chainable" do
|
49
|
+
# test_builder = OM::XML::Term::Builder.new("chainableTerm").tap do |t|
|
50
|
+
# t.index_as = [:facetable, :searchable, :sortable, :displayable).required(true).type(:text)
|
51
|
+
# end
|
52
|
+
# resulting_settings = test_builder.settings
|
53
|
+
# resulting_settings[:index_as].should == [:facetable, :searchable, :sortable, :displayable]
|
54
|
+
# resulting_settings[:required].should == true
|
55
|
+
# resulting_settings[:type].should == :text
|
56
|
+
# end
|
55
57
|
end
|
56
58
|
|
57
59
|
describe "settings" do
|
@@ -70,7 +72,6 @@ describe "OM::XML::Term::Builder" do
|
|
70
72
|
it "should insert the given Term Builder into the current Term Builder's children" do
|
71
73
|
@test_builder.add_child(@test_builder_2)
|
72
74
|
@test_builder.children[@test_builder_2.name].should == @test_builder_2
|
73
|
-
@test_builder.ancestors.should include(@test_builder_2)
|
74
75
|
end
|
75
76
|
end
|
76
77
|
describe ".retrieve_child" do
|
@@ -88,7 +89,11 @@ describe "OM::XML::Term::Builder" do
|
|
88
89
|
|
89
90
|
describe ".build" do
|
90
91
|
it "should build a Term with the given settings and generate its xpath values" do
|
91
|
-
test_builder = OM::XML::Term::Builder.new("requiredTextFacet").
|
92
|
+
test_builder = OM::XML::Term::Builder.new("requiredTextFacet").tap do |t|
|
93
|
+
t.index_as = [:facetable, :searchable, :sortable, :displayable]
|
94
|
+
t.required = true
|
95
|
+
t.type = :text
|
96
|
+
end
|
92
97
|
result = test_builder.build
|
93
98
|
result.should be_instance_of OM::XML::Term
|
94
99
|
result.index_as.should == [:facetable, :searchable, :sortable, :displayable]
|
@@ -100,7 +105,9 @@ describe "OM::XML::Term::Builder" do
|
|
100
105
|
result.xpath_relative.should == OM::XML::TermXpathGenerator.generate_relative_xpath(result)
|
101
106
|
end
|
102
107
|
it "should create proxy terms if :proxy is set" do
|
103
|
-
test_builder = OM::XML::Term::Builder.new("my_proxy").
|
108
|
+
test_builder = OM::XML::Term::Builder.new("my_proxy").tap do |t|
|
109
|
+
t.proxy = [:foo, :bar]
|
110
|
+
end
|
104
111
|
result = test_builder.build
|
105
112
|
result.should be_kind_of OM::XML::NamedTermProxy
|
106
113
|
end
|
@@ -113,8 +120,8 @@ describe "OM::XML::Term::Builder" do
|
|
113
120
|
built_child1 = OM::XML::Term.new("child1")
|
114
121
|
built_child2 = OM::XML::Term.new("child2")
|
115
122
|
|
116
|
-
mock1 =
|
117
|
-
mock2 =
|
123
|
+
mock1 = double("Builder1", :build => built_child1 )
|
124
|
+
mock2 = double("Builder2", :build => built_child2 )
|
118
125
|
mock1.stub(:name).and_return("child1")
|
119
126
|
mock2.stub(:name).and_return("child2")
|
120
127
|
|
@@ -137,10 +144,17 @@ describe "OM::XML::Term::Builder" do
|
|
137
144
|
@almond.lookup_refs.should == [@peach, @stone_fruit]
|
138
145
|
end
|
139
146
|
it "should raise an error if the TermBuilder does not have a reference to a terminology builder" do
|
140
|
-
lambda {
|
147
|
+
lambda {
|
148
|
+
OM::XML::Term::Builder.new("referrer").tap do |t|
|
149
|
+
t.ref="bongos"
|
150
|
+
t.lookup_refs
|
151
|
+
end
|
152
|
+
}.should raise_error(StandardError,"Cannot perform lookup_ref for the referrer builder. It doesn't have a reference to any terminology builder")
|
141
153
|
end
|
142
154
|
it "should raise an error if the referece points to a nonexistent term builder" do
|
143
|
-
tb = OM::XML::Term::Builder.new("mork",@test_terminology_builder).
|
155
|
+
tb = OM::XML::Term::Builder.new("mork",@test_terminology_builder).tap do |t|
|
156
|
+
t.ref = [:characters, :aliens]
|
157
|
+
end
|
144
158
|
lambda { tb.lookup_refs }.should raise_error(OM::XML::Terminology::BadPointerError,"This TerminologyBuilder does not have a root TermBuilder defined that corresponds to \":characters\"")
|
145
159
|
end
|
146
160
|
it "should raise an error with informative error when given circular references" do
|
@@ -158,7 +172,9 @@ describe "OM::XML::Term::Builder" do
|
|
158
172
|
@test_builder.children.should == children_pre
|
159
173
|
end
|
160
174
|
it "should should look up the referenced TermBuilder, use its settings and duplicate its children without changing the name" do
|
161
|
-
term_builder = OM::XML::Term::Builder.new("orange",@test_terminology_builder).
|
175
|
+
term_builder = OM::XML::Term::Builder.new("orange",@test_terminology_builder).tap do |b|
|
176
|
+
b.ref = [:fruit_trees, :citrus]
|
177
|
+
end
|
162
178
|
term_builder.resolve_refs!
|
163
179
|
# Make sure children and settings were copied
|
164
180
|
term_builder.settings.should == @citrus.settings.merge(:path=>"citrus")
|
@@ -174,7 +190,9 @@ describe "OM::XML::Term::Builder" do
|
|
174
190
|
@almond.settings[:path].should == "prunus"
|
175
191
|
end
|
176
192
|
it "should set path based on the first ref's name if no path is set" do
|
177
|
-
orange_builder = OM::XML::Term::Builder.new("orange",@test_terminology_builder).
|
193
|
+
orange_builder = OM::XML::Term::Builder.new("orange",@test_terminology_builder).tap do |b|
|
194
|
+
b.ref= [:fruit_trees, :citrus]
|
195
|
+
end
|
178
196
|
orange_builder.resolve_refs!
|
179
197
|
orange_builder.settings[:path].should == "citrus"
|
180
198
|
end
|
@@ -182,7 +200,11 @@ describe "OM::XML::Term::Builder" do
|
|
182
200
|
it "should result in clean trees of Terms after building"
|
183
201
|
|
184
202
|
it "should preserve any extra settings specific to this builder (for variant terms)" do
|
185
|
-
tb = OM::XML::Term::Builder.new("orange",@test_terminology_builder).
|
203
|
+
tb = OM::XML::Term::Builder.new("orange",@test_terminology_builder).tap do |b|
|
204
|
+
b.ref= [:fruit_trees, :citrus]
|
205
|
+
b.attributes = {color: "orange"}
|
206
|
+
b.required =true
|
207
|
+
end
|
186
208
|
tb.resolve_refs!
|
187
209
|
tb.settings.should == {:path=>"citrus", :attributes=>{"citric_acid"=>"true", :color=>"orange"}, :required=>true, :type=>:string, :index_as=>[:facetable]}
|
188
210
|
end
|
data/spec/unit/term_spec.rb
CHANGED
@@ -75,8 +75,8 @@ describe OM::XML::Term do
|
|
75
75
|
|
76
76
|
describe ".retrieve_term" do
|
77
77
|
it "should crawl down into mapper children to find the desired term" do
|
78
|
-
mock_role =
|
79
|
-
mock_conference =
|
78
|
+
mock_role = double("mapper", :children =>{:text=>"the target"})
|
79
|
+
mock_conference = double("mapper", :children =>{:role=>mock_role})
|
80
80
|
@test_name_part.should_receive(:children).and_return({:conference=>mock_conference})
|
81
81
|
@test_name_part.retrieve_term(:conference, :role, :text).should == "the target"
|
82
82
|
end
|
@@ -185,7 +185,7 @@ describe OM::XML::Term do
|
|
185
185
|
@test_volume.xpath_constrained.should == '//detail[@type="volume" and contains(number, "#{constraint_value}")]'.gsub('"', '\"')
|
186
186
|
end
|
187
187
|
it "should trigger update on any child objects" do
|
188
|
-
mock_child =
|
188
|
+
mock_child = double("child term")
|
189
189
|
mock_child.should_receive(:generate_xpath_queries!).exactly(3).times
|
190
190
|
@test_name_part.should_receive(:children).and_return({1=>mock_child, 2=>mock_child, 3=>mock_child})
|
191
191
|
@test_name_part.generate_xpath_queries!
|
@@ -68,7 +68,7 @@ describe "OM::XML::TermXpathGeneratorSpec" do
|
|
68
68
|
OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_term).should == '//namePart[@type="termsOfAddress"]'
|
69
69
|
end
|
70
70
|
it "should prepend the xpath for any parent nodes" do
|
71
|
-
mock_parent_mapper =
|
71
|
+
mock_parent_mapper = double("Term", :xpath_absolute=>'//name[@type="conference"]/role')
|
72
72
|
@test_role_text.stub(:parent => mock_parent_mapper)
|
73
73
|
OM::XML::TermXpathGenerator.generate_absolute_xpath(@test_role_text).should == '//name[@type="conference"]/role/roleTerm[@type="text"]'
|
74
74
|
end
|
@@ -29,6 +29,7 @@ describe OM::XML::TerminologyBasedSolrizer do
|
|
29
29
|
solr_doc = Hash.new
|
30
30
|
@mods_article.field_mapper = Solrizer::FieldMapper.new
|
31
31
|
Samples::ModsArticle.terminology.terms.each_pair do |k,v|
|
32
|
+
next if k == :mods # we don't index the root node
|
32
33
|
@mods_article.should_receive(:solrize_term).with(v, solr_doc, @mods_article.field_mapper)
|
33
34
|
end
|
34
35
|
@mods_article.to_solr(solr_doc)
|