spotlight-dor-resources 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31130b0ef44659b04e226ce3f7d54afeb2fab9bd
4
- data.tar.gz: 773201c4913261fb010cbd06a7bd027fb550acc1
3
+ metadata.gz: 5b035c7c9d1aa81f28332f8304294beb43a960ab
4
+ data.tar.gz: 1658a13bf5ff55aa7f0d67cf7770c89e17648f2d
5
5
  SHA512:
6
- metadata.gz: dd69ded57b4a0daaa03b544218a95edb3b23a503ae54c56274f7f8cc06bb8949120f19af29b9047b81d743914dd2e601fbeb5b4a133edfe2718084457290a096
7
- data.tar.gz: 90f34128fd6494c255f69f9cf4b430cdae7c060618ba648e99a982c3fdfdf2d41ade20b73d6febe48a8eae46b7dbf5823996b5469e25b756340a84fb217a2f04
6
+ metadata.gz: fa6d70d3f6530b159e9bec06a3c8b2219bb836a5a3608d291c047ae7d405d653ccf02d0f4b028523a0a942848d1b9cd2070fe42cd28e786496a8059c670c28df
7
+ data.tar.gz: a99351ec2d515332d76582c6b178be12021834c499d3725225b2cf2727871dd794c800a913dd87a40091cf807b76145489797cddf00ad04b1f7f97209c04ec03
@@ -1,17 +1,47 @@
1
1
  module Spotlight::Resources
2
2
  class DorResource < Spotlight::Resource
3
+ ##
4
+ # Generate solr documents for the DOR resources identified by this object
5
+ #
6
+ # @return [Enumerator] an enumerator of solr document hashes for indexing
3
7
  def to_solr
4
8
  return to_enum :to_solr unless block_given?
5
9
 
6
10
  base_doc = super
7
11
 
8
- [resource, (resource.items if resource.collection?)].flatten.compact.each do |res|
9
- yield base_doc.merge(Spotlight::Dor::Resources.indexer.solr_document(res))
12
+ indexable_resources.each do |res|
13
+ yield base_doc.merge(to_solr_document(res))
10
14
  end
11
15
  end
12
16
 
13
17
  def resource
14
18
  @resource ||= Spotlight::Dor::Resources.indexer.resource doc_id
15
19
  end
20
+
21
+ private
22
+
23
+ ##
24
+ # Enumerate the resource, and any collection members, that should be indexed
25
+ # into this exhibit
26
+ #
27
+ # @return [Enumerator] an enumerator of resources to index
28
+ def indexable_resources
29
+ return to_enum(:indexable_resources) unless block_given?
30
+
31
+ yield resource
32
+
33
+ resource.items.each do |r|
34
+ yield r
35
+ end
36
+ end
37
+
38
+ ##
39
+ # Generate the solr document hash for a given resource by applying the current
40
+ # indexer steps.
41
+ #
42
+ # @return [Hash]
43
+ def to_solr_document(resource)
44
+ Spotlight::Dor::Resources.indexer.solr_document(resource)
45
+ end
16
46
  end
17
47
  end
@@ -67,8 +67,9 @@ module Spotlight::Dor
67
67
  # note that this will also find Flatbox or Flat-box
68
68
  match_data = val.match(/Box ?:? ?([^,|(Folder)]+)/i)
69
69
  match_data[1].strip if match_data.present?
70
- end
71
- solr_doc['box_ssi'] = box_num.first if box_num.present?
70
+ end.compact
71
+
72
+ solr_doc['box_ssi'] = box_num.first
72
73
  end
73
74
 
74
75
  # This new donor_tags_sim field was added in October 2015 specifically for the Feigenbaum exhibit. It is very likely
@@ -97,9 +98,9 @@ module Spotlight::Dor
97
98
  end
98
99
 
99
100
  match_data[1].strip if match_data.present?
100
- end
101
+ end.compact
101
102
 
102
- solr_doc['folder_ssi'] = folder_num.first if folder_num.present?
103
+ solr_doc['folder_ssi'] = folder_num.first
103
104
  end
