dor-services 6.0.0 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dor-services.rb +7 -6
  3. data/lib/dor/certificate_authenticated_rest_resource_factory.rb +2 -1
  4. data/lib/dor/config.rb +38 -37
  5. data/lib/dor/datastreams/administrative_metadata_ds.rb +98 -98
  6. data/lib/dor/datastreams/content_metadata_ds.rb +26 -17
  7. data/lib/dor/datastreams/datastream_spec_solrizer.rb +4 -2
  8. data/lib/dor/datastreams/default_object_rights_ds.rb +10 -7
  9. data/lib/dor/datastreams/desc_metadata_ds.rb +6 -6
  10. data/lib/dor/datastreams/embargo_metadata_ds.rb +94 -94
  11. data/lib/dor/datastreams/events_ds.rb +55 -54
  12. data/lib/dor/datastreams/geo_metadata_ds.rb +7 -6
  13. data/lib/dor/datastreams/identity_metadata_ds.rb +128 -125
  14. data/lib/dor/datastreams/provenance_metadata_ds.rb +3 -1
  15. data/lib/dor/datastreams/rights_metadata_ds.rb +4 -4
  16. data/lib/dor/datastreams/role_metadata_ds.rb +42 -42
  17. data/lib/dor/datastreams/simple_dublin_core_ds.rb +45 -43
  18. data/lib/dor/datastreams/technical_metadata_ds.rb +3 -1
  19. data/lib/dor/datastreams/version_metadata_ds.rb +12 -5
  20. data/lib/dor/datastreams/workflow_definition_ds.rb +74 -73
  21. data/lib/dor/datastreams/workflow_ds.rb +12 -7
  22. data/lib/dor/exceptions.rb +2 -0
  23. data/lib/dor/indexers/data_indexer.rb +16 -0
  24. data/lib/dor/indexers/describable_indexer.rb +2 -0
  25. data/lib/dor/indexers/editable_indexer.rb +2 -0
  26. data/lib/dor/indexers/identifiable_indexer.rb +23 -8
  27. data/lib/dor/indexers/processable_indexer.rb +2 -0
  28. data/lib/dor/indexers/releasable_indexer.rb +2 -0
  29. data/lib/dor/models/abstract.rb +2 -0
  30. data/lib/dor/models/admin_policy_object.rb +2 -0
  31. data/lib/dor/models/agreement.rb +2 -0
  32. data/lib/dor/models/collection.rb +3 -0
  33. data/lib/dor/models/concerns/assembleable.rb +2 -0
  34. data/lib/dor/models/concerns/contentable.rb +5 -2
  35. data/lib/dor/models/concerns/describable.rb +7 -2
  36. data/lib/dor/models/concerns/editable.rb +28 -21
  37. data/lib/dor/models/concerns/embargoable.rb +4 -0
  38. data/lib/dor/models/concerns/eventable.rb +2 -0
  39. data/lib/dor/models/concerns/geoable.rb +2 -0
  40. data/lib/dor/models/concerns/governable.rb +7 -2
  41. data/lib/dor/models/concerns/identifiable.rb +33 -34
  42. data/lib/dor/models/concerns/itemizable.rb +4 -1
  43. data/lib/dor/models/concerns/preservable.rb +2 -0
  44. data/lib/dor/models/concerns/processable.rb +15 -9
  45. data/lib/dor/models/concerns/publishable.rb +9 -4
  46. data/lib/dor/models/concerns/releaseable.rb +21 -11
  47. data/lib/dor/models/concerns/rightsable.rb +2 -0
  48. data/lib/dor/models/concerns/shelvable.rb +6 -2
  49. data/lib/dor/models/concerns/versionable.rb +8 -4
  50. data/lib/dor/models/item.rb +2 -0
  51. data/lib/dor/models/set.rb +2 -0
  52. data/lib/dor/models/workflow_object.rb +5 -1
  53. data/lib/dor/rest_resource_factory.rb +2 -0
  54. data/lib/dor/services/cleanup_reset_service.rb +2 -1
  55. data/lib/dor/services/cleanup_service.rb +2 -1
  56. data/lib/dor/services/digital_stacks_service.rb +3 -1
  57. data/lib/dor/services/indexing_service.rb +3 -1
  58. data/lib/dor/services/merge_service.rb +6 -4
  59. data/lib/dor/services/metadata_handlers/catalog_handler.rb +2 -0
  60. data/lib/dor/services/metadata_service.rb +4 -4
  61. data/lib/dor/services/public_desc_metadata_service.rb +16 -8
  62. data/lib/dor/services/public_xml_service.rb +7 -4
  63. data/lib/dor/services/registration_service.rb +25 -20
  64. data/lib/dor/services/reset_workspace_service.rb +4 -4
  65. data/lib/dor/services/sdr_ingest_service.rb +4 -2
  66. data/lib/dor/services/search_service.rb +8 -9
  67. data/lib/dor/services/suri_service.rb +3 -2
  68. data/lib/dor/services/technical_metadata_service.rb +15 -9
  69. data/lib/dor/services/thumbnail_service.rb +14 -10
  70. data/lib/dor/utils/hydrus_shims.rb +2 -0
  71. data/lib/dor/utils/ng_tidy.rb +3 -7
  72. data/lib/dor/utils/predicate_patch.rb +2 -0
  73. data/lib/dor/utils/sdr_client.rb +3 -0
  74. data/lib/dor/utils/solr_doc_helper.rb +4 -2
  75. data/lib/dor/version.rb +3 -1
  76. data/lib/dor/workflow/document.rb +113 -108
  77. data/lib/dor/workflow/process.rb +90 -87
  78. data/lib/tasks/rdoc.rake +4 -3
  79. metadata +4 -4
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DatastreamSpecSolrizer
2
4
  extend ActiveSupport::Concern
