dor-services 5.1.1 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +8 -8
  2. data/lib/dor-services.rb +1 -2
  3. data/lib/dor/config.rb +5 -6
  4. data/lib/dor/datastreams/content_metadata_ds.rb +17 -20
  5. data/lib/dor/datastreams/datastream_spec_solrizer.rb +1 -1
  6. data/lib/dor/datastreams/desc_metadata_ds.rb +7 -7
  7. data/lib/dor/datastreams/embargo_metadata_ds.rb +2 -7
  8. data/lib/dor/datastreams/events_ds.rb +9 -9
  9. data/lib/dor/datastreams/identity_metadata_ds.rb +29 -34
  10. data/lib/dor/datastreams/rights_metadata_ds.rb +1 -1
  11. data/lib/dor/datastreams/role_metadata_ds.rb +0 -1
  12. data/lib/dor/datastreams/simple_dublin_core_ds.rb +12 -13
  13. data/lib/dor/datastreams/version_metadata_ds.rb +11 -15
  14. data/lib/dor/datastreams/workflow_definition_ds.rb +18 -22
  15. data/lib/dor/datastreams/workflow_ds.rb +24 -36
  16. data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +1 -1
  17. data/lib/dor/migrations/identifiable/fix_model_assertions.rb +1 -1
  18. data/lib/dor/migrations/identifiable/record_remediation.rb +2 -2
  19. data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +1 -1
  20. data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +1 -1
  21. data/lib/dor/migrations/processable/unify_workflows.rb +4 -4
  22. data/lib/dor/migrations/versionable/add_missing_version_md.rb +2 -2
  23. data/lib/dor/models/assembleable.rb +2 -2
  24. data/lib/dor/models/collection.rb +1 -0
  25. data/lib/dor/models/contentable.rb +3 -3
  26. data/lib/dor/models/describable.rb +16 -13
  27. data/lib/dor/models/editable.rb +3 -3
  28. data/lib/dor/models/embargoable.rb +2 -2
  29. data/lib/dor/models/eventable.rb +2 -2
  30. data/lib/dor/models/geoable.rb +14 -18
  31. data/lib/dor/models/governable.rb +1 -1
  32. data/lib/dor/models/identifiable.rb +36 -57
  33. data/lib/dor/models/itemizable.rb +6 -6
  34. data/lib/dor/models/presentable.rb +12 -12
  35. data/lib/dor/models/preservable.rb +2 -5
  36. data/lib/dor/models/processable.rb +19 -25
  37. data/lib/dor/models/publishable.rb +2 -2
  38. data/lib/dor/models/releaseable.rb +165 -212
  39. data/lib/dor/models/shelvable.rb +10 -14
  40. data/lib/dor/models/upgradable.rb +11 -11
  41. data/lib/dor/models/versionable.rb +16 -21
  42. data/lib/dor/models/workflow_object.rb +3 -3
  43. data/lib/dor/services/cleanup_reset_service.rb +32 -27
  44. data/lib/dor/services/digital_stacks_service.rb +3 -3
  45. data/lib/dor/services/merge_service.rb +4 -8
  46. data/lib/dor/services/metadata_handlers/catalog_handler.rb +1 -1
  47. data/lib/dor/services/metadata_handlers/mdtoolkit_handler.rb +4 -6
  48. data/lib/dor/services/metadata_service.rb +20 -22
  49. data/lib/dor/services/registration_service.rb +6 -8
  50. data/lib/dor/services/reset_workspace_service.rb +14 -16
  51. data/lib/dor/services/sdr_ingest_service.rb +2 -6
  52. data/lib/dor/services/search_service.rb +3 -3
  53. data/lib/dor/services/suri_service.rb +2 -3
  54. data/lib/dor/services/technical_metadata_service.rb +2 -3
  55. data/lib/dor/utils/ng_tidy.rb +6 -6
  56. data/lib/dor/utils/predicate_patch.rb +1 -1
  57. data/lib/dor/utils/solr_doc_helper.rb +2 -2
  58. data/lib/dor/version.rb +1 -1
  59. data/lib/dor/workflow/document.rb +27 -33
  60. data/lib/dor/workflow/graph.rb +34 -37
  61. data/lib/dor/workflow/process.rb +8 -8
  62. data/lib/tasks/rdoc.rake +5 -5
  63. metadata +4 -11
  64. data/bin/dor-indexer +0 -108
  65. data/bin/dor-indexerd +0 -73
  66. data/config/certs/robots-dor-dev.crt +0 -29
  67. data/config/certs/robots-dor-dev.key +0 -27
  68. data/config/dev_console_env.rb +0 -78
