spotlight-dor-resources 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51c2413bf267fceeaae2eb498ad5c81b44c40877
4
- data.tar.gz: f4f60e931737ebc840ad61f7b7fb1d272dd106b5
3
+ metadata.gz: 802c000f217f5bffac45eeb8cd3622426f952c2b
4
+ data.tar.gz: b14c29105325cb00da514397812df7a5c333e14e
5
5
  SHA512:
6
- metadata.gz: b7d71a1624eaad421bd9784b35db016cfa972df641aabe2be42c780b611a5dc35b90d5777e42337a935bd9c397d79a9cf5ed46aa6e1fd4545cbd3d3e1f3fbb9b
7
- data.tar.gz: b68375cd5b0793f4f035ce79007175468e9368c373001a968940a366982f5dcb71888f14f27720ba65b1467d894d889e290c93e822c394d0ceaf29df1359b85f
6
+ metadata.gz: 1f3834e96cdbb9edf59100b3bb782af5731d51151eaa7e55363ae617267fc1a937744eb84e9299e58c2192ef2fed1403c875b8740e25dc1ad8c9dbc5eb01f06d
7
+ data.tar.gz: 0f24b3fccaa36d56e215f1f8bd4582971e371f7194976691f545d449ae55b77fb457fc6b23851ce47a19e14777acfaa7a05e5024e83beaeb592c5eddd3905123
@@ -9,29 +9,45 @@ require 'faraday'
9
9
  module Spotlight::Dor
10
10
  # Base class to harvest from DOR via harvestdor gem
11
11
  class Indexer < GDor::Indexer
12
- # tweak author_sort field from stanford-mods
13
- before_index do |_sdb, solr_doc|
14
- solr_doc[:author_sort] &&= solr_doc[:author_sort].tr("\uFFFF", "\uFFFD")
12
+ def resource(druid)
13
+ Harvestdor::Indexer::Resource.new harvestdor, druid
15
14
  end
16
15
 
17
- # add fields from raw mods
18
- before_index :add_genre
19
-
20
16
  def solr_document(resource)
21
17
  doc_hash = super
22
18
  run_hook :before_index, resource, doc_hash
23
19
  doc_hash
24
20
  end
25
21
 
26
- def resource(druid)
27
- Harvestdor::Indexer::Resource.new harvestdor, druid
22
+ # tweak author_sort field from stanford-mods
23
+ before_index do |_sdb, solr_doc|
24
+ solr_doc[:author_sort] &&= solr_doc[:author_sort].tr("\uFFFF", "\uFFFD")
28
25
  end
29
26
 
30
27
  private
31
28
 
32
- # add plain MODS <genre> element data, not the SearchWorks genre values
33
- def add_genre(sdb, solr_doc)
34
- insert_field solr_doc, 'genre', sdb.smods_rec.genre.content, :symbol # this is a _ssim field
29
+ concerning :StanfordMods do
30
+ included do
31
+ before_index :add_author_no_collector
32
+ before_index :add_collector
33
+ before_index :add_genre
34
+ end
35
+
36
+ # add author_no_collector_ssim solr field containing the person authors, excluding collectors
37
+ # (via stanford-mods gem)
38
+ def add_author_no_collector(sdb, solr_doc)
39
+ insert_field solr_doc, 'author_no_collector', sdb.smods_rec.non_collector_person_authors, :symbol # _ssim field
40
+ end
41
+
42
+ # add collector_ssim solr field containing the collector per MODS names (via stanford-mods gem)
43
+ def add_collector(sdb, solr_doc)
44
+ insert_field solr_doc, 'collector', sdb.smods_rec.collectors_w_dates, :symbol # _ssim field
45
+ end
46
+
47
+ # add plain MODS <genre> element data, not the SearchWorks genre values
48
+ def add_genre(sdb, solr_doc)
49
+ insert_field solr_doc, 'genre', sdb.smods_rec.genre.content, :symbol # this is a _ssim field
50
+ end
35
51
  end
36
52
 
37
53
  concerning :PhysicalLocation do
@@ -2,7 +2,7 @@ module Spotlight
2
2
  module Dor
3
3
  # :nodoc:
4
4
  module Resources
5
- VERSION = '0.2.3'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
8
8
  end
@@ -151,37 +151,99 @@ describe Spotlight::Dor::Indexer do
151
151
  end
152
152
  end
153
153
 
154
- describe '#add_genre' do
155
- before do
156
- allow(r).to receive(:mods).and_return(mods)
157
- subject.send(:add_genre, sdb, solr_doc)
158
- end
159
-
160
- context 'with a record without a genre' do
154
+ context 'StanfordMods concern' do
155
+ describe '#add_author_no_collector' do
156
+ before do
157
+ allow(r).to receive(:mods).and_return(mods)
158
+ subject.send(:add_author_no_collector, sdb, solr_doc)
159
+ end
160
+ let(:name) { 'Macro Hamster' }
161
161
  let(:mods) do