104
105
 
105
106
  # add the folder name to solr_doc as folder_name_ssi field (note: single valued!)
@@ -127,8 +128,9 @@ module Spotlight::Dor
127
128
  # feigenbaum uses 'Accession'
128
129
  match_data = val.match(/(?:(?:Series)|(?:Accession)):? ([^,|]+)/i)
129
130
  match_data[1].strip if match_data.present?
130
- end
131
- solr_doc['series_ssi'] = series_num.first if series_num.present?
131
+ end.compact
132
+
133
+ solr_doc['series_ssi'] = series_num.first
132
134
  end
133
135
 
134
136
  # rubocop:disable Metrics/AbcSize
@@ -1,7 +1,7 @@
1
1
  module Spotlight
2
2
  module Dor
3
3
  module Resources
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
6
6
  end
7
7
  end
@@ -28,6 +28,17 @@ describe Spotlight::Dor::Indexer do
28
28
  EOF
29
29
  end
30
30
 
31
+ let(:mods_loc_multiple_phys_loc) do
32
+ Nokogiri::XML <<-EOF
33
+ <mods xmlns="#{Mods::MODS_NS}">
34
+ <location>
35
+ <physicalLocation>Irrelevant Data</physicalLocation>
36
+ <physicalLocation>#{example}</physicalLocation>
37
+ </location>
38
+ </mods>
39
+ EOF
40
+ end
41
+
31
42
  before do
32
43
  # ignore noisy logs
33
44
  allow(r).to receive(:harvestdor_client)
@@ -86,6 +97,15 @@ describe Spotlight::Dor::Indexer do
86
97
  expect(solr_doc['series_ssi']).to eq expected
87
98
  end
88
99
  end
100
+ context 'with multiple physicalLocation elements' do
101
+ before do
102
+ allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
103
+ subject.send(:add_series, sdb, solr_doc)
104
+ end
105
+ it "has the expected series name '#{expected}'" do
106
+ expect(solr_doc['series_ssi']).to eq expected
107
+ end
108
+ end
89
109
  end # for example
90
110
  end # each
91
111
  end # add_series
@@ -140,6 +160,16 @@ describe Spotlight::Dor::Indexer do
140
160
  expect(solr_doc['box_ssi']).to eq expected
141
161
  end
142
162
  end
163
+
164
+ context 'with multiple physicalLocation elements' do
165
+ before do
166
+ allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
167
+ subject.send(:add_box, sdb, solr_doc)
168
+ end
169
+ it "has the expected series name '#{expected}'" do
170
+ expect(solr_doc['box_ssi']).to eq expected
171
+ end
172
+ end
143
173
  end # for example
144
174
  end # each
145
175
  end # add_box
@@ -196,6 +226,16 @@ describe Spotlight::Dor::Indexer do
196
226
  expect(solr_doc['folder_ssi']).to eq expected
197
227
  end
198
228
  end
229
+
230
+ context 'with multiple physicalLocation elements' do
231
+ before do
232
+ allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
233
+ subject.send(:add_folder, sdb, solr_doc)
234
+ end
235
+ it "has the expected series name '#{expected}'" do
236
+ expect(solr_doc['folder_ssi']).to eq expected
237
+ end
238
+ end
199
239
  end # for example
200
240
  end # each
201
241
  end # add_folder
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_dependency "faraday"
21
21
  spec.add_dependency 'solrizer'
22
22
  spec.add_dependency 'gdor-indexer'
23
+ spec.add_dependency 'harvestdor-indexer', '>= 2.2.0' # 2.2.0 introduced enumerable collections
23
24
  spec.add_dependency "rails"
24
25
  spec.add_dependency "blacklight-spotlight", "~> 0.5"
25
26
  spec.add_development_dependency "bundler", "~> 1.5"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spotlight-dor-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: harvestdor-indexer
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2.2.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 2.2.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rails
57
71
  requirement: !ruby/object:Gem::Requirement