solrizer 0.2.0 → 0.3.0
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 +3 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +44 -0
- data/History.txt +8 -0
- data/Rakefile +10 -3
- data/VERSION +1 -1
- data/config/solr_mappings.yml +16 -13
- data/config/solr_mappings_af_0.1.yml +18 -0
- data/lib/solrizer/extractor.rb +31 -72
- data/lib/solrizer/field_mapper.rb +351 -0
- data/lib/solrizer/field_name_mapper.rb +37 -51
- data/lib/solrizer/html/extractor.rb +36 -0
- data/lib/solrizer/html.rb +7 -0
- data/lib/solrizer/xml/extractor.rb +31 -0
- data/lib/solrizer/xml/terminology_based_solrizer.rb +25 -29
- data/lib/solrizer/xml.rb +4 -1
- data/lib/solrizer.rb +2 -113
- data/lib/tasks/solrizer.rake +7 -27
- data/solrizer.gemspec +46 -26
- data/spec/{spec.opts → .rspec} +0 -0
- data/spec/fixtures/test_solr_mappings.yml +16 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/units/extractor_spec.rb +43 -34
- data/spec/units/field_mapper_spec.rb +227 -0
- data/spec/units/field_name_mapper_spec.rb +16 -29
- data/spec/units/xml_extractor_spec.rb +28 -0
- data/spec/units/xml_terminology_based_solrizer_spec.rb +18 -5
- metadata +128 -35
- data/lib/solrizer/configuration.rb +0 -8
- data/lib/solrizer/indexer.rb +0 -261
- data/lib/solrizer/main.rb +0 -17
- data/lib/solrizer/replicator.rb +0 -143
- data/lib/solrizer/repository.rb +0 -54
- data/spec/fixtures/rels_ext_cmodel.xml +0 -8
- data/spec/fixtures/solr_mappings_af_0.1.yml +0 -16
- data/spec/integration/indexer_spec.rb +0 -18
- data/spec/units/indexer_spec.rb +0 -127
- data/spec/units/shelver_spec.rb +0 -42
@@ -3,48 +3,57 @@ require 'solrizer'
|
|
3
3
|
|
4
4
|
describe Solrizer::Extractor do
|
5
5
|
|
6
|
-
before(:
|
6
|
+
before(:all) do
|
7
7
|
@extractor = Solrizer::Extractor.new
|
8
8
|
end
|
9
9
|
|
10
|
-
describe "
|
11
|
-
it "should
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
describe "extract_hash" do
|
11
|
+
it "should convert a hash to a solr doc" do
|
12
|
+
example_hash = {"box"=>"Box 51A", "city"=>["Ann Arbor", "Hyderabad", "Palo Alto"], "person"=>["ELLIE ENGELMORE", "Reddy", "EDWARD FEIGENBAUM"], "title"=>"Letter from Ellie Engelmore to Professor K. C. Reddy", "series"=>"eaf7000", "folder"=>"Folder 15", "technology"=>["artificial intelligence"], "year"=>"1985", "organization"=>["Heuristic Programming Project", "Mathematics and Computer/Information Sciences University of Hyderabad Central University P. O. Hyder", "Professor K. C. Reddy School of Mathematics and Computer/Information Sciences"], "collection"=>"e-a-feigenbaum-collection", "state"=>["Michigan", "California"]}
|
13
|
+
|
14
|
+
example_result = @extractor.extract_hash( example_hash )
|
15
|
+
example_result.should be_kind_of Solr::Document
|
16
|
+
example_hash.each_pair do |key,values|
|
17
|
+
if values.class == String
|
18
|
+
example_result["#{key}_facet"].should == values
|
19
|
+
else
|
20
|
+
values.each do |v|
|
21
|
+
example_result.inspect.include?("@name=\"#{key}_facet\"").should be_true
|
22
|
+
example_result.inspect.include?("@value=\"#{v}\"").should be_true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
25
26
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
result
|
32
|
-
result
|
33
|
-
result
|
27
|
+
|
28
|
+
it "should handle hashes with facets listed in a sub-hash" do
|
29
|
+
simple_hash = Hash[:facets => {'technology'=>["t1", "t2"], 'company'=>"c1", "person"=>["p1", "p2"]}]
|
30
|
+
result = @extractor.extract_hash( simple_hash )
|
31
|
+
result.should be_kind_of Solr::Document
|
32
|
+
result["technology_facet"].should == "t1"
|
33
|
+
result.inspect.include?('@boost=nil').should be_true
|
34
|
+
result.inspect.include?('@name="technology_facet"').should be_true
|
35
|
+
result.inspect.include?('@value="t2"').should be_true
|
36
|
+
result["company_facet"].should == "c1"
|
37
|
+
result["person_facet"].should == "p1"
|
38
|
+
result.inspect.include?('@name="person_facet"').should be_true
|
39
|
+
result.inspect.include?('@value="p2"').should be_true
|
34
40
|
|
35
|
-
# ... and a hacky way of making sure that it added a field for each of the dc:medium values
|
36
|
-
result.inspect.include?('@value="info:fedora/afmodel:SaltDocument"').should be_true
|
37
|
-
result.inspect.include?('@value="jp2_document"').should be_true
|
38
41
|
end
|
39
|
-
|
42
|
+
|
43
|
+
it "should create symbols from the :symbols subhash" do
|
44
|
+
simple_hash = Hash[:facets => {'technology'=>["t1", "t2"], 'company'=>"c1", "person"=>["p1", "p2"]}, :symbols=>{'technology'=>["t1", "t2"], 'company'=>"c1", "person"=>["p1", "p2"]}]
|
45
|
+
result = @extractor.extract_hash( simple_hash )
|
46
|
+
result.should be_kind_of Solr::Document
|
47
|
+
result["technology_s"].should == "t1"
|
48
|
+
result.inspect.include?('@name="technology_s"').should be_true
|
49
|
+
result.inspect.include?('@value="t2"').should be_true
|
50
|
+
|
51
|
+
result["company_s"].should == "c1"
|
52
|
+
result["person_s"].should == "p1"
|
53
|
+
result.inspect.include?('@name="person_s"').should be_true
|
54
|
+
result.inspect.include?('@value="p2"').should be_true
|
40
55
|
|
41
|
-
describe "extract_hydra_types" do
|
42
|
-
it "should extract the hydra_type of a Fedora object" do
|
43
|
-
rels_ext = fixture("rels_ext_cmodel.xml")
|
44
|
-
result = @extractor.extract_rels_ext( rels_ext )
|
45
|
-
result[:hydra_type_t].should == "salt_document"
|
46
56
|
end
|
47
57
|
end
|
48
58
|
|
49
|
-
|
50
59
|
end
|
@@ -0,0 +1,227 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "..", "spec_helper" )
|
2
|
+
|
3
|
+
describe Solrizer::FieldMapper do
|
4
|
+
|
5
|
+
# --- Test Mappings ----
|
6
|
+
|
7
|
+
class TestMapper0 < Solrizer::FieldMapper
|
8
|
+
id_field 'ident'
|
9
|
+
index_as :searchable, :suffix => '_s', :default => true
|
10
|
+
index_as :edible, :suffix => '_food'
|
11
|
+
index_as :laughable, :suffix => '_haha', :default => true do |type|
|
12
|
+
type.integer :suffix => '_ihaha' do |value, field_name|
|
13
|
+
"How many #{field_name}s does it take to screw in a light bulb? #{value.capitalize}."
|
14
|
+
end
|
15
|
+
type.default do |value|
|
16
|
+
"Knock knock. Who's there? #{value.capitalize}. #{value.capitalize} who?"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
index_as :fungible, :suffix => '_f0' do |type|
|
20
|
+
type.integer :suffix => '_f1'
|
21
|
+
type.date
|
22
|
+
type.default :suffix => '_f2'
|
23
|
+
end
|
24
|
+
index_as :unstemmed_searchable, :suffix => '_s' do |type|
|
25
|
+
type.date do |value|
|
26
|
+
"#{value} o'clock"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class TestMapper1 < TestMapper0
|
32
|
+
index_as :searchable do |type|
|
33
|
+
type.date :suffix => '_d'
|
34
|
+
end
|
35
|
+
index_as :fungible, :suffix => '_f3' do |type|
|
36
|
+
type.garble :suffix => '_f4'
|
37
|
+
type.integer :suffix => '_f5'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
before(:each) do
|
42
|
+
@mapper = TestMapper0.new
|
43
|
+
end
|
44
|
+
|
45
|
+
after(:all) do
|
46
|
+
end
|
47
|
+
|
48
|
+
# --- Tests ----
|
49
|
+
|
50
|
+
it "should handle the id field" do
|
51
|
+
@mapper.id_field.should == 'ident'
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.solr_name' do
|
55
|
+
it "should map based on index_as" do
|
56
|
+
@mapper.solr_name('bar', :string, :edible).should == 'bar_food'
|
57
|
+
@mapper.solr_name('bar', :string, :laughable).should == 'bar_haha'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should default the index_type to :searchable" do
|
61
|
+
@mapper.solr_name('foo', :string).should == 'foo_s'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should map based on data type" do
|
65
|
+
@mapper.solr_name('foo', :integer, :fungible).should == 'foo_f1'
|
66
|
+
@mapper.solr_name('foo', :garble, :fungible).should == 'foo_f2' # based on type.default
|
67
|
+
@mapper.solr_name('foo', :date, :fungible).should == 'foo_f0' # type.date falls through to container
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return nil for an unknown index types" do
|
71
|
+
silence do
|
72
|
+
@mapper.solr_name('foo', :string, :blargle).should == nil
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should allow subclasses to selectively override suffixes" do
|
77
|
+
@mapper = TestMapper1.new
|
78
|
+
@mapper.solr_name('foo', :date).should == 'foo_d' # override
|
79
|
+
@mapper.solr_name('foo', :string).should == 'foo_s' # from super
|
80
|
+
@mapper.solr_name('foo', :integer, :fungible).should == 'foo_f5' # override on data type
|
81
|
+
@mapper.solr_name('foo', :garble, :fungible).should == 'foo_f4' # override on data type
|
82
|
+
@mapper.solr_name('foo', :fratz, :fungible).should == 'foo_f2' # from super
|
83
|
+
@mapper.solr_name('foo', :date, :fungible).should == 'foo_f3' # super definition picks up override on index type
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should support field names as symbols" do
|
87
|
+
@mapper.solr_name(:active_fedora_model, :symbol).should == "active_fedora_model_s"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should support scenarios where field_type is nil" do
|
91
|
+
mapper = Solrizer::FieldMapper::Default.new
|
92
|
+
mapper.solr_name(:heifer, nil, :searchable).should == "heifer_t"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '.solr_names_and_values' do
|
97
|
+
it "should map values based on index_as" do
|
98
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, [:searchable, :laughable, :edible]).should == {
|
99
|
+
'foo_s' => ['bar'],
|
100
|
+
'foo_food' => ['bar'],
|
101
|
+
'foo_haha' => ["Knock knock. Who's there? Bar. Bar who?"]
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should apply default index_as mapping unless excluded with not_" do
|
106
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, []).should == {
|
107
|
+
'foo_s' => ['bar'],
|
108
|
+
'foo_haha' => ["Knock knock. Who's there? Bar. Bar who?"]
|
109
|
+
}
|
110
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, [:edible, :not_laughable]).should == {
|
111
|
+
'foo_s' => ['bar'],
|
112
|
+
'foo_food' => ['bar']
|
113
|
+
}
|
114
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, [:not_searchable, :not_laughable]).should == {}
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should apply mappings based on data type" do
|
118
|
+
@mapper.solr_names_and_values('foo', 'bar', :integer, [:searchable, :laughable]).should == {
|
119
|
+
'foo_s' => ['bar'],
|
120
|
+
'foo_ihaha' => ["How many foos does it take to screw in a light bulb? Bar."]
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should skip unknown index types" do
|
125
|
+
silence do
|
126
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, [:blargle]).should == {
|
127
|
+
'foo_s' => ['bar'],
|
128
|
+
'foo_haha' => ["Knock knock. Who's there? Bar. Bar who?"]
|
129
|
+
}
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should generate multiple mappings when two return the _same_ solr name but _different_ values" do
|
134
|
+
@mapper.solr_names_and_values('roll', 'rock', :date, [:unstemmed_searchable, :not_laughable]).should == {
|
135
|
+
'roll_s' => ["rock o'clock", 'rock']
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should not generate multiple mappings when two return the _same_ solr name and the _same_ value" do
|
140
|
+
@mapper.solr_names_and_values('roll', 'rock', :string, [:unstemmed_searchable, :not_laughable]).should == {
|
141
|
+
'roll_s' => ['rock'],
|
142
|
+
}
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "#load_mappings" do
|
147
|
+
before(:each) do
|
148
|
+
class TestMapperLoading < Solrizer::FieldMapper
|
149
|
+
end
|
150
|
+
end
|
151
|
+
it "should take mappings file as an optional argument" do
|
152
|
+
file_path = File.join(File.dirname(__FILE__), "..", "fixtures","test_solr_mappings.yml")
|
153
|
+
TestMapperLoading.load_mappings(file_path)
|
154
|
+
mapper = TestMapperLoading.new
|
155
|
+
mappings_from_file = YAML::load(File.open(file_path))
|
156
|
+
mapper.id_field.should == "pid"
|
157
|
+
mapper.mappings[:edible].opts[:default].should == true
|
158
|
+
mapper.mappings[:edible].data_types[:boolean].opts[:suffix].should == "_edible_bool"
|
159
|
+
mappings_from_file["edible"].each_pair do |k,v|
|
160
|
+
mapper.mappings[:edible].data_types[k.to_sym].opts[:suffix].should == v
|
161
|
+
end
|
162
|
+
mapper.mappings[:displayable].opts[:suffix].should == mappings_from_file["displayable"]
|
163
|
+
mapper.mappings[:facetable].opts[:suffix].should == mappings_from_file["facetable"]
|
164
|
+
mapper.mappings[:sortable].opts[:suffix].should == mappings_from_file["sortable"]
|
165
|
+
end
|
166
|
+
it 'should default to using the mappings from config/solr_mappings.yml' do
|
167
|
+
TestMapperLoading.load_mappings
|
168
|
+
mapper = TestMapperLoading.new
|
169
|
+
default_file_path = File.join(File.dirname(__FILE__), "..", "..","config","solr_mappings.yml")
|
170
|
+
mappings_from_file = YAML::load(File.open(default_file_path))
|
171
|
+
mapper.id_field.should == mappings_from_file["id"]
|
172
|
+
mappings_from_file["searchable"].each_pair do |k,v|
|
173
|
+
mapper.mappings[:searchable].data_types[k.to_sym].opts[:suffix].should == v
|
174
|
+
end
|
175
|
+
mapper.mappings[:displayable].opts[:suffix].should == mappings_from_file["displayable"]
|
176
|
+
mapper.mappings[:facetable].opts[:suffix].should == mappings_from_file["facetable"]
|
177
|
+
mapper.mappings[:sortable].opts[:suffix].should == mappings_from_file["sortable"]
|
178
|
+
end
|
179
|
+
it "should wipe out pre-existing mappings without affecting other FieldMappers" do
|
180
|
+
TestMapperLoading.load_mappings
|
181
|
+
file_path = File.join(File.dirname(__FILE__), "..", "fixtures","test_solr_mappings.yml")
|
182
|
+
TestMapperLoading.load_mappings(file_path)
|
183
|
+
mapper = TestMapperLoading.new
|
184
|
+
mapper.mappings[:searchable].should be_nil
|
185
|
+
default_mapper = Solrizer::FieldMapper::Default.new
|
186
|
+
default_mapper.mappings[:searchable].should_not be_nil
|
187
|
+
end
|
188
|
+
it "should raise an informative error if the yaml file is structured improperly"
|
189
|
+
it "should raise an informative error if there is no YAML file"
|
190
|
+
end
|
191
|
+
|
192
|
+
describe Solrizer::FieldMapper::Default do
|
193
|
+
before(:each) do
|
194
|
+
@mapper = Solrizer::FieldMapper::Default.new
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should call the id field 'id'" do
|
198
|
+
@mapper.id_field.should == 'id'
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should apply mappings for searchable by default" do
|
202
|
+
# Just sanity check a couple; copy & pasting all data types is silly
|
203
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, []).should == { 'foo_t' => ['bar'] }
|
204
|
+
@mapper.solr_names_and_values('foo', 'bar', :date, []).should == { 'foo_dt' => ['bar'] }
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should support displayable, facetable, sortable, unstemmed" do
|
208
|
+
@mapper.solr_names_and_values('foo', 'bar', :string, [:displayable, :facetable, :sortable, :unstemmed_searchable]).should == {
|
209
|
+
'foo_t' => ['bar'],
|
210
|
+
'foo_display' => ['bar'],
|
211
|
+
'foo_facet' => ['bar'],
|
212
|
+
'foo_sort' => ['bar'],
|
213
|
+
'foo_unstem_search' => ['bar'],
|
214
|
+
}
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def silence
|
219
|
+
old_level = @mapper.logger.level
|
220
|
+
@mapper.logger.level = 100
|
221
|
+
begin
|
222
|
+
yield
|
223
|
+
ensure
|
224
|
+
@mapper.logger.level = old_level
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
@@ -1,41 +1,28 @@
|
|
1
1
|
require File.join( File.dirname(__FILE__), "..", "spec_helper" )
|
2
2
|
|
3
|
-
# require 'solrizer'
|
4
|
-
# require 'solrizer/field_name_mapper'
|
5
|
-
|
6
|
-
class FieldNameMapperTest
|
7
|
-
include Solrizer::FieldNameMapper
|
8
|
-
end
|
9
|
-
|
10
|
-
def helper
|
11
|
-
@test_instance
|
12
|
-
end
|
13
|
-
|
14
3
|
describe Solrizer::FieldNameMapper do
|
15
4
|
|
16
|
-
before(:
|
17
|
-
|
5
|
+
before(:all) do
|
6
|
+
class TestFieldNameMapper
|
7
|
+
include Solrizer::FieldNameMapper
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#mappings" do
|
12
|
+
it "should return at least an id_field value" do
|
13
|
+
TestFieldNameMapper.id_field.should == "id"
|
14
|
+
end
|
18
15
|
end
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
describe '#solr_name' do
|
18
|
+
it "should generate solr field names" do
|
19
|
+
TestFieldNameMapper.solr_name(:active_fedora_model, :symbol).should == "active_fedora_model_s"
|
20
|
+
end
|
23
21
|
end
|
24
22
|
|
25
23
|
describe ".solr_name" do
|
26
|
-
it "should generate solr field names
|
27
|
-
|
28
|
-
end
|
29
|
-
it "should format the response based on the class of the input" do
|
30
|
-
helper.solr_name(:system_create, :date).should == :system_create_dt
|
31
|
-
helper.solr_name("system_create", :date).should == "system_create_dt"
|
32
|
-
end
|
33
|
-
it "should rely on whichever mappings have been loaded into the SolrService" do
|
34
|
-
helper.solr_name(:system_create, :date).should == :system_create_dt
|
35
|
-
helper.solr_name(:foo, :text).should == :foo_t
|
36
|
-
Solrizer::FieldNameMapper.load_mappings(File.join(File.dirname(__FILE__), "..", "fixtures", "solr_mappings_af_0.1.yml"))
|
37
|
-
helper.solr_name(:system_create, :date).should == :system_create_date
|
38
|
-
helper.solr_name(:foo, :text).should == :foo_field
|
24
|
+
it "should generate solr field names" do
|
25
|
+
TestFieldNameMapper.new.solr_name(:active_fedora_model, :symbol).should == "active_fedora_model_s"
|
39
26
|
end
|
40
27
|
end
|
41
28
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'solrizer'
|
3
|
+
|
4
|
+
describe Solrizer::XML::Extractor do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
@extractor = Solrizer::Extractor.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".xml_to_solr" do
|
11
|
+
it "should turn simple xml into a solr document" do
|
12
|
+
desc_meta = fixture("druid-bv448hq0314-descMetadata.xml")
|
13
|
+
result = @extractor.xml_to_solr(desc_meta)
|
14
|
+
result[:type_t].should == "text"
|
15
|
+
result[:medium_t].should == "Paper Document"
|
16
|
+
result[:rights_t].should == "Presumed under copyright. Do not publish."
|
17
|
+
result[:date_t].should == "1985-12-30"
|
18
|
+
result[:format_t].should == "application/tiff"
|
19
|
+
result[:title_t].should == "This is a Sample Title"
|
20
|
+
result[:publisher_t].should == "Sample Unversity"
|
21
|
+
|
22
|
+
# ... and a hacky way of making sure that it added a field for each of the dc:medium values
|
23
|
+
result.inspect.include?('@value="application/tiff"').should be_true
|
24
|
+
result.inspect.include?('@value="application/pdf"').should be_true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -34,8 +34,9 @@ describe Solrizer::XML::TerminologyBasedSolrizer do
|
|
34
34
|
# mock_terms = {:name1=>:term1, :name2=>:term2}
|
35
35
|
# ActiveFedora::NokogiriDatastream.stubs(:accessors).returns(mock_accessors)
|
36
36
|
solr_doc = Solr::Document.new
|
37
|
+
@mods_article.field_mapper = Solrizer::FieldMapper::Default.new
|
37
38
|
OM::Samples::ModsArticle.terminology.terms.each_pair do |k,v|
|
38
|
-
@mods_article.expects(:solrize_term).with(v, solr_doc)
|
39
|
+
@mods_article.expects(:solrize_term).with(v, solr_doc, @mods_article.field_mapper)
|
39
40
|
end
|
40
41
|
@mods_article.to_solr(solr_doc)
|
41
42
|
end
|
@@ -49,7 +50,7 @@ describe Solrizer::XML::TerminologyBasedSolrizer do
|
|
49
50
|
solr_doc[:abstract_t].should == "ABSTRACT"
|
50
51
|
solr_doc[:title_info_1_language_t].should == "finnish"
|
51
52
|
solr_doc[:person_1_role_0_text_t].should == "teacher"
|
52
|
-
|
53
|
+
|
53
54
|
# These are a holdover from an old verison of OM
|
54
55
|
# solr_doc[:finnish_title_info_language_t].should == "finnish"
|
55
56
|
# solr_doc[:finnish_title_info_main_title_t].should == "Artikkelin otsikko Hydrangea artiklan 1"
|
@@ -62,7 +63,7 @@ describe Solrizer::XML::TerminologyBasedSolrizer do
|
|
62
63
|
# solr_doc.should == ""
|
63
64
|
|
64
65
|
end
|
65
|
-
|
66
|
+
|
66
67
|
end
|
67
68
|
|
68
69
|
describe ".solrize_term" do
|
@@ -73,7 +74,18 @@ describe Solrizer::XML::TerminologyBasedSolrizer do
|
|
73
74
|
result.should == solr_doc
|
74
75
|
# @mods_article.solrize_term(:title_info, OM::Samples::ModsArticle.terminology.retrieve_term(:title_info), :solr_doc=>solr_doc).should == ""
|
75
76
|
end
|
76
|
-
|
77
|
+
|
78
|
+
it "should add multiple fields based on index_as" do
|
79
|
+
fake_solr_doc = [] # duck typing cheat: test will break if solrize_term decides to use methods other than <<
|
80
|
+
@mods_article.solrize_term(OM::Samples::ModsArticle.terminology.retrieve_term(:name), fake_solr_doc)
|
81
|
+
|
82
|
+
expected_names = ["DR.", "FAMILY NAME", "GIVEN NAMES"]
|
83
|
+
%w(_t _display _facet).each do |suffix|
|
84
|
+
actual_names = fake_solr_doc.select { |field| field.name == 'name_0_namePart' + suffix }.map { |field| field.value }.sort
|
85
|
+
{suffix => actual_names}.should == {suffix => expected_names}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
77
89
|
end
|
78
90
|
|
79
91
|
describe ".solrize_node" do
|
@@ -81,8 +93,9 @@ describe Solrizer::XML::TerminologyBasedSolrizer do
|
|
81
93
|
doc = Solr::Document.new
|
82
94
|
# @mods_article.solrize_node(node, term_pointer, term, solr_doc).should equal(doc)
|
83
95
|
end
|
96
|
+
|
84
97
|
it "should create a solr field containing node.text"
|
85
98
|
it "should create hierarchical field entries if parents is not empty"
|
86
99
|
it "should only create one node if parents is empty"
|
87
100
|
end
|
88
|
-
end
|
101
|
+
end
|