dor-services 5.0.0 → 5.0.1

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: 4fe796a095980fa5dde86937ecec282bed096a0e
4
- data.tar.gz: 6da19a0e7f1559941a5b8aef313c95a1c52b6f23
3
+ metadata.gz: f49ca049f1d4c644bc7e51811bc36562298ba729
4
+ data.tar.gz: 401af70a4012e11c8a26b8d9c0c3f871bd5b1a9e
5
5
  SHA512:
6
- metadata.gz: 1ed1230e8f639f2cbfd2314d7faddb190958b03776d61cf66fa469c56b20a9f2533b3d169bec669b9b98870a140f6237a3fefa07542ce4d5ac23a61c8d634b01
7
- data.tar.gz: b779592abbf39e09df3ad859b7b072794cb987a42522043190dbc7bffb5345004326c60cd27e660c8bed63c530be7b02cb615203e0f9c60c49ff95ee7294e631
6
+ metadata.gz: fd74c7ff789ae4e0e06f8dc29e8460501f64c8f765fee7addd406d61692fb7e83e037b5961a502a0d367a533dcecb112aea14a3e1e421128079b5862a22935b3
7
+ data.tar.gz: bcab2bbfdcd50f81c5465633d62b1c7b5d4d198f5ce5824f742a4e2f34fc48930783ff7dd30bdab006859e9b8c2c5b68b3a43a450bc72db1d6b449dc3d3b89c1
@@ -1,27 +1,33 @@
1
1
  module Dor
2
- class DescMetadataDS < ActiveFedora::OmDatastream
3
-
2
+ class DescMetadataDS < ActiveFedora::OmDatastream
3
+
4
4
  MODS_NS = 'http://www.loc.gov/mods/v3'
5
5
  set_terminology do |t|
6
6
  t.root :path => 'mods', :xmlns => MODS_NS, :index_as => [:not_searchable]
7
7
  t.originInfo :index_as => [:not_searchable] do
8
- t.publisher :index_as => [:searchable, :stored_searchable]
8
+ t.publisher :index_as => [:stored_searchable]
9
+ t.date_created :path => 'dateCreated', :index_as => [:stored_searchable]
9
10
  t.place :index_as => [:not_searchable] do
10
- t.placeTerm :attributes => {:type => 'text'}, :index_as => [:searchable, :stored_searchable]
11
+ t.placeTerm :attributes => {:type => 'text'}, :index_as => [:stored_searchable]
11
12
  end
12
13
  end
14
+ t.subject(:index_as => [:not_searchable]) do
15
+ t.geographic :index_as => [:stored_searchable]
16
+ t.topic :index_as => [:stored_searchable]
17
+ t.temporal :index_as => [:stored_searchable]
18
+ end
13
19
  t.title_info(:path=>"titleInfo") {
14
- t.main_title(:index_as=>[:facetable],:path=>"title", :label=>"title") {
15
- t.main_title_lang(:path=>{:attribute=> "xml:lang"})
16
- }
17
- }
20
+ t.main_title(:index_as=>[:facetable], :path=>"title", :label=>"title") {
21
+ t.main_title_lang(:path=>{:attribute=> "xml:lang"})
22
+ }
23
+ }
18
24
  t.coordinates :index_as => [:searchable]
19
25
  t.extent :index_as => [:searchable]
20
26
  t.scale :index_as => [:searchable]
21
- t.topic :index_as => [:searchable]
22
- t.abstract :index_as => [:displayable]
27
+ t.topic :index_as => [:stored_searchable]
28
+ t.abstract :index_as => [:stored_searchable]
23
29
  end
24
-
30
+
25
31
  def self.xml_template
26
32
  Nokogiri::XML::Builder.new do |xml|