@@ -15,9 +15,7 @@ module Dor
15
15
 
16
16
  # @param [String] raw_tag the value of the tag attribute from a Version node
17
17
  def self.parse(raw_tag)
18
- unless(raw_tag =~ /(\d+)\.(\d+)\.(\d+)/)
19
- return nil
20
- end
18
+ return nil unless raw_tag =~ /(\d+)\.(\d+)\.(\d+)/
21
19
  VersionTag.new $1, $2, $3
22
20
  end
23
21
 
@@ -45,7 +43,7 @@ module Dor
45
43
  end
46
44
 
47
45
  def to_s
48
- "#{@major.to_s}.#{@minor.to_s}.#{admin.to_s}"
46
+ "#{@major}.#{@minor}.#{admin}"
49
47
  end
50
48
  end
51
49
 
@@ -81,7 +79,7 @@ module Dor
81
79
  # @param [Symbol] significance optional which part of the version tag to increment
82
80
  # :major, :minor, :admin (see VersionTag#increment)
83
81
  def increment_version(description = nil, significance = nil)
84
- if( find_by_terms(:version).size == 0)
82
+ if ( find_by_terms(:version).size == 0)
85
83
  v = ng_xml.create_element "version",
86
84
  :versionId => '1', :tag => '1.0.0'
87
85
  d = ng_xml.create_element "description", "Initial Version"
@@ -94,13 +92,13 @@ module Dor
94
92
  current_tag = VersionTag.parse(current[:tag])
95
93
 
96
94
  v = ng_xml.create_element "version", :versionId => (current_id + 1).to_s
97
- if(significance && current_tag)
95
+ if significance && current_tag
98
96
  v[:tag] = current_tag.increment(significance).to_s
99
97
  end
100
98
  ng_xml.root['objectId'] = pid
101
99
  ng_xml.root.add_child(v)
102
100
 
103
- if(description)
101
+ if description
104
102
  d = ng_xml.create_element "description", description
105
103
  v.add_child d
106
104
  end
@@ -126,18 +124,18 @@ module Dor
126
124
  return if find_by_terms(:version).size == 1
127
125
  return if opts.empty?
128
126
  current = current_version_node
129
- if(opts.include? :description)
127
+ if opts.include? :description
130
128
  d = current.at_xpath('description')
131
- if(d)
129
+ if d
132
130
  d.content = opts[:description]
133
131
  else
134
132
  d_node = ng_xml.create_element "description", opts[:description]
135
133
  current.add_child d_node
136
134
  end
137
135
  end
138
- if(opts.include? :significance)
136
+ if opts.include? :significance
139
137
  # tricky because if there is no tag, we have to find the newest
140
- if(current[:tag].nil?)
138
+ if current[:tag].nil?
141
139
  current[:tag] = newest_tag.increment(opts[:significance]).to_s
142
140
  else
143
141
  # get rid of the current tag
@@ -154,7 +152,7 @@ module Dor
154
152
  # @return [Boolean] returns true if the current version has a tag and a description, false otherwise
155
153
  def current_version_closeable?
156
154
  current = current_version_node
157
- if(current[:tag] && current.at_xpath('description'))
155
+ if current[:tag] && current.at_xpath('description')
158
156
  return true
159
157
  else
160
158
  return false
@@ -188,9 +186,7 @@ module Dor
188
186
  # @return [String] The description for the current version
189
187
  def current_description
190
188
  desc_node=current_version_node.at_xpath('description')
