hydra-pbcore 2.4.0 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +1 -1
- data/Gemfile.lock +135 -0
- data/README.md +32 -25
- data/Rakefile +1 -1
- data/hydra-pbcore.gemspec +3 -1
- data/lib/hydra-pbcore.rb +19 -2
- data/lib/hydra_pbcore/datastream.rb +0 -1
- data/lib/hydra_pbcore/datastream/document.rb +6 -11
- data/lib/hydra_pbcore/datastream/instantiation.rb +5 -10
- data/lib/hydra_pbcore/methods.rb +0 -6
- data/lib/hydra_pbcore/templates.rb +6 -6
- data/lib/hydra_pbcore/version.rb +1 -1
- data/spec/config_spec.rb +88 -0
- data/spec/document_spec.rb +37 -17
- data/spec/fixtures/digital_instantiation_solr.xml +1009 -1009
- data/spec/fixtures/document_solr.xml +441 -430
- data/spec/fixtures/physical_instantiation_solr.xml +291 -282
- data/spec/instantiation_spec.rb +38 -6
- data/spec/spec_helper.rb +1 -0
- metadata +42 -87
- data/lib/hydra_pbcore/conversions.rb +0 -107
- data/lib/hydra_pbcore/datastream/deprecated.rb +0 -6
- data/lib/hydra_pbcore/datastream/deprecated/digital_document.rb +0 -105
- data/lib/hydra_pbcore/datastream/deprecated/document.rb +0 -332
- data/lib/hydra_pbcore/datastream/deprecated/instantiation.rb +0 -263
- data/lib/hydra_pbcore/mapper.rb +0 -50
- data/spec/deprecated/digital_document_spec.rb +0 -242
- data/spec/deprecated/document_spec.rb +0 -282
- data/spec/deprecated/instantiation_spec.rb +0 -214
- data/spec/fixtures/converted_digital_document_rrhof_1904.xml +0 -61
- data/spec/fixtures/converted_digital_document_rrhof_2405.xml +0 -54
- data/spec/fixtures/converted_document_rrhof_2439.xml +0 -19
- data/spec/fixtures/converted_document_rrhof_524.xml +0 -45
- data/spec/fixtures/converted_instantiation_rrhof_1184.xml +0 -39
- data/spec/fixtures/converted_rrhof_524.xml +0 -45
- data/spec/fixtures/converted_rrhof_524_instantiation.xml +0 -18
- data/spec/fixtures/deprecated/pbcore_digital_document_template.xml +0 -67
- data/spec/fixtures/deprecated/pbcore_document_template.xml +0 -90
- data/spec/fixtures/deprecated/pbcore_instantiation_template.xml +0 -62
- data/spec/fixtures/deprecated/pbcore_solr_digital_document_template.xml +0 -500
- data/spec/fixtures/deprecated/pbcore_solr_document_template.xml +0 -592
- data/spec/fixtures/deprecated/pbcore_solr_instantiation_template.xml +0 -784
- data/spec/fixtures/integration/digital_document_rrhof_1904.xml +0 -67
- data/spec/fixtures/integration/digital_document_rrhof_2405.xml +0 -66
- data/spec/fixtures/integration/document_rrhof_2439.xml +0 -54
- data/spec/fixtures/integration/document_rrhof_524.xml +0 -80
- data/spec/fixtures/integration/instantiation_rrhof_1184.xml +0 -44
- data/spec/integration/conversions_spec.rb +0 -76
- data/spec/mapper_spec.rb +0 -18
data/lib/hydra_pbcore/mapper.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
class HydraPbcore::Mapper < Solrizer::FieldMapper
|
2
|
-
|
3
|
-
id_field 'id'
|
4
|
-
index_as :searchable do |t|
|
5
|
-
t.default :suffix => '_t'
|
6
|
-
t.date :suffix => '_dt' # single-valued solr date fields
|
7
|
-
t.dates :suffix => '_dts' # multi-valued solr date fields
|
8
|
-
t.string :suffix => '_t'
|
9
|
-
t.text :suffix => '_t'
|
10
|
-
t.symbol :suffix => '_s'
|
11
|
-
t.integer :suffix => '_i'
|
12
|
-
t.long :suffix => '_l'
|
13
|
-
t.boolean :suffix => '_b'
|
14
|
-
t.float :suffix => '_f'
|
15
|
-
t.double :suffix => '_d'
|
16
|
-
end
|
17
|
-
index_as :displayable, :suffix => '_display'
|
18
|
-
index_as :facetable, :suffix => '_facet'
|
19
|
-
index_as :sortable, :suffix => '_sort'
|
20
|
-
index_as :unstemmed_searchable, :suffix => '_unstem_search'
|
21
|
-
index_as :converted_date do |t|
|
22
|
-
t.default :suffix => '_dt' do |value|
|
23
|
-
pbcore_date(value)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
index_as :converted_multi_date do |t|
|
27
|
-
t.default :suffix => '_dts' do |value|
|
28
|
-
pbcore_date(value)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# We assume that all dates are in ISO 8601 format, but sometimes users may only
|
33
|
-
# specify a year or a year and month. This method adds a -01-01 or -01 respectively
|
34
|
-
# defaulting to Jan. 1st for dates that are only a year, and the first day of the
|
35
|
-
# month for dates that are only a year and a month.
|
36
|
-
# NOTE: This only applies to the date as it is stored in solr. The original value
|
37
|
-
# as entered by the user is still maintained in the xml.
|
38
|
-
def self.pbcore_date(date, value = String.new)
|
39
|
-
return date if date.empty?
|
40
|
-
if date.match(/^[0-9]{4,4}$/)
|
41
|
-
value = date + "-01-01"
|
42
|
-
elsif date.match(/^[0-9]{4,4}-[0-9]{2,2}$/)
|
43
|
-
value = date + "-01"
|
44
|
-
else
|
45
|
-
value = date
|
46
|
-
end
|
47
|
-
return DateTime.parse(value).to_time.utc.iso8601
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
@@ -1,242 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe HydraPbcore::Datastream::Deprecated::DigitalDocument do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@object_ds = HydraPbcore::Datastream::Deprecated::DigitalDocument.new(nil, nil)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ".update_indexed_attributes" do
|
10
|
-
it "should update all of the fields in #xml_template and fields not requiring additional inserted nodes" do
|
11
|
-
[
|
12
|
-
[:pbc_id],
|
13
|
-
[:title],
|
14
|
-
[:alternative_title],
|
15
|
-
[:chapter],
|
16
|
-
[:episode],
|
17
|
-
[:label],
|
18
|
-
[:segment],
|
19
|
-
[:subtitle],
|
20
|
-
[:track],
|
21
|
-
[:translation],
|
22
|
-
[:summary],
|
23
|
-
[:contents],
|
24
|
-
[:lc_subject],
|
25
|
-
[:lc_name],
|
26
|
-
[:rh_subject],
|
27
|
-
[:getty_genre],
|
28
|
-
[:lc_genre],
|
29
|
-
[:lc_subject_genre],
|
30
|
-
[:series],
|
31
|
-
[:event_place],
|
32
|
-
[:contributor_name],
|
33
|
-
[:contributor_role],
|
34
|
-
[:publisher_name],
|
35
|
-
[:publisher_role],
|
36
|
-
[:note],
|
37
|
-
[:collection],
|
38
|
-
[:archival_series],
|
39
|
-
[:collection_number],
|
40
|
-
[:accession_number],
|
41
|
-
[:access],
|
42
|
-
].each do |pointer|
|
43
|
-
test_val = "#{pointer.last.to_s} value"
|
44
|
-
@object_ds.update_values( {pointer=>{"0"=>test_val}} )
|
45
|
-
@object_ds.get_values(pointer).first.should == test_val
|
46
|
-
@object_ds.get_values(pointer).length.should == 1
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should work for fields that require added xml nodes" do
|
51
|
-
@object_ds.insert_publisher
|
52
|
-
@object_ds.insert_contributor
|
53
|
-
[
|
54
|
-
[:publisher_name],
|
55
|
-
[:publisher_role],
|
56
|
-
[:contributor_name],
|
57
|
-
[:contributor_role]
|
58
|
-
].each do |pointer|
|
59
|
-
test_val = "#{pointer.last.to_s} value"
|
60
|
-
@object_ds.update_indexed_attributes( {pointer=>{"0"=>test_val}} )
|
61
|
-
@object_ds.get_values(pointer).first.should == test_val
|
62
|
-
@object_ds.get_values(pointer).length.should == 1
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should differentiate between multiple added nodes" do
|
67
|
-
@object_ds.insert_contributor
|
68
|
-
@object_ds.insert_contributor
|
69
|
-
@object_ds.update_indexed_attributes( {[:contributor_name] => { 0 => "first contributor" }} )
|
70
|
-
@object_ds.update_indexed_attributes( {[:contributor_name] => { 1 => "second contributor" }} )
|
71
|
-
@object_ds.update_indexed_attributes( {[:contributor_role] => { 0 => "first contributor role" }} )
|
72
|
-
@object_ds.update_indexed_attributes( {[:contributor_role] => { 1 => "second contributor role" }} )
|
73
|
-
@object_ds.get_values(:contributor).length.should == 2
|
74
|
-
@object_ds.get_values(:contributor_name)[0].should == "first contributor"
|
75
|
-
@object_ds.get_values(:contributor_name)[1].should == "second contributor"
|
76
|
-
@object_ds.get_values(:contributor_role)[0].should == "first contributor role"
|
77
|
-
@object_ds.get_values(:contributor_role)[1].should == "second contributor role"
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "#xml_template" do
|
83
|
-
it "should return an empty xml document matching a valid exmplar" do
|
84
|
-
# insert additional nodes
|
85
|
-
@object_ds.insert_publisher
|
86
|
-
@object_ds.insert_contributor
|
87
|
-
@object_ds.insert_publisher
|
88
|
-
@object_ds.insert_contributor
|
89
|
-
|
90
|
-
# update additional nodes that OM will insert automatically
|
91
|
-
@object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
|
92
|
-
@object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
|
93
|
-
@object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
|
94
|
-
@object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
|
95
|
-
@object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
|
96
|
-
@object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
|
97
|
-
@object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
|
98
|
-
@object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
|
99
|
-
@object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
|
100
|
-
@object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
|
101
|
-
@object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
|
102
|
-
@object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
|
103
|
-
@object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
|
104
|
-
@object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
|
105
|
-
@object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
|
106
|
-
@object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
|
107
|
-
|
108
|
-
# Load example deprecated_fixture
|
109
|
-
f = deprecated_fixture "pbcore_digital_document_template.xml"
|
110
|
-
ref_node = Nokogiri::XML(f)
|
111
|
-
f.close
|
112
|
-
|
113
|
-
# Nokogiri-fy our sample document and reorder nodes
|
114
|
-
sample_node = Nokogiri::XML(@object_ds.to_xml)
|
115
|
-
reordered = HydraPbcore::Behaviors.reorder_document(sample_node)
|
116
|
-
|
117
|
-
# Save this for later...
|
118
|
-
out = File.new("tmp/pbcore_digital_document_sample.xml", "w")
|
119
|
-
out.write(reordered.to_s)
|
120
|
-
out.close
|
121
|
-
|
122
|
-
EquivalentXml.equivalent?(ref_node, reordered, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
|
123
|
-
HydraPbcore::Behaviors.validate(reordered).should be_empty
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe ".insert_node" do
|
129
|
-
it "should raise an exception for non-exisitent templates" do
|
130
|
-
lambda { @object_ds.insert_node("blarg") }.should raise_error
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe ".remove_node" do
|
135
|
-
it "should remove a node a given type and index" do
|
136
|
-
["publisher", "contributor"].each do |type|
|
137
|
-
@object_ds.send("insert_"+type)
|
138
|
-
@object_ds.send("insert_"+type)
|
139
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 2
|
140
|
-
@object_ds.remove_node(type.to_sym, "1")
|
141
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 1
|
142
|
-
@object_ds.remove_node(type.to_sym, "0")
|
143
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 0
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
describe ".to_solr" do
|
150
|
-
|
151
|
-
before(:each) do
|
152
|
-
# insert additional nodes
|
153
|
-
@object_ds.insert_publisher
|
154
|
-
@object_ds.insert_contributor
|
155
|
-
[
|
156
|
-
"pbc_id",
|
157
|
-
"title",
|
158
|
-
"alternative_title",
|
159
|
-
"chapter",
|
160
|
-
"episode",
|
161
|
-
"label",
|
162
|
-
"segment",
|
163
|
-
"subtitle",
|
164
|
-
"track",
|
165
|
-
"translation",
|
166
|
-
"summary",
|
167
|
-
"contents",
|
168
|
-
"lc_subject",
|
169
|
-
"lc_name",
|
170
|
-
"rh_subject",
|
171
|
-
"getty_genre",
|
172
|
-
"lc_genre",
|
173
|
-
"lc_subject_genre",
|
174
|
-
"series",
|
175
|
-
"event_place",
|
176
|
-
"contributor_name",
|
177
|
-
"contributor_role",
|
178
|
-
"publisher_name",
|
179
|
-
"publisher_role",
|
180
|
-
"note",
|
181
|
-
"collection",
|
182
|
-
"archival_series",
|
183
|
-
"collection_number",
|
184
|
-
"accession_number",
|
185
|
-
"access"
|
186
|
-
].each do |field|
|
187
|
-
@object_ds.send("#{field}=".to_sym, field)
|
188
|
-
end
|
189
|
-
# update additional nodes that OM will insert automatically
|
190
|
-
@object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
|
191
|
-
@object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
|
192
|
-
@object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
|
193
|
-
@object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
|
194
|
-
@object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
|
195
|
-
@object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
|
196
|
-
@object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
|
197
|
-
@object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
|
198
|
-
@object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
|
199
|
-
@object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
|
200
|
-
@object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
|
201
|
-
@object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
|
202
|
-
@object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
|
203
|
-
@object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
|
204
|
-
@object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
|
205
|
-
@object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
|
206
|
-
|
207
|
-
# Use ISO 8601 dates
|
208
|
-
@object_ds.event_date = "2012-11-11"
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should match an exmplar" do
|
212
|
-
# Load example deprecated_fixture
|
213
|
-
f = deprecated_fixture "pbcore_solr_digital_document_template.xml"
|
214
|
-
ref_node = Nokogiri::XML(f)
|
215
|
-
f.close
|
216
|
-
|
217
|
-
# Nokogiri-fy our sample document
|
218
|
-
sample_node = Nokogiri::XML(@object_ds.to_solr.to_xml)
|
219
|
-
|
220
|
-
# Save this for later...
|
221
|
-
out = File.new("tmp/pbcore_solr_digital_document_sample.xml", "w")
|
222
|
-
out.write(sample_node.to_s)
|
223
|
-
out.close
|
224
|
-
|
225
|
-
EquivalentXml.equivalent?(ref_node, sample_node, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
|
226
|
-
end
|
227
|
-
|
228
|
-
it "should display dates as they were entered" do
|
229
|
-
@object_ds.to_solr["event_date_display"].should == ["2012-11-11"]
|
230
|
-
end
|
231
|
-
|
232
|
-
it "should have dates converted to ISO 8601" do
|
233
|
-
@object_ds.to_solr["event_date_dt"].should == ["2012-11-11T00:00:00Z"]
|
234
|
-
end
|
235
|
-
|
236
|
-
it "should not index dates as text" do
|
237
|
-
@object_ds.to_solr["event_date_t"].should be_nil
|
238
|
-
end
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|
@@ -1,282 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe HydraPbcore::Datastream::Deprecated::Document do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@object_ds = HydraPbcore::Datastream::Deprecated::Document.new(nil, nil)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ".update_indexed_attributes" do
|
10
|
-
it "should update all of the fields in #xml_template and fields not requiring additional inserted nodes" do
|
11
|
-
[
|
12
|
-
[:pbc_id],
|
13
|
-
[:title],
|
14
|
-
[:alternative_title],
|
15
|
-
[:chapter],
|
16
|
-
[:episode],
|
17
|
-
[:label],
|
18
|
-
[:segment],
|
19
|
-
[:subtitle],
|
20
|
-
[:track],
|
21
|
-
[:translation],
|
22
|
-
[:summary],
|
23
|
-
[:contents],
|
24
|
-
[:lc_subject],
|
25
|
-
[:lc_name],
|
26
|
-
[:rh_subject],
|
27
|
-
[:getty_genre],
|
28
|
-
[:lc_genre],
|
29
|
-
[:lc_subject_genre],
|
30
|
-
[:series],
|
31
|
-
[:event_place],
|
32
|
-
[:contributor_name],
|
33
|
-
[:contributor_role],
|
34
|
-
[:publisher_name],
|
35
|
-
[:publisher_role],
|
36
|
-
[:note],
|
37
|
-
[:barcode],
|
38
|
-
[:repository],
|
39
|
-
[:media_format],
|
40
|
-
[:standard],
|
41
|
-
[:media_type],
|
42
|
-
[:generation],
|
43
|
-
[:language],
|
44
|
-
[:colors],
|
45
|
-
[:collection],
|
46
|
-
[:archival_series],
|
47
|
-
[:collection_number],
|
48
|
-
[:accession_number],
|
49
|
-
[:access],
|
50
|
-
[:condition_note],
|
51
|
-
[:cleaning_note]
|
52
|
-
].each do |pointer|
|
53
|
-
test_val = "#{pointer.last.to_s} value"
|
54
|
-
@object_ds.update_values( {pointer=>{"0"=>test_val}} )
|
55
|
-
@object_ds.get_values(pointer).first.should == test_val
|
56
|
-
@object_ds.get_values(pointer).length.should == 1
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should work for fields that require added xml nodes" do
|
61
|
-
@object_ds.insert_publisher
|
62
|
-
@object_ds.insert_contributor
|
63
|
-
[
|
64
|
-
[:publisher_name],
|
65
|
-
[:publisher_role],
|
66
|
-
[:contributor_name],
|
67
|
-
[:contributor_role]
|
68
|
-
].each do |pointer|
|
69
|
-
test_val = "#{pointer.last.to_s} value"
|
70
|
-
@object_ds.update_indexed_attributes( {pointer=>{"0"=>test_val}} )
|
71
|
-
@object_ds.get_values(pointer).first.should == test_val
|
72
|
-
@object_ds.get_values(pointer).length.should == 1
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should differentiate between multiple added nodes" do
|
77
|
-
@object_ds.insert_contributor
|
78
|
-
@object_ds.insert_contributor
|
79
|
-
@object_ds.update_indexed_attributes( {[:contributor_name] => { 0 => "first contributor" }} )
|
80
|
-
@object_ds.update_indexed_attributes( {[:contributor_name] => { 1 => "second contributor" }} )
|
81
|
-
@object_ds.update_indexed_attributes( {[:contributor_role] => { 0 => "first contributor role" }} )
|
82
|
-
@object_ds.update_indexed_attributes( {[:contributor_role] => { 1 => "second contributor role" }} )
|
83
|
-
@object_ds.get_values(:contributor).length.should == 2
|
84
|
-
@object_ds.get_values(:contributor_name)[0].should == "first contributor"
|
85
|
-
@object_ds.get_values(:contributor_name)[1].should == "second contributor"
|
86
|
-
@object_ds.get_values(:contributor_role)[0].should == "first contributor role"
|
87
|
-
@object_ds.get_values(:contributor_role)[1].should == "second contributor role"
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "#xml_template" do
|
93
|
-
it "should return an empty xml document matching a valid exmplar" do
|
94
|
-
# insert additional nodes
|
95
|
-
@object_ds.insert_publisher("inserted", "inserted")
|
96
|
-
@object_ds.insert_contributor("inserted", "inserted")
|
97
|
-
@object_ds.insert_publisher("inserted")
|
98
|
-
@object_ds.insert_contributor("inserted")
|
99
|
-
@object_ds.insert_contributor
|
100
|
-
|
101
|
-
# update additional nodes that OM will insert automatically
|
102
|
-
@object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
|
103
|
-
@object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
|
104
|
-
@object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
|
105
|
-
@object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
|
106
|
-
@object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
|
107
|
-
@object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
|
108
|
-
@object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
|
109
|
-
@object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
|
110
|
-
@object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
|
111
|
-
@object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
|
112
|
-
@object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
|
113
|
-
@object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
|
114
|
-
@object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
|
115
|
-
@object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
|
116
|
-
@object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
|
117
|
-
@object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
|
118
|
-
@object_ds.update_indexed_attributes({ [:condition_note] => { 0 => "inserted" }} )
|
119
|
-
@object_ds.update_indexed_attributes({ [:cleaning_note] => { 0 => "inserted" }} )
|
120
|
-
|
121
|
-
# Load example deprecated_fixture
|
122
|
-
f = deprecated_fixture "pbcore_document_template.xml"
|
123
|
-
ref_node = Nokogiri::XML(f)
|
124
|
-
f.close
|
125
|
-
|
126
|
-
# Nokogiri-fy our sample document and reorder nodes
|
127
|
-
sample_node = Nokogiri::XML(@object_ds.to_xml)
|
128
|
-
reordered = HydraPbcore::Behaviors.reorder_document(sample_node)
|
129
|
-
|
130
|
-
# Save this for later...
|
131
|
-
out = File.new("tmp/pbcore_document_sample.xml", "w")
|
132
|
-
out.write(reordered.to_s)
|
133
|
-
out.close
|
134
|
-
|
135
|
-
EquivalentXml.equivalent?(ref_node, reordered, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
|
136
|
-
HydraPbcore::Behaviors.validate(reordered).should be_empty
|
137
|
-
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
describe ".remove_node" do
|
142
|
-
it "should remove a node a given type and index" do
|
143
|
-
["publisher", "contributor"].each do |type|
|
144
|
-
@object_ds.send("insert_"+type)
|
145
|
-
@object_ds.send("insert_"+type)
|
146
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 2
|
147
|
-
@object_ds.remove_node(type.to_sym, "1")
|
148
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 1
|
149
|
-
@object_ds.remove_node(type.to_sym, "0")
|
150
|
-
@object_ds.find_by_terms(type.to_sym).count.should == 0
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
end
|
155
|
-
|
156
|
-
describe "default fields" do
|
157
|
-
|
158
|
-
it "such as media type should be 'Moving image'" do
|
159
|
-
@object_ds.get_values([:media_type]).first.should == "Moving image"
|
160
|
-
end
|
161
|
-
|
162
|
-
it "such as colors should be 'Color'" do
|
163
|
-
@object_ds.get_values([:colors]).first.should == "Color"
|
164
|
-
end
|
165
|
-
|
166
|
-
it "such as generation should be 'Original'" do
|
167
|
-
@object_ds.get_values([:generation]).first.should == "Original"
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
describe ".to_solr" do
|
173
|
-
|
174
|
-
before(:each) do
|
175
|
-
# insert additional nodes
|
176
|
-
@object_ds.insert_publisher
|
177
|
-
@object_ds.insert_contributor
|
178
|
-
[
|
179
|
-
"title",
|
180
|
-
"alternative_title",
|
181
|
-
"chapter",
|
182
|
-
"episode",
|
183
|
-
"label",
|
184
|
-
"segment",
|
185
|
-
"subtitle",
|
186
|
-
"track",
|
187
|
-
"translation",
|
188
|
-
"summary",
|
189
|
-
"contents",
|
190
|
-
"lc_subject",
|
191
|
-
"lc_name",
|
192
|
-
"rh_subject",
|
193
|
-
"getty_genre",
|
194
|
-
"lc_genre",
|
195
|
-
"lc_subject_genre",
|
196
|
-
"series",
|
197
|
-
"event_place",
|
198
|
-
"event_date",
|
199
|
-
"contributor_name",
|
200
|
-
"contributor_role",
|
201
|
-
"publisher_name",
|
202
|
-
"publisher_role",
|
203
|
-
"note",
|
204
|
-
"creation_date",
|
205
|
-
"barcode",
|
206
|
-
"repository",
|
207
|
-
"media_format",
|
208
|
-
"standard",
|
209
|
-
"media_type",
|
210
|
-
"generation",
|
211
|
-
"language",
|
212
|
-
"colors",
|
213
|
-
"collection",
|
214
|
-
"archival_series",
|
215
|
-
"collection_number",
|
216
|
-
"accession_number",
|
217
|
-
"access",
|
218
|
-
"condition_note",
|
219
|
-
"cleaning_note"
|
220
|
-
].each do |field|
|
221
|
-
@object_ds.send("#{field}=".to_sym, field)
|
222
|
-
end
|
223
|
-
# update additional nodes that OM will insert automatically
|
224
|
-
@object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
|
225
|
-
@object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
|
226
|
-
@object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
|
227
|
-
@object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
|
228
|
-
@object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
|
229
|
-
@object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
|
230
|
-
@object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
|
231
|
-
@object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
|
232
|
-
@object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
|
233
|
-
@object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
|
234
|
-
@object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
|
235
|
-
@object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
|
236
|
-
@object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
|
237
|
-
@object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
|
238
|
-
@object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
|
239
|
-
@object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
|
240
|
-
@object_ds.update_indexed_attributes({ [:condition_note] => { 0 => "inserted" }} )
|
241
|
-
@object_ds.update_indexed_attributes({ [:cleaning_note] => { 0 => "inserted" }} )
|
242
|
-
|
243
|
-
# Use ISO 8601 dates
|
244
|
-
@object_ds.event_date = "2012-11-11"
|
245
|
-
@object_ds.creation_date = "2012"
|
246
|
-
end
|
247
|
-
|
248
|
-
it "should match an exmplar" do
|
249
|
-
# Load example deprecated_fixture
|
250
|
-
f = deprecated_fixture "pbcore_solr_document_template.xml"
|
251
|
-
ref_node = Nokogiri::XML(f)
|
252
|
-
f.close
|
253
|
-
|
254
|
-
# Nokogiri-fy our sample document
|
255
|
-
sample_node = Nokogiri::XML(@object_ds.to_solr.to_xml)
|
256
|
-
|
257
|
-
# Save this for later...
|
258
|
-
out = File.new("tmp/pbcore_solr_document_sample.xml", "w")
|
259
|
-
out.write(sample_node.to_s)
|
260
|
-
out.close
|
261
|
-
|
262
|
-
EquivalentXml.equivalent?(ref_node, sample_node, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
|
263
|
-
end
|
264
|
-
|
265
|
-
it "should display dates as they were entered" do
|
266
|
-
@object_ds.to_solr["creation_date_display"].should == ["2012"]
|
267
|
-
@object_ds.to_solr["event_date_display"].should == ["2012-11-11"]
|
268
|
-
end
|
269
|
-
|
270
|
-
it "should have dates converted to ISO 8601" do
|
271
|
-
@object_ds.to_solr["creation_date_dt"].should == ["2012-01-01T00:00:00Z"]
|
272
|
-
@object_ds.to_solr["event_date_dt"].should == ["2012-11-11T00:00:00Z"]
|
273
|
-
end
|
274
|
-
|
275
|
-
it "should not index dates as text" do
|
276
|
-
@object_ds.to_solr["creation_date_t"].should be_nil
|
277
|
-
@object_ds.to_solr["event_date_t"].should be_nil
|
278
|
-
end
|
279
|
-
|
280
|
-
end
|
281
|
-
|
282
|
-
end
|