162
162
  Nokogiri::XML <<-EOF
163
163
  <mods xmlns="#{Mods::MODS_NS}">
164
+ <name type="personal">
165
+ <namePart>#{name}</namePart>
166
+ <role>
167
+ <roleTerm type="code" authority="marcrelator">cre</roleTerm>
168
+ </role>
169
+ </name>
170
+ <name type="personal">
171
+ <namePart>Ignored</namePart>
172
+ <role>
173
+ <roleTerm type="code" authority="marcrelator">col</roleTerm>
174
+ </role>
175
+ </name>
164
176
  </mods>
165
177
  EOF
166
178
  end
167
-
168
- it 'is blank' do
169
- expect(solr_doc['genre_ssim']).to be_blank
179
+ it 'populates author_no_collector_ssim field in solr doc' do
180
+ expect(solr_doc['author_no_collector_ssim']).to eq [name]
181
+ end
182
+ it 'calls non_collector_person_authors on Stanford::Mods::Record object' do
183
+ expect(sdb.smods_rec).to receive(:non_collector_person_authors)
184
+ subject.send(:add_author_no_collector, sdb, solr_doc)
170
185
  end
171
186
  end
172
187
 
173
- context 'with a record with a genre' do
188
+ describe '#add_collector' do
189
+ before do
190
+ allow(r).to receive(:mods).and_return(mods)
191
+ subject.send(:add_collector, sdb, solr_doc)
192
+ end
193
+ let(:name) { 'Macro Hamster' }
174
194
  let(:mods) do
175
- # e.g. from https://purl.stanford.edu/vw282gv1740
176
195
  Nokogiri::XML <<-EOF
177
196
  <mods xmlns="#{Mods::MODS_NS}">
178
- <genre authority="aat" valueURI="http://vocab.getty.edu/aat/300028579">manuscripts for publication</genre>
197
+ <name type="personal">
198
+ <namePart>#{name}</namePart>
199
+ <role>
200
+ <roleTerm type="code" authority="marcrelator">col</roleTerm>
201
+ </role>
202
+ </name>
179
203
  </mods>
180
204
  EOF
181
205
  end
206
+ it 'populates collector_ssim field in solr doc' do
207
+ expect(solr_doc['collector_ssim']).to eq [name]
208
+ end
209
+ it 'calls collectors_w_dates on Stanford::Mods::Record object' do
210
+ expect(sdb.smods_rec).to receive(:collectors_w_dates)
211
+ subject.send(:add_collector, sdb, solr_doc)
212
+ end
213
+ end
214
+
215
+ describe '#add_genre' do
216
+ before do
217
+ allow(r).to receive(:mods).and_return(mods)
218
+ subject.send(:add_genre, sdb, solr_doc)
219
+ end
182
220
 
183
- it 'extracts the genre' do
184
- expect(solr_doc['genre_ssim']).to contain_exactly 'manuscripts for publication'
221
+ context 'with a record without a genre' do
222
+ let(:mods) do
223
+ Nokogiri::XML <<-EOF
224
+ <mods xmlns="#{Mods::MODS_NS}">
225
+ </mods>
226
+ EOF
227
+ end
228
+
229
+ it 'is blank' do
230
+ expect(solr_doc['genre_ssim']).to be_blank
231
+ end
232
+ end
233
+
234
+ context 'with a record with a genre' do
235
+ let(:mods) do
236
+ # e.g. from https://purl.stanford.edu/vw282gv1740
237
+ Nokogiri::XML <<-EOF
238
+ <mods xmlns="#{Mods::MODS_NS}">
239
+ <genre authority="aat" valueURI="http://vocab.getty.edu/aat/300028579">manuscripts for publication</genre>
240
+ </mods>
241
+ EOF
242
+ end
243
+
244
+ it 'extracts the genre' do
245
+ expect(solr_doc['genre_ssim']).to contain_exactly 'manuscripts for publication'
246
+ end
185
247
  end
186
248
  end
187
249
  end
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'faraday'
24
24
  spec.add_dependency 'solrizer'
25
+ spec.add_dependency 'stanford-mods', '>= 1.2.0' # includes new person facets
25
26
  spec.add_dependency 'gdor-indexer'
26
27
  # newer versions of harvestdor-indexer have performance improvements for collections
27
28
  spec.add_dependency 'harvestdor-indexer', '~> 2.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spotlight-dor-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-16 00:00:00.000000000 Z
11
+ date: 2015-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: stanford-mods
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: gdor-indexer
43
57
  requirement: !ruby/object:Gem::Requirement