191
- if desc_node
192
- return desc_node.content
193
- end
189
+ return desc_node.content if desc_node
194
190
  ''
195
191
  end
196
192
 
@@ -1,17 +1,15 @@
1
1
  module Dor
2
- class WorkflowDefinitionDs < ActiveFedora::OmDatastream
2
+ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
3
3
  include SolrDocHelper
4
-
4
+
5
5
  set_terminology do |t|
6
6
  t.root(:path => "workflow-def", :index_as => [:not_searchable])
7
7
  t.process(:index_as => [:not_searchable])
8
8
  end
9
-
9
+
10
10
  define_template :process do |builder,workflow,attrs|
11
11
  prereqs = attrs.delete('prerequisite')
12
- if prereqs.is_a?(String)
13
- prereqs = prereqs.split(/\s*,\s*/)
14
- end
12
+ prereqs = prereqs.split(/\s*,\s*/) if prereqs.is_a?(String)
15
13
  attrs.keys.each { |k| attrs[k.to_s.dasherize.to_sym] = attrs.delete(k) }
16
14
  builder.process(attrs) do |node|
17
15
  Array(prereqs).each do |prereq|
@@ -20,7 +18,7 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
20
18
  prereq_name = repo
21
19
  repo = nil
22
20
  end
23
- if (repo == workflow.repo && wf = workflow.name)
21
+ if repo == workflow.repo && wf = workflow.name
24
22
  repo = nil
25
23
  wf = nil
26
24
  end
@@ -33,15 +31,15 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
33
31
  def self.xml_template
34
32
  Nokogiri::XML('<workflow-def/>')
35
33
  end
36
-
34
+
37
35
  def add_process(attributes)
38
36
  add_child_node(ng_xml.at_xpath('/workflow-def'), :process, self, attributes)
39
37
  end
40
-
38
+
41
39
  def graph(parent = nil)
42
40
  Workflow::Graph.from_processes(self.repo, self.name, self.processes, parent)
43
41
  end
44
-
42
+
45
43
  def processes
46
44
  ng_xml.xpath('/workflow-def/process').collect do |node|
47
45
  Workflow::Process.new(self.repo, self.name, node)
@@ -51,7 +49,7 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
51
49
  def name
52
50
  ng_xml.at_xpath('/workflow-def/@id').to_s
53
51
  end
54
-
52
+
55
53
  def repo
56
54
  ng_xml.at_xpath('/workflow-def/@repository').to_s
57
55
  end
@@ -63,17 +61,15 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
63
61
  processes.each { |process| result[process.name] = process.to_hash }
64
62
  result
65
63
  end
66
-
64
+
67
65
  def configuration=(hash)
68
66
  self.ng_xml = Nokogiri::XML(%{<workflow-def id="#{hash['name']}" repository="#{hash['repository']}"/>})
69
67
  i = 0
70
- hash.each_pair do |k,v|
71
- if v.is_a?(Hash)
72
- add_process(v.merge({:name => k, :sequence => i+=1}))
73
- end
68
+ hash.each_pair do |k,v|
69
+ add_process(v.merge({:name => k, :sequence => i+=1})) if v.is_a?(Hash)
74
70
  end
75
71
  end
76
-
72
+
77
73
  # Creates the xml used by Dor::WorkflowService.create_workflow
78
74
  # @return [String] An object's initial workflow as defined by the <workflow-def> in content
79
75
  def initial_workflow
@@ -83,7 +79,7 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
83
79
  processes.each { |proc|
84
80
  doc.create_element 'process' do |node|
85
81
  node['name'] = proc.name
86
- if(proc.status)
82
+ if proc.status
87
83
  node['status'] = proc.status
88
84
  node['attempts'] = '1'
89
85
  else
@@ -95,19 +91,19 @@ class WorkflowDefinitionDs < ActiveFedora::OmDatastream
95
91
  }
96
92
  Nokogiri::XML(doc.to_xml) { |x| x.noblanks }.to_xml { |config| config.no_declaration }
97
93
  end
98
-
94
+
99
95
  def to_solr(solr_doc=Hash.new,*args)