3
5
  include SolrDocHelper
@@ -5,8 +7,8 @@ module DatastreamSpecSolrizer
5
7
  def datastream_spec_string
6
8
  s = begin
7
9
  controlGroup == 'E' ? content.to_s.length : size
8
- rescue
9
- 0
10
+ rescue
11
+ 0
10
12
  end
11
13
  v = versionID.nil? ? '0' : versionID.to_s.split(/\./).last
12
14
  [dsid, controlGroup, mimeType, v, s, label].join('|')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'stanford/mods/normalizer'
2
4
  module Dor
3
5
  class DefaultObjectRightsDS < ActiveFedora::OmDatastream
@@ -82,6 +84,7 @@ module Dor
82
84
  # Ensures that the template is present for the given term
83
85
  def initialize_term!(term)
84
86
  return unless find_by_terms(term).length < 1
87
+
85
88
  ng_xml_will_change!
86
89
  add_child_node(ng_xml.root, term)
87
90
  end
@@ -90,10 +93,10 @@ module Dor
90
93
  def update_term!(term, val)
91
94
  ng_xml_will_change!
92
95
  if val.blank?
93
- update_values({ [ term ] => nil })
96
+ update_values({ [term] => nil })
94
97
  else
95
98
  initialize_term! term
96
- update_values({ [ term ] => val })
99
+ update_values({ [term] => val })
97
100
  end
98
101
  normalize!
99
102
  end
@@ -124,11 +127,11 @@ module Dor
124
127
  # cleanup ordering is important here
125
128
  doc.xpath('//machine/text()').each { |node| node.content = node.content.strip }
126
129
  doc.xpath('//human')
127
- .tap { |node_set| norm.clean_linefeeds(node_set) }
128
- .each do |node|
129
- norm.trim_text(node)
130
- norm.remove_empty_nodes(node)
131
- end
130
+ .tap { |node_set| norm.clean_linefeeds(node_set) }
131
+ .each do |node|
132
+ norm.trim_text(node)
133
+ norm.remove_empty_nodes(node)
134
+ end
132
135
  doc.xpath('/rightsMetadata/copyright').each { |node| norm.remove_empty_nodes(node) }