27
33
  xml.mods( 'xmlns' => 'http://www.loc.gov/mods/v3', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',:version => '3.3', "xsi:schemaLocation" => 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd'){
@@ -85,9 +85,9 @@ class IdentityMetadataDS < ActiveFedora::OmDatastream
85
85
  if digital_object.respond_to?(:profile)
86
86
  digital_object.profile.each_pair do |property,value|
87
87
  if property =~ /Date/
88
- add_solr_value(solr_doc, property.underscore, Time.parse(value).utc.xmlschema, :date, [:searchable, :stored_searchable])
88
+ add_solr_value(solr_doc, property.underscore, Time.parse(value).utc.xmlschema, :date, [:stored_searchable])
89
89
  else
90
- add_solr_value(solr_doc, property.underscore, value, :string, [:searchable, :stored_searchable])
90
+ add_solr_value(solr_doc, property.underscore, value, :string, [:stored_searchable])
91
91
  end
92
92
  end
93
93
  end
@@ -12,6 +12,18 @@ module Dor
12
12
  has_metadata :name => "descMetadata", :type => Dor::DescMetadataDS, :label => 'Descriptive Metadata', :control_group => 'M'
13
13
  end
14
14
 
15
+ require 'stanford-mods/searchworks'
16
+
17
+ # intended for read-access, "as SearchWorks would see it", mostly for to_solr()
18
+ # @param [Nokogiri::XML::Document] content Nokogiri descMetadata document (overriding internal data)
19
+ # @param [boolean] ns_aware namespace awareness toggle for from_nk_node()
20
+ def stanford_mods(content=nil, ns_aware=true)
21
+ m = Stanford::Mods::Record.new
22
+ desc = content.nil? ? self.descMetadata.ng_xml : content
23
+ m.from_nk_node(desc.root, ns_aware)
24
+ m
25
+ end
26
+
15
27
  def fetch_descMetadata_datastream
16
28
  candidates = self.datastreams['identityMetadata'].otherId.collect { |oid| oid.to_s }
17
29
  metadata_id = Dor::MetadataService.resolvable(candidates).first
@@ -145,7 +157,13 @@ module Dor
145
157
 
146
158
  def to_solr(solr_doc=Hash.new, *args)
147
159
  super solr_doc, *args
148
- add_solr_value(solr_doc, "metadata_format", self.metadata_format, :string, [:symbol, :searchable, :facetable])
160
+ # initialize multivalue targts if necessary
161
+ %w[ metadata_format_ssim sw_language_tesim sw_genre_tesim sw_format_tesim
162
+ sw_subject_temporal_tesim sw_subject_geographic_tesim mods_typeOfResource_tesim].each { |key|
163
+ solr_doc[key] ||= []
164
+ }
165
+
166
+ solr_doc["metadata_format_ssim"] << self.metadata_format
149
167
  begin
150
168
  dc_doc = self.generate_dublin_core
151
169
  dc_doc.xpath('/oai_dc:dc/*').each do |node|
@@ -164,8 +182,29 @@ module Dor
164
182
  rescue CrosswalkError => e
165
183
  ActiveFedora.logger.warn "Cannot index #{self.pid}.descMetadata: #{e.message}"
166
184
  end
185
+
186
+ begin
187
+ mods = self.stanford_mods
188
+ sources = {
189
+ 'sw_language_tesim' => :sw_language_facet,
190
+ 'sw_genre_tesim' => :sw_genre,
191
+ 'sw_format_tesim' => :format_main, # basically sw_typeOfResource_tesim
192
+ 'sw_subject_temporal_tesim' => :era_facet,
193
+ 'sw_subject_geographic_tesim' => :geographic_facet,
194
+ 'mods_typeOfResource_tesim' => [:term_values, :typeOfResource]
195
+ }
196
+ sources.each_pair do |solr_key, meth|
197
+ vals = meth.is_a?(Array) ? mods.send(meth.shift, *meth) : mods.send(meth)
198
+ solr_doc[solr_key].push *vals unless (vals.nil? || vals.empty?)
199
+ # asterisk to avoid multi-dimensional array: push values, not the array
200
+ end
201
+ solr_doc['sw_pub_date_sort_ssi'] = mods.pub_date_sort
202
+ end
203
+ # some fields get explicit "(none)" placeholder values, mostly for faceting
204
+ %w[sw_language_tesim sw_genre_tesim sw_format_tesim].each { |key| solr_doc[key] = ['(none)'] if solr_doc[key].empty? }
167
205
  solr_doc
168
206
  end
207
+
169
208
  def update_title(new_title)
170
209
  if not update_simple_field('mods:mods/mods:titleInfo/mods:title',new_title)
171
210
  raise 'Descriptive metadata has no title to update!'
@@ -194,7 +233,7 @@ module Dor
194
233
  def set_desc_metadata_using_label(force=false)
195
234
  ds=self.descMetadata
196
235
  unless force || ds.new?
197
- raise 'Cannot proceed, there is already content in the descriptive metadata datastream.'+ds.content.to_s
236
+ raise 'Cannot proceed, there is already content in the descriptive metadata datastream: '+ds.content.to_s
198
237
  end
199
238
  label=self.label
200
239
  builder = Nokogiri::XML::Builder.new { |xml|
@@ -214,9 +253,7 @@ module Dor
214
253
  if(title_node)
215
254
  title = title_node.content
216
255
  subtitle=xml.at_xpath('//mods:mods/mods:titleInfo/mods:subTitle','mods' => 'http://www.loc.gov/mods/v3')
217
- if(subtitle)
218
- title += ' (' + subtitle.content + ')'
219
- end
256
+ title += " (#{subtitle.content})" if subtitle
220
257
  end
221
258
  title
222
259
  end
@@ -181,17 +181,16 @@ module Dor
181
181
  sortable_milestones.each do |milestone, unordered_dates|
182
182
  dates = unordered_dates.sort
183
183
  #create the published_dt and published_day fields and the like
184
- add_solr_value(solr_doc, milestone+'_day', DateTime.parse(dates.last).beginning_of_day.utc.xmlschema.split('T').first, :string, [:searchable, :stored_searchable, :facetable])
185
- add_solr_value(solr_doc, milestone, dates.first, :date, [:searchable, :facetable, :stored_searchable])
184
+ add_solr_value(solr_doc, milestone+'_day', DateTime.parse(dates.last).beginning_of_day.utc.xmlschema.split('T').first, :string, [:stored_searchable, :facetable])
185
+ add_solr_value(solr_doc, milestone, dates.first, :date, [:stored_searchable, :facetable])
186
186
 
187
187
  #fields for OAI havester to sort on
188
188
  add_solr_value(solr_doc, "#{milestone}_earliest_dt", dates.first, :date, [:sortable])
189
- add_solr_value(solr_doc, "#{milestone}_latest_dt", dates.last, :date, [:sortable])
189
+ add_solr_value(solr_doc, "#{milestone}_latest_dt", dates.last, :date, [:sortable])
190
190
 
191
191
  #for future faceting
192
192
  add_solr_value(solr_doc, "#{milestone}_earliest", dates.first, :date, [:searchable, :facetable])
193
- add_solr_value(solr_doc, "#{milestone}_latest", dates.last, :date, [ :searchable, :facetable])
194
-
193
+ add_solr_value(solr_doc, "#{milestone}_latest", dates.last, :date, [:searchable, :facetable])
195
194
  end
196
195
  add_solr_value(solr_doc,"status",status,:string, [:displayable])
197
196
 
@@ -24,7 +24,6 @@ module Dor
24
24
  raise Dor::Exception, 'Object already opened for versioning' if(new_version_open?)
25
25
  raise Dor::Exception, 'Object currently being accessioned' if(Dor::WorkflowService.get_active_lifecycle('dor', pid, 'submitted'))
26
26
 
27
-
28
27
  vmd_ds = datastreams['versionMetadata']
29
28
  vmd_ds.increment_version
30
29
  vmd_ds.content = vmd_ds.ng_xml.to_s
@@ -81,7 +80,7 @@ module Dor
81
80
 
82
81
  # @return [Boolean] true if the object is in a state that allows it to be modified. States that will allow modification are: has not been submitted for accessioning, has an open version or has sdr-ingest set to hold
83
82
  def allows_modification?
84
- if Dor::WorkflowService.get_lifecycle('dor', pid, 'submitted' ) and not new_version_open? and not Dor::WorkflowService.get_workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer')=='hold'
83
+ if Dor::WorkflowService.get_lifecycle('dor', pid, 'submitted') && ! new_version_open? && Dor::WorkflowService.get_workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer')!='hold'
85
84
  false
86
85
  else
87
86
  true
@@ -1,3 +1,3 @@
1
1
  module Dor
2
- VERSION = '5.0.0'
2
+ VERSION = '5.0.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Klein
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-02-21 00:00:00.000000000 Z
15
+ date: 2015-03-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: active-fedora
@@ -384,6 +384,20 @@ dependencies:
384
384
  - - "~>"
385
385
  - !ruby/object:Gem::Version
386
386
  version: 1.4.4
387
+ - !ruby/object:Gem::Dependency
388
+ name: stanford-mods
389
+ requirement: !ruby/object:Gem::Requirement
390
+ requirements:
391
+ - - "~>"
392
+ - !ruby/object:Gem::Version
393
+ version: '1.1'
394
+ type: :runtime
395
+ prerelease: false
396
+ version_requirements: !ruby/object:Gem::Requirement
397
+ requirements:
398
+ - - "~>"
399
+ - !ruby/object:Gem::Version
400
+ version: '1.1'
387
401
  - !ruby/object:Gem::Dependency
388
402
  name: awesome_print
389
403
  requirement: !ruby/object:Gem::Requirement