100
96
  super(solr_doc,*args)
101
- add_solr_value(solr_doc, "workflow_name", self.name, :symbol, [:searchable])
97
+ add_solr_value(solr_doc, "workflow_name", self.name, :symbol, [:symbol])
102
98
  processes.each do |p|
103
99
  add_solr_value(solr_doc, "process", "#{p.name}|#{p.label}", :symbol, [:displayable])
104
100
  end
105
101
  solr_doc
106
102
  end
107
-
103
+
108
104
  def to_yaml
109
105
  YAML.dump(self.configuration)
110
106
  end
111
-
107
+
112
108
  end
113
109
  end
@@ -8,7 +8,7 @@ class WorkflowDs < ActiveFedora::OmDatastream
8
8
  t.process {
9
9
  t.name_(:path=>{:attribute=>"name"}, :index_as => [:displayable, :not_searchable])
10
10
  t.status(:path=>{:attribute=>"status"}, :index_as => [:displayable, :not_searchable])
11
- t.timestamp(:path=>{:attribute=>"datetime"}, :index_as => [:displayable, :not_searchable])#, :data_type => :date)
11
+ t.timestamp(:path=>{:attribute=>"datetime"}, :index_as => [:displayable, :not_searchable]) #, :data_type => :date)
12
12
  t.elapsed(:path=>{:attribute=>"elapsed"}, :index_as => [:displayable, :not_searchable])
13
13
  t.lifecycle(:path=>{:attribute=>"lifecycle"}, :index_as => [:displayable, :not_searchable])
14
14
  t.attempts(:path=>{:attribute=>"attempts"}, :index_as => [:displayable, :not_searchable])
@@ -16,24 +16,18 @@ class WorkflowDs < ActiveFedora::OmDatastream
16
16
  }
17
17
  end
18
18
 
19
- def get_workflow (wf,repo='dor')
20
- xml=Dor::WorkflowService.get_workflow_xml(repo, self.pid, wf)
21
- xml=Nokogiri::XML(xml)
22
- if xml.xpath('workflow').length == 0
23
- nil
24
- else
25
- Workflow::Document.new(xml.to_s)
26
- end
19
+ def get_workflow(wf, repo = 'dor')
20
+ xml = Dor::WorkflowService.get_workflow_xml(repo, self.pid, wf)
21
+ xml = Nokogiri::XML(xml)
22
+ return nil if xml.xpath('workflow').length == 0
23
+ Workflow::Document.new(xml.to_s)
27
24
  end
28
25
 
29
26
  def [](wf)
30
- xml=Dor::WorkflowService.get_workflow_xml('dor', self.pid, wf)
31
- xml=Nokogiri::XML(xml)
32
- if xml.xpath('workflow').length == 0
33
- nil
34
- else
35
- Workflow::Document.new(xml.to_s)
36
- end
27
+ xml = Dor::WorkflowService.get_workflow_xml('dor', self.pid, wf)
28
+ xml = Nokogiri::XML(xml)
29
+ return nil if xml.xpath('workflow').length == 0
30
+ Workflow::Document.new(xml.to_s)
37
31
  end
38
32
 
39
33
  def ensure_xml_loaded
@@ -46,33 +40,27 @@ class WorkflowDs < ActiveFedora::OmDatastream
46
40
  end
47
41
 
48
42
  def content
49
- begin
50
- @content ||= Dor::WorkflowService.get_workflow_xml 'dor', self.pid, nil
51
- rescue RestClient::ResourceNotFound
52
- xml = Nokogiri::XML(%{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<workflows objectId="#{self.pid}"/>})
53
- self.digital_object.datastreams.keys.each do |dsid|
54
- if dsid =~ /WF$/
55
- ds_content = Nokogiri::XML(Dor::WorkflowService.get_workflow_xml 'dor', self.pid, dsid)
56
- xml.root.add_child(ds_content.root)
57
- end
58
- end
59
- @content ||= xml.to_xml
43
+ @content ||= Dor::WorkflowService.get_workflow_xml 'dor', self.pid, nil
44
+ rescue RestClient::ResourceNotFound
45
+ xml = Nokogiri::XML(%{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<workflows objectId="#{self.pid}"/>})
46
+ self.digital_object.datastreams.keys.each do |dsid|
47
+ next unless dsid =~ /WF$/
48
+ ds_content = Nokogiri::XML(Dor::WorkflowService.get_workflow_xml 'dor', self.pid, dsid)
49
+ xml.root.add_child(ds_content.root)
60
50
  end
51
+ @content ||= xml.to_xml
61
52
  end
62
53
 
63
54
  def workflows
64
55
  @workflows ||= self.workflow.nodeset.collect { |wf_node| Workflow::Document.new wf_node.to_xml }
65
56
  end
66
57
 
67
- def graph(dir=nil)
58
+ def graph(dir = nil)
68
59
  result = GraphViz.digraph(self.pid)
69
60
  sg = result.add_graph('rank') { |g| g[:rank => 'same'] }
70
- workflows.each do |wf|
71
- wf_name = wf.workflowId.first
72
- unless wf.nil?
73
- g = wf.graph(result)
74
- sg.add_node(g.root.id) unless g.nil?
75
- end
61
+ workflows.reject(&:nil?).each do |wf|
62
+ g = wf.graph(result)
63
+ sg.add_node(g.root.id) unless g.nil?
76
64
  end
77
65
  result['rankdir'] = dir || 'TB'
78
66
  result
@@ -82,8 +70,8 @@ class WorkflowDs < ActiveFedora::OmDatastream
82
70
  #
83
71
  # @return [Integer] value of the priority. Defaults to 0 if none of the workflows are expedited
84
72
  def current_priority
85
- cp = workflows.detect {|wf| wf.expedited? }
86
- return 0 if(cp.nil?)
73
+ cp = workflows.detect { |wf| wf.expedited? }
74
+ return 0 if cp.nil?
87
75
  cp.priority.to_i
88
76
  end
89
77
 
@@ -6,4 +6,4 @@ Dor::Identifiable.on_upgrade '3.5.0', 'Assert hydra:isGovernedBy' do |obj|
6
6
  else
7
7
  false
8
8
  end
9
- end
9
+ end
@@ -4,7 +4,7 @@ Dor::Identifiable.on_upgrade '3.6.1', 'Assert correct models' do |obj|
4
4
  obj.remove_relationship :has_model, 'info:fedora/hydra:commonMetadata'
5
5
  applied = true
6
6
  end
7
-
7
+
8
8
  unless obj.relationships.predicates.any? { |p| p.to_s == 'info:fedora/fedora-system:def/model#hasModel' }
9
9
  obj.assert_content_model
10
10
  applied = true
@@ -10,9 +10,9 @@ Dor::Identifiable.on_upgrade '3.6.1', 'Record Remediation Version' do |obj|
10
10
  else
11
11
  add_tag = true
12
12
  end
13
-
13
+
14
14
  if add_tag
15
15
  obj.identityMetadata.add_value :tag, "Remediated By : #{Dor::VERSION}"
16
16
  end
17
17
  add_tag
18
- end
18
+ end
@@ -4,7 +4,7 @@ Dor::Identifiable.on_upgrade '3.14.8', 'Fix up invalid URIs in content-augmented
4
4
  false
5
5
  rescue URI::InvalidURIError
6
6
  true
7
- rescue
7
+ rescue
8
8
  false
9
9
  end
10
10
 
@@ -4,7 +4,7 @@ Dor::Identifiable.on_upgrade '3.11.6', 'Fix up invalid URIs in objects' do |obj|
4
4
  false
5
5
  rescue URI::InvalidURIError
6
6
  true
7
- rescue
7
+ rescue
8
8
  false
9
9
  end
10
10
 
@@ -5,11 +5,11 @@ Dor::Processable.on_upgrade '3.5.0', 'Replace individual *WF datastreams with un
5
5
  obj.workflows.content
6
6
  run = true
7
7
  end
8
-
8
+
9
9
  # Remove individual *WF datastreams