133
136
  doc.xpath('/rightsMetadata/use').each { |node| norm.remove_empty_nodes(node) }
134
137
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dor
2
4
  class DescMetadataDS < ActiveFedora::OmDatastream
3
-
4
- MODS_NS = 'http://www.loc.gov/mods/v3'.freeze
5
+ MODS_NS = 'http://www.loc.gov/mods/v3'
5
6
  MODS_HEADER_CONFIG = {
6
7
  'xmlns' => MODS_NS,
7
8
  'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
@@ -15,7 +16,7 @@ module Dor
15
16
  t.publisher :index_as => [:stored_searchable]
16
17
  t.date_created :path => 'dateCreated', :index_as => [:stored_searchable]
17
18
  t.place :index_as => [:not_searchable] do
18
- t.placeTerm :attributes => {:type => 'text'}, :index_as => [:stored_searchable]
19
+ t.placeTerm :attributes => { :type => 'text' }, :index_as => [:stored_searchable]
19
20
  end
20
21
  end
21
22
  t.subject(:index_as => [:not_searchable]) do
@@ -25,11 +26,11 @@ module Dor
25
26
  end
26
27
  t.title_info(:path => 'titleInfo') {
27
28
  t.main_title(:index_as => [:symbol], :path => 'title', :label => 'title') {
28
- t.main_title_lang(:path => {:attribute => 'xml:lang'})
29
+ t.main_title_lang(:path => { :attribute => 'xml:lang' })
29
30
  }
30
31
  }
31
32
  t.language {
32
- t.languageTerm :attributes => {:type => 'code', :authority => 'iso639-2b'}, :index_as => [:not_searchable]
33
+ t.languageTerm :attributes => { :type => 'code', :authority => 'iso639-2b' }, :index_as => [:not_searchable]
33
34
  }
34
35
  t.coordinates :index_as => [:symbol]
35
36
  t.extent :index_as => [:symbol]
@@ -56,6 +57,5 @@ module Dor
56
57
  def prefix
57
58
  ''
58
59
  end
59
-
60
60
  end
61
61
  end
@@ -1,114 +1,114 @@
1
- module Dor
2
- class EmbargoMetadataDS < ActiveFedora::OmDatastream
3
-
4
- before_create :ensure_non_versionable
5
-
6
- set_terminology do |t|
7
- t.root(:path => 'embargoMetadata')
8
- t.status
9
- t.embargo_status(:path => 'status', :index_as => [:symbol])
10
- t.release_date(:path => 'releaseDate', :index_as => [:dateable])
11
- t.release_access(:path => 'releaseAccess')
12
- t.twenty_pct_status(:path => 'twentyPctVisibilityStatus', :index_as => [:symbol])
13
- t.twenty_pct_release_date(:path => 'twentyPctVisibilityReleaseDate')
14
- end
1
+ # frozen_string_literal: true
15
2
 
16
- # Default EmbargoMetadataDS xml
17
- def self.xml_template
18
- builder = Nokogiri::XML::Builder.new do |xml|
19
- xml.embargoMetadata {
20
- xml.status
21
- xml.releaseDate
22
- xml.releaseAccess
23
- xml.twentyPctVisibilityStatus
24
- xml.twentyPctVisibilityReleaseDate
25
- }
3
+ module Dor
4
+ class EmbargoMetadataDS < ActiveFedora::OmDatastream
5
+ before_create :ensure_non_versionable
6
+
7
+ set_terminology do |t|
8
+ t.root(:path => 'embargoMetadata')
9
+ t.status
10
+ t.embargo_status(:path => 'status', :index_as => [:symbol])
11
+ t.release_date(:path => 'releaseDate', :index_as => [:dateable])
12
+ t.release_access(:path => 'releaseAccess')
13
+ t.twenty_pct_status(:path => 'twentyPctVisibilityStatus', :index_as => [:symbol])
14
+ t.twenty_pct_release_date(:path => 'twentyPctVisibilityReleaseDate')
26
15
  end
27
- builder.doc
28
- end
29
16
 
30
- def to_solr(solr_doc = {}, *args)
31
- solr_doc = super
32
- #::Solrizer.insert_field(solr_doc, field_name, value, *index_types)
33
- rd1 = release_date
34
- rd20 = twenty_pct_release_date
35
- ::Solrizer.insert_field(solr_doc, 'embargo_release', rd1.utc.strftime('%FT%TZ'), :dateable) unless rd1.blank?
36
- ::Solrizer.insert_field(solr_doc, 'twenty_pct_visibility_release', rd20.utc.strftime('%FT%TZ'), :dateable) unless rd20.blank?
37
- solr_doc
38
- end
17
+ # Default EmbargoMetadataDS xml
18
+ def self.xml_template
19
+ builder = Nokogiri::XML::Builder.new do |xml|
20
+ xml.embargoMetadata {
21
+ xml.status
22
+ xml.releaseDate
23
+ xml.releaseAccess
24
+ xml.twentyPctVisibilityStatus
25
+ xml.twentyPctVisibilityReleaseDate
26
+ }
27
+ end
28
+ builder.doc
29
+ end
39
30
 
40
- def ensure_non_versionable
41
- self.versionable = 'false'
42
- end
31
+ def to_solr(solr_doc = {}, *args)
32
+ solr_doc = super
33
+ #::Solrizer.insert_field(solr_doc, field_name, value, *index_types)
34
+ rd1 = release_date
35
+ rd20 = twenty_pct_release_date
36
+ ::Solrizer.insert_field(solr_doc, 'embargo_release', rd1.utc.strftime('%FT%TZ'), :dateable) unless rd1.blank?
37
+ ::Solrizer.insert_field(solr_doc, 'twenty_pct_visibility_release', rd20.utc.strftime('%FT%TZ'), :dateable) unless rd20.blank?
38
+ solr_doc
39
+ end
43
40
 
44
- #################################################################################
45
- # Convenience methods to get and set embargo properties
46
- # Hides complexity/verbosity of OM TermOperators for simple, non-repeating values
47
- #################################################################################
41
+ def ensure_non_versionable
42
+ self.versionable = 'false'
43
+ end
48
44
 
49
- def status=(new_status)
50
- update_values([:status] => new_status)
51
- end
45
+ #################################################################################
46
+ # Convenience methods to get and set embargo properties
47
+ # Hides complexity/verbosity of OM TermOperators for simple, non-repeating values
48
+ #################################################################################
52
49
 
53
- def status
54
- term_values(:status).first
55
- end
50
+ def status=(new_status)
51
+ update_values([:status] => new_status)
52
+ end
56
53
 
57
- # Sets the release date. Does NOT convert to beginning-of-day.
58
- # @param [Time] rd the release date object
59
- def release_date=(rd = Time.now.utc)
60
- update_values([:release_date] => rd.utc.xmlschema)
61
- end
54
+ def status
55
+ term_values(:status).first
56
+ end
62
57
 
63
- # Current releaseDate value
64
- # @return [Time]
65
- def release_date
66
- rd = term_values(:release_date).first
67
- (rd.nil? || rd.empty?) ? nil : Time.parse(rd)
68
- end
58
+ # Sets the release date. Does NOT convert to beginning-of-day.
59
+ # @param [Time] rd the release date object
60
+ def release_date=(rd = Time.now.utc)
61
+ update_values([:release_date] => rd.utc.xmlschema)
62
+ end
69
63
 
70
- def twenty_pct_status=(new_status)
71
- update_values([:twenty_pct_status] => new_status)
72
- end
64
+ # Current releaseDate value
65
+ # @return [Time]
66
+ def release_date
67
+ rd = term_values(:release_date).first
68
+ (rd.nil? || rd.empty?) ? nil : Time.parse(rd)
69
+ end
73
70
 
74
- def twenty_pct_status
75
- term_values(:twenty_pct_status).first
76
- end
71
+ def twenty_pct_status=(new_status)
72
+ update_values([:twenty_pct_status] => new_status)
73
+ end
77
74
 
78
- # Sets the 20% visibility release date. Converts the date to beginning-of-day, UTC to help with Solr indexing
79
- # @param [Time] rd A Time object represeting the release date. By default, it is set to now
80
- def twenty_pct_release_date=(rd = Time.now.utc)
81
- update_values([:twenty_pct_release_date] => rd.beginning_of_day.utc.xmlschema)
82
- end
75
+ def twenty_pct_status
76
+ term_values(:twenty_pct_status).first
77
+ end
83
78
 
84
- # Current twentyPctVisibilityReleaseDate value
85
- # @return [Time]
86
- def twenty_pct_release_date
87
- rd = term_values(:twenty_pct_release_date).first
88
- (rd.nil? || rd.empty?) ? nil : Time.parse(rd)
89
- end
79
+ # Sets the 20% visibility release date. Converts the date to beginning-of-day, UTC to help with Solr indexing
80
+ # @param [Time] rd A Time object represeting the release date. By default, it is set to now
81
+ def twenty_pct_release_date=(rd = Time.now.utc)
82
+ update_values([:twenty_pct_release_date] => rd.beginning_of_day.utc.xmlschema)
83
+ end
90
84
 
91
- # @return [Nokogiri::XML::Element] The releaseAccess node
92
- def release_access_node
93
- find_by_terms(:release_access).first
94
- end
85
+ # Current twentyPctVisibilityReleaseDate value
86
+ # @return [Time]
87
+ def twenty_pct_release_date
88
+ rd = term_values(:twenty_pct_release_date).first
89
+ (rd.nil? || rd.empty?) ? nil : Time.parse(rd)
90
+ end
95
91
 
96
- # Sets the embargaAccess node
97
- # @param [Nokogiri::XML::Document] new_doc Document that will replace the existing releaseAccess node
98
- def release_access_node=(new_doc)
99
- if new_doc.root.name != 'releaseAccess'
100
- raise 'Trying to replace releaseAccess with a non-releaseAccess document'
92
+ # @return [Nokogiri::XML::Element] The releaseAccess node
93
+ def release_access_node
94
+ find_by_terms(:release_access).first
101
95
  end
102
96
 
103
- term_value_delete(:select => '//embargoMetadata/releaseAccess')
104
- ng_xml_will_change!
105
- ng_xml.root.add_child(new_doc.root.clone)
106
- end
97
+ # Sets the embargaAccess node
98
+ # @param [Nokogiri::XML::Document] new_doc Document that will replace the existing releaseAccess node
99
+ def release_access_node=(new_doc)
100
+ if new_doc.root.name != 'releaseAccess'
101
+ raise 'Trying to replace releaseAccess with a non-releaseAccess document'
102
+ end
107
103
 
108
- # maintain AF < 8 indexing behavior
109
- def prefix
110
- ''
111
- end
104
+ term_value_delete(:select => '//embargoMetadata/releaseAccess')
105
+ ng_xml_will_change!
106
+ ng_xml.root.add_child(new_doc.root.clone)
107
+ end
112
108
 
113
- end
109
+ # maintain AF < 8 indexing behavior
110
+ def prefix
111
+ ''
112
+ end
113
+ end
114
114
  end
@@ -1,68 +1,69 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dor
2
- class EventsDS < ActiveFedora::OmDatastream
3
- before_create :ensure_non_versionable
4
+ class EventsDS < ActiveFedora::OmDatastream
5
+ before_create :ensure_non_versionable
4
6
 
5
- set_terminology do |t|
6
- t.root(:path => 'events')
7
- t.event do
8
- t.who :path => { :attribute => 'who' }, :index_as => [:displayable, :not_searchable]
9
- t.type_ :path => { :attribute => 'type' }, :index_as => [:displayable, :not_searchable]
10
- t.when :path => { :attribute => 'when' }, :index_as => [:displayable, :not_searchable], :data_type => :date
11
- t.message :path => 'text()', :index_as => [:displayable, :not_searchable]
7
+ set_terminology do |t|
8
+ t.root(:path => 'events')
9
+ t.event do
10
+ t.who :path => { :attribute => 'who' }, :index_as => [:displayable, :not_searchable]
11
+ t.type_ :path => { :attribute => 'type' }, :index_as => [:displayable, :not_searchable]
12
+ t.when :path => { :attribute => 'when' }, :index_as => [:displayable, :not_searchable], :data_type => :date
13
+ t.message :path => 'text()', :index_as => [:displayable, :not_searchable]
14
+ end
12
15
  end
13
- end
14
16
 
15
- # Default EventsDS xml
16
- def self.xml_template
17
- builder = Nokogiri::XML::Builder.new do |xml|
18
- xml.events
17
+ # Default EventsDS xml
18
+ def self.xml_template
19
+ builder = Nokogiri::XML::Builder.new do |xml|
20
+ xml.events
21
+ end
22
+ builder.doc
19
23
  end
20
- builder.doc
21
- end
22
24
 
23
- def ensure_non_versionable
24
- self.versionable = 'false'
25
- end
25
+ def ensure_non_versionable
26
+ self.versionable = 'false'
27
+ end
26
28
 
27
- # Adds an event to the datastream
28
- # @param [String] type a tag used to group events together. Sets the type attribute for the event
29
- # @param [String] who who is responsible for this event. Sets the who attribute for the event
30
- # @param [String] message what happened. Sets the content of the event with this message
31
- def add_event(type, who, message)
32
- ng_xml_will_change!
33
- ev = ng_xml.create_element 'event', message,
34
- :type => type, :who => who, :when => Time.now.utc.xmlschema
35
- ng_xml.root.add_child(ev)
36
- end
29
+ # Adds an event to the datastream
30
+ # @param [String] type a tag used to group events together. Sets the type attribute for the event
31
+ # @param [String] who who is responsible for this event. Sets the who attribute for the event
32
+ # @param [String] message what happened. Sets the content of the event with this message
33
+ def add_event(type, who, message)
34
+ ng_xml_will_change!
35
+ ev = ng_xml.create_element 'event', message,
36
+ :type => type, :who => who, :when => Time.now.utc.xmlschema
37
+ ng_xml.root.add_child(ev)
38
+ end
37
39
 
38
- # Finds events with the desired type attribute
39
- # @param [String] tag events where type == tag will be returned
40
- # @yield [who, timestamp, message] The values of the current event
41
- # @yieldparam [String] who thing responsible for creating the event. Value of the 'who' attribute
42
- # @yieldparam [Time] timestamp when this event was logged. Value of the 'when' attribute
43
- # @yieldparam [String] message what happened. Content of the event node
44
- def find_events_by_type(tag, &block)
45
- find_by_terms(:event).xpath("//event[@type='#{tag}']").each do |node|
46
- block.call(node['who'], Time.parse(node['when']), node.content)
40
+ # Finds events with the desired type attribute
41
+ # @param [String] tag events where type == tag will be returned
42
+ # @yield [who, timestamp, message] The values of the current event
43
+ # @yieldparam [String] who thing responsible for creating the event. Value of the 'who' attribute
44
+ # @yieldparam [Time] timestamp when this event was logged. Value of the 'when' attribute
45
+ # @yieldparam [String] message what happened. Content of the event node
46
+ def find_events_by_type(tag, &block)
47
+ find_by_terms(:event).xpath("//event[@type='#{tag}']").each do |node|
48
+ block.call(node['who'], Time.parse(node['when']), node.content)
49
+ end
47
50
  end
48
- end
49
51
 
50
- # Returns all the events in the datastream
51
- # @yield [type, who, timestamp, message] The values of the current event
52
- # @yieldparam [String] type tag for this particular event. Value of the 'type' attribute
53
- # @yieldparam [String] who thing responsible for creating the event. Value of the 'who' attribute
54
- # @yieldparam [Time] timestamp when this event was logged. Value of the 'when' attribute
55
- # @yieldparam [String] message what happened. Content of the event node
56
- def each_event(&block)
57
- find_by_terms(:event).each do |node|
58
- block.call(node['type'], node['who'], Time.parse(node['when']), node.content)
52
+ # Returns all the events in the datastream
53
+ # @yield [type, who, timestamp, message] The values of the current event
54
+ # @yieldparam [String] type tag for this particular event. Value of the 'type' attribute
55
+ # @yieldparam [String] who thing responsible for creating the event. Value of the 'who' attribute
56
+ # @yieldparam [Time] timestamp when this event was logged. Value of the 'when' attribute
57
+ # @yieldparam [String] message what happened. Content of the event node
58
+ def each_event(&block)
59
+ find_by_terms(:event).each do |node|
60
+ block.call(node['type'], node['who'], Time.parse(node['when']), node.content)
61
+ end
59
62
  end
60
- end
61
63
 
62
- # maintain AF < 8 indexing behavior
63
- def prefix
64
- ''
64
+ # maintain AF < 8 indexing behavior
65
+ def prefix
66
+ ''
67
+ end
65
68
  end
66
-
67
- end
68
69
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'scanf'
4
5
  require 'uri'
@@ -10,7 +11,6 @@ module Dor
10
11
  # @see http://www.isotc211.org
11
12
  # @author Darren Hardy
12
13
  class GeoMetadataDS < ActiveFedora::OmDatastream
13
-
14
14
  # namespaces
15
15
  NS = {
16
16
  :rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
@@ -20,10 +20,10 @@ module Dor
20
20
  }.freeze
21
21
 
22
22
  # hash with all namespaces
23
- XMLNS = Hash[NS.map {|k, v| ["xmlns:#{k}", v]}]
23
+ XMLNS = Hash[NS.map { |k, v| ["xmlns:#{k}", v] }]
24
24
 
25
25
  # schema locations
26
- NS_XSD = NS.keys.collect {|k| "#{NS[k]} #{NS[k]}/#{k}.xsd"}
26
+ NS_XSD = NS.keys.collect { |k| "#{NS[k]} #{NS[k]}/#{k}.xsd" }
27
27
 
28
28
  # @return [Nokogiri::XML::Document] with gmd:MD_Metadata as root node
29
29
  # @raise [Dor::ParameterError] if MD_Metadata is missing
@@ -40,7 +40,8 @@ module Dor
40
40
  # or nil if not provided
41
41
  def feature_catalogue
42
42
  root = ng_xml.xpath('/rdf:RDF/rdf:Description/gfc:FC_FeatureCatalogue', XMLNS)
43
- return nil if root.nil? || root.empty? # Feature catalog is optional
43
+ return nil if root.nil? || root.empty? # Feature catalog is optional
44
+
44
45
  Nokogiri::XML(root.first.to_xml)
45
46
  end
46
47
 
@@ -50,8 +51,8 @@ module Dor
50
51
  def self.xml_template
51
52
  Nokogiri::XML::Builder.new do |xml|
52
53
  xml['rdf'].RDF XMLNS,
53
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
54
- 'xsi:schemaLocation' => NS_XSD.join(' ') do
54
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
55
+ 'xsi:schemaLocation' => NS_XSD.join(' ') do
55
56
  xml['rdf'].Description 'rdf:about' => nil do
56
57
  xml['gmd'].MD_Metadata
57
58
  end