dor-services 6.0.0 → 6.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.
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