10
- obj.datastreams.each_pair do |dsid,ds|
11
- if ds.controlGroup == 'E' and dsid =~ /WF$/
12
- ds.delete
10
+ obj.datastreams.each_pair do |dsid,ds|
11
+ if ds.controlGroup == 'E' && dsid =~ /WF$/
12
+ ds.delete
13
13
  run = true
14
14
  end
15
15
  end
@@ -1,9 +1,9 @@
1
1
  Dor::Versionable.on_upgrade '3.12.2', 'Add missing versionMetadata' do |obj|
2
2
  run = false
3
3
  vm = obj.datastreams['versionMetadata']
4
- if(vm.content.nil? || vm.content.strip == '' || vm.new?) # We do not have a versionMetadata ds
4
+ if vm.content.nil? || vm.content.strip == '' || vm.new? # We do not have a versionMetadata ds
5
5
  vm.content = vm.ng_xml.to_s
6
6
  run = true
7
7
  end
8
8
  run
9
- end
9
+ end
@@ -1,9 +1,9 @@
1
1
  module Dor
2
2
  module Assembleable
3
-
3
+
4
4
  def initialize_workspace(source=nil)
5
5
  druid = DruidTools::Druid.new(self.pid, Config.stacks.local_workspace_root)
6
- if(source.nil?)
6
+ if source.nil?
7
7
  druid.mkdir
8
8
  else
9
9
  druid.mkdir_with_final_link(source)
@@ -6,6 +6,7 @@ module Dor
6
6
  include Describable
7
7
  include Publishable
8
8
  include Versionable
9
+ include Releaseable
9
10
 
10
11
  has_many :members, :property => :is_member_of_collection, :inbound => true, :class_name => "ActiveFedora::Base"
11
12
  has_object_type 'collection'
@@ -153,7 +153,7 @@ module Dor
153
153
  # determine whether the file in question is present in the object's workspace.
154
154
  def is_file_in_workspace? filename
155
155
  druid_obj = DruidTools::Druid.new(self.pid, Dor::Config.stacks.local_workspace_root)
156
- return druid_obj.find_content(filename) != nil
156
+ return !druid_obj.find_content(filename).nil?
157
157
  end
158
158
 
159
159
  # Appends contentMetadata file resources from the source objects to this object
@@ -178,7 +178,7 @@ module Dor
178
178
  resource_copy.xpath('file').each do |secondary_file|
179
179
  secondary_file['id'] = new_secondary_file_name(secondary_file['id'], max_sequence)
180
180
 
181
- if primary_cm.at_xpath("//file[@id = '#{secondary_file["id"]}']")
181
+ if primary_cm.at_xpath("//file[@id = '#{secondary_file['id']}']")
182
182
  raise Dor::Exception.new "File '#{secondary_file['id']}' from secondary object #{src_pid} already exist in primary object: #{self.pid}"
183
183
  end
184
184
  end
@@ -230,4 +230,4 @@ module Dor
230
230
  add_tag "Decommissioned : #{tag}"
231
231
  end
232
232
  end
233
- end
233
+ end
@@ -32,12 +32,11 @@ module Dor
32
32
 
33
33
  def build_descMetadata_datastream(ds)
34
34
  content = fetch_descMetadata_datastream
35
- unless content.nil?
36
- ds.dsLabel = 'Descriptive Metadata'
37
- ds.ng_xml = Nokogiri::XML(content)
38
- ds.ng_xml.normalize_text!
39
- ds.content = ds.ng_xml.to_xml
40
- end
35
+ return nil if content.nil?
36
+ ds.dsLabel = 'Descriptive Metadata'
37
+ ds.ng_xml = Nokogiri::XML(content)
38
+ ds.ng_xml.normalize_text!
39
+ ds.content = ds.ng_xml.to_xml
41
40
  end
42
41
 
43
42
  # Generates Dublin Core from the MODS in the descMetadata datastream using the LoC mods2dc stylesheet
@@ -54,7 +53,7 @@ module Dor
54
53
  dc_doc = xslt.transform(desc_md)
55
54
  # Remove empty nodes
56
55
  dc_doc.xpath('/oai_dc:dc/*[count(text()) = 0]').remove
57
- if(dc_doc.root.nil? || dc_doc.root.children.size == 0)
56
+ if dc_doc.root.nil? || dc_doc.root.children.size == 0
58
57
  raise CrosswalkError, "Dor::Item#generate_dublin_core produced incorrect xml:\n#{dc_doc.to_xml}"
59
58
  end
60
59
  dc_doc
@@ -158,11 +157,17 @@ module Dor
158
157
  def to_solr(solr_doc=Hash.new, *args)
159
158
  super solr_doc, *args
160
159
  mods_sources = {
160
+ 'sw_language_ssim' => :sw_language_facet,
161
161
  'sw_language_tesim' => :sw_language_facet,
162
+ 'sw_genre_ssim' => :sw_genre,
162
163
  'sw_genre_tesim' => :sw_genre,
164
+ 'sw_format_ssim' => :format_main, # basically sw_typeOfResource_ssim
163
165
  'sw_format_tesim' => :format_main, # basically sw_typeOfResource_tesim
166
+ 'sw_subject_temporal_ssim' => :era_facet,
164
167
  'sw_subject_temporal_tesim' => :era_facet,
168
+ 'sw_subject_geographic_ssim' => :geographic_facet,
165
169
  'sw_subject_geographic_tesim' => :geographic_facet,
170
+ 'mods_typeOfResource_ssim' => [:term_values, :typeOfResource],
166
171
  'mods_typeOfResource_tesim' => [:term_values, :typeOfResource]
167
172
  }
168
173
  keys = mods_sources.keys.concat(%w[ metadata_format_ssim ])
@@ -194,7 +199,7 @@ module Dor
194
199
  mods = self.stanford_mods
195
200
  mods_sources.each_pair do |solr_key, meth|
196
201
  vals = meth.is_a?(Array) ? mods.send(meth.shift, *meth) : mods.send(meth)
197
- solr_doc[solr_key].push *vals unless (vals.nil? || vals.empty?)
202
+ solr_doc[solr_key].push *vals unless vals.nil? || vals.empty?
198
203
  # asterisk to avoid multi-dimensional array: push values, not the array
199
204
  end
200
205
  solr_doc['sw_pub_date_sort_ssi' ] = mods.pub_date_sort # e.g. '0800'
@@ -203,14 +208,12 @@ module Dor
203
208
  # some fields get explicit "(none)" placeholder values, mostly for faceting
204
209
  %w[sw_language_tesim sw_genre_tesim sw_format_tesim].each { |key| solr_doc[key] = ['(none)'] if solr_doc[key].empty? }
205
210
  # otherwise remove empties
206
- keys.each{ |key| solr_doc.delete(key) if (solr_doc[key].nil? || solr_doc[key].empty?)}
211
+ keys.each{ |key| solr_doc.delete(key) if solr_doc[key].nil? || solr_doc[key].empty?}
207
212
  solr_doc
208
213
  end
209
214
 
210
215
  def update_title(new_title)
211
- if not update_simple_field('mods:mods/mods:titleInfo/mods:title',new_title)
212
- raise 'Descriptive metadata has no title to update!'
213
- end
216
+ raise 'Descriptive metadata has no title to update!' unless update_simple_field('mods:mods/mods:titleInfo/mods:title', new_title)
214
217
  end
215
218
  def add_identifier(type, value)
216
219
  ds_xml=self.descMetadata.ng_xml
@@ -252,7 +255,7 @@ module Dor
252
255
  xml=obj.descMetadata.ng_xml
253
256
  title=''
254
257
  title_node = xml.at_xpath('//mods:mods/mods:titleInfo/mods:title','mods' => 'http://www.loc.gov/mods/v3')
255
- if(title_node)
258
+ if title_node
256
259
  title = title_node.content
257
260
  subtitle=xml.at_xpath('//mods:mods/mods:titleInfo/mods:subTitle','mods' => 'http://www.loc.gov/mods/v3')
258
261
  title += " (#{subtitle.content})" if subtitle