dor-services 5.6.0 → 5.7.0

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: ff194a7c8f4523d03cae50e749ca4347aef2ce63
4
- data.tar.gz: 0187ff1e3f17f874cbc1412aa3ee1d0a2726284d
3
+ metadata.gz: 5bcf35abdc1bd0a65db743cf5d878cd69407c844
4
+ data.tar.gz: 50ae2af9196a9e6c2fce640653dd8dbbb317c348
5
5
  SHA512:
6
- metadata.gz: a78df8989f349a9b1d20fd940dd54437d2d756343b56fe1124e1ddad13e0933a076c434ec4db61829989154b50a3f12b51efd7198bb670784add5ed68848a91a
7
- data.tar.gz: 9bd63d841e4a4bc0324ace233c5f72ef9b9a67c36e90fcc17eb5477be1ac59d3afbf70c93aa5af289831afe280558fa8399d7d811249c06239fadb0fac4d71a3
6
+ metadata.gz: 17d5f020c434ca6fe2279ff74091495aad6195570a0a729a4bdd5fd378b905e826dcc9cca53c46ee138a03ca3243b6ccb1b25a41cc0718a5844cb24e9db04b40
7
+ data.tar.gz: eeb1e14c56abb72485ed20367cf28f2b1a07d04ac1a7e01d7812c00ea6db984027b972c3eda6daf35eec09cf4f7fcf716b327252afd40fdb7f04b552b0965611
data/lib/dor-services.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  require 'active_fedora'
2
2
  require 'active_support/core_ext/module/attribute_accessors'
3
3
  require 'modsulator'
4
- require 'nokogiri-pretty'
5
4
  require 'dor/utils/sdr_client'
6
5
 
7
6
  module Dor
8
7
  @@registered_classes = {}
9
8
  mattr_reader :registered_classes
10
- INDEX_VERSION_FIELD = 'dor_services_version_ssi'
9
+ INDEX_VERSION_FIELD = 'dor_services_version_ssi'.freeze
11
10
 
12
11
  class << self
13
12
 
data/lib/dor/config.rb CHANGED
@@ -30,7 +30,7 @@ module Dor
30
30
 
31
31
  def autoconfigure(url, cert_file = Config.ssl.cert_file, key_file = Config.ssl.key_file, key_pass = Config.ssl.key_pass)
32
32
  client = make_rest_client(url, cert_file, key_file, key_pass)
33
- config = Confstruct::Configuration.symbolize_hash JSON.parse(client.get :accept => 'application/json')
33
+ config = Confstruct::Configuration.symbolize_hash JSON.parse(client.get(accept: 'application/json'))
34
34
  configure(config)
35
35
  end
36
36
 
@@ -94,7 +94,7 @@ module Dor
94
94
  end
95
95
 
96
96
  def content
97
- ng_xml.human
97
+ prettify(ng_xml).to_s
98
98
  end
99
99
 
100
100
  # Purge the XML of any empty or duplicate elements -- keeps <rightsMetadata> clean
@@ -127,7 +127,16 @@ module Dor
127
127
  doc.xpath('/rightsMetadata/copyright').each { |node| norm.remove_empty_nodes(node) }
128
128
  doc.xpath('/rightsMetadata/use').each { |node| norm.remove_empty_nodes(node) }
129
129
  end
130
- self.content = doc.human
130
+ self.content = prettify(doc)
131
+ end
132
+
133
+ # Returns a nicely indented XML document.
134
+ # Note that the XSL file was taken from the (apparently defunct) nokogiri-pretty project:
135
+ # https://github.com/tobym/nokogiri-pretty/blob/master/lib/indent.xsl
136
+ # The only modification made was to declare UTF-8 to be the encoding, instead of ISO-8859-1.
137
+ def prettify(xml_doc)
138
+ template = Nokogiri::XSLT(File.read(File.expand_path('../human.xslt', __FILE__)))
139
+ template.apply_to(xml_doc)
131
140
  end
132
141
  end
133
142
  end
@@ -1,7 +1,7 @@
1
1
  module Dor
2
2
  class DescMetadataDS < ActiveFedora::OmDatastream
3
3
 
4
- MODS_NS = 'http://www.loc.gov/mods/v3'
4
+ MODS_NS = 'http://www.loc.gov/mods/v3'.freeze
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
@@ -99,7 +99,7 @@ class EmbargoMetadataDS < ActiveFedora::OmDatastream
99
99
  # Sets the embargaAccess node
100
100
  # @param [Nokogiri::XML::Document] new_doc Document that will replace the existing releaseAccess node
101
101
  def release_access_node=(new_doc)
102
- if (new_doc.root.name != 'releaseAccess')
102
+ if new_doc.root.name != 'releaseAccess'
103
103
  raise 'Trying to replace releaseAccess with a non-releaseAccess document'
104
104
  end
105
105
 
@@ -17,7 +17,7 @@ module Dor
17
17
  :gco => 'http://www.isotc211.org/2005/gco',
18
18
  :gmd => 'http://www.isotc211.org/2005/gmd',
19
19
  :gfc => 'http://www.isotc211.org/2005/gfc'
20
- }
20
+ }.freeze
21
21
 
22
22
  # hash with all namespaces
23
23
  XMLNS = Hash[NS.map {|k, v| ["xmlns:#{k}", v]}]
@@ -0,0 +1,46 @@
1
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2
+ <xsl:output method="xml" encoding="UTF-8"/>
3
+ <xsl:param name="indent-increment" select="' '"/>
4
+
5
+ <xsl:template name="newline">
6
+ <xsl:text disable-output-escaping="yes">
7
+ </xsl:text>
8
+ </xsl:template>
9
+
10
+ <xsl:template match="comment() | processing-instruction()">
11
+ <xsl:param name="indent" select="''"/>
12
+ <xsl:call-template name="newline"/>
13
+ <xsl:value-of select="$indent"/>
14
+ <xsl:copy />
15
+ </xsl:template>
16
+
17
+ <xsl:template match="text()">
18
+ <xsl:param name="indent" select="''"/>
19
+ <xsl:call-template name="newline"/>
20
+ <xsl:value-of select="$indent"/>
21
+ <xsl:value-of select="normalize-space(.)"/>
22
+ </xsl:template>
23
+
24
+ <xsl:template match="text()[normalize-space(.)='']"/>
25
+
26
+ <xsl:template match="*">
27
+ <xsl:param name="indent" select="''"/>
28
+ <xsl:call-template name="newline"/>
29
+ <xsl:value-of select="$indent"/>
30
+ <xsl:choose>
31
+ <xsl:when test="count(child::*) > 0">
32
+ <xsl:copy>
33
+ <xsl:copy-of select="@*"/>
34
+ <xsl:apply-templates select="*|text()">
35
+ <xsl:with-param name="indent" select="concat ($indent, $indent-increment)"/>
36
+ </xsl:apply-templates>
37
+ <xsl:call-template name="newline"/>
38
+ <xsl:value-of select="$indent"/>
39
+ </xsl:copy>
40
+ </xsl:when>
41
+ <xsl:otherwise>
42
+ <xsl:copy-of select="."/>
43
+ </xsl:otherwise>
44
+ </xsl:choose>
45
+ </xsl:template>
46
+ </xsl:stylesheet>
@@ -201,10 +201,10 @@ module Dor
201
201
  # @option opts [Symbol] :significance which part of the version tag to increment
202
202
  def sync_then_increment_version(known_version, opts = {})
203
203
  cv = current_version_id.to_i
204
- raise Dor::Exception.new("Cannot sync to a version greater than current: #{cv}, requested #{known_version}") if cv < known_version
204
+ raise Dor::Exception, "Cannot sync to a version greater than current: #{cv}, requested #{known_version}" if cv < known_version
205
205
 
206
206
  while cv != known_version &&
207
- current_version_node.remove
207
+ current_version_node.remove
208
208
  cv = current_version_id.to_i
209
209
  end
210
210
 
@@ -1,7 +1,7 @@
1
1
  Dor::ContentMetadataDS.on_upgrade '3.6.0', 'Change contentMetadata type attribute' do |ds|
2
2
  translations = { 'googleScannedBook' => 'book', 'etd' => 'file', 'eem' => 'file' }
3
3
  translations.any? do |old_type, new_type|
4
- current_type = (ds.contentType.to_ary.first) rescue ds.contentType
4
+ current_type = ds.contentType.to_ary.first rescue ds.contentType
5
5
  (current_type == old_type) && (ds.contentType = new_type)
6
6
  end
7
7
  end
@@ -181,7 +181,7 @@ module Dor
181
181
  secondary_file['id'] = new_secondary_file_name(secondary_file['id'], max_sequence)
182
182
 
183
183
  if primary_cm.at_xpath("//file[@id = '#{secondary_file['id']}']")
184
- raise Dor::Exception.new "File '#{secondary_file['id']}' from secondary object #{src_pid} already exist in primary object: #{pid}"
184
+ raise Dor::Exception, "File '#{secondary_file['id']}' from secondary object #{src_pid} already exist in primary object: #{pid}"
185
185
  end
186
186
  end
187
187
 
@@ -5,7 +5,7 @@ module Dor
5
5
  DESC_MD_FORMATS = {
6
6
  'http://www.tei-c.org/ns/1.0' => 'tei',
7
7
  'http://www.loc.gov/mods/v3' => 'mods'
8
- }
8
+ }.freeze
9
9
  class CrosswalkError < Exception; end
10
10
 
11
11
  included do
@@ -211,7 +211,7 @@ module Dor
211
211
  def to_solr(solr_doc = {}, *args)
212
212
  super solr_doc, *args
213
213
  mods_sources = {
214
- 'sw_language_ssim' => :sw_language_facet,
214
+ 'sw_language_ssim' => :sw_language_facet,
215
215
  'sw_language_tesim' => :sw_language_facet,
216
216
  'sw_genre_ssim' => :sw_genre,
217
217
  'sw_genre_tesim' => :sw_genre,
@@ -244,7 +244,7 @@ module Dor
244
244
  title = node.text
245
245
  end
246
246
  creator_title = creator + title
247
- add_solr_value(solr_doc, 'creator_title', creator_title , :string, [:stored_sortable])
247
+ add_solr_value(solr_doc, 'creator_title', creator_title, :string, [:stored_sortable])
248
248
  rescue CrosswalkError => e
249
249
  ActiveFedora.logger.warn "Cannot index #{pid}.descMetadata: #{e.message}"
250
250
  end
@@ -35,7 +35,7 @@ module Dor
35
35
  :uri => 'https://creativecommons.org/licenses/by-nc-nd/3.0/' },
36
36
  'pdm' => { :human_readable => 'Public Domain Mark 1.0',
37
37
  :uri => 'https://creativecommons.org/publicdomain/mark/1.0/'}
38
- }
38
+ }.freeze
39
39
  OPEN_DATA_COMMONS_USE_LICENSES = {
40
40
  'pddl' => { :human_readable => 'Open Data Commons Public Domain Dedication and License 1.0',
41
41
  :uri => 'http://opendatacommons.org/licenses/pddl/1.0/' },
@@ -43,7 +43,7 @@ module Dor
43
43
  :uri => 'http://opendatacommons.org/licenses/by/1.0/' },
44
44
  'odc-odbl' => { :human_readable => 'Open Data Commons Open Database License 1.0',
45
45
  :uri => 'http://opendatacommons.org/licenses/odbl/1.0/' }
46
- }
46
+ }.freeze
47
47
 
48
48
  def to_solr(solr_doc = {}, *args)
49
49
  super(solr_doc, *args)
@@ -209,12 +209,10 @@ module Dor
209
209
  end
210
210
 
211
211
  def get_related_obj_display_title(related_obj, default_title)
212
- # desc_md_ds_title will be nil if related_obj is nil
213
- desc_md_ds_title = if related_obj
214
- desc_md_ds = related_obj.datastreams['descMetadata']
215
- desc_md_ds ? desc_md_ds.title_info.main_title.first : nil
216
- end
212
+ return default_title unless related_obj
217
213
 
214
+ desc_md_ds = related_obj.datastreams['descMetadata']
215
+ desc_md_ds_title = desc_md_ds ? desc_md_ds.title_info.main_title.first : nil
218
216
  desc_md_ds_title.present? ? desc_md_ds_title : default_title
219
217
  end
220
218
 
@@ -9,7 +9,7 @@ module Dor
9
9
  has_metadata :name => 'contentMetadata', :type => Dor::ContentMetadataDS, :label => 'Content Metadata', :control_group => 'M'
10
10
  end
11
11
 
12
- DIFF_FILENAME = 'cm_inv_diff'
12
+ DIFF_FILENAME = 'cm_inv_diff'.freeze
13
13
 
14
14
  # Deletes all cm_inv_diff files in the workspace for the Item
15
15
  def clear_diff_cache
@@ -23,20 +23,19 @@ module Dor
23
23
 
24
24
  # Retrieves file difference manifest for contentMetadata from SDR
25
25
  #
26
- # @param [String] subset keyword for file attributes :shelve, :preserve, :publish. Default is :all.
26
+ # @param [Symbol] subset keyword for file attributes :shelve, :preserve, :publish. Default is :all.
27
27
  # @param [String] version
28
- # @return [String] XML contents of cm_inv_diff manifest
28
+ # @return [Moab::FileInventoryDifference] XML contents of cm_inv_diff manifest
29
29
  def get_content_diff(subset = :all, version = nil)
30
30
  if Dor::Config.stacks.local_workspace_root.nil?
31
31
  raise Dor::ParameterError, 'Missing Dor::Config.stacks.local_workspace_root'
32
32
  end
33
33
 
34
- current_content = datastreams['contentMetadata'].content
35
- if current_content.nil?
34
+ if contentMetadata.nil?
36
35
  raise Dor::Exception, 'Missing contentMetadata datastream'
37
36
  end
38
37
 
39
- Sdr::Client.get_content_diff(pid, current_content, subset, version)
38
+ Sdr::Client.get_content_diff(pid, contentMetadata.content, subset, version)
40
39
  end
41
40
  end
42
41
  end
@@ -23,7 +23,7 @@ module Dor
23
23
  7 => 'Accessioned (indexed)',
24
24
  8 => 'Accessioned (indexed, ingested)',
25
25
  9 => 'Opened'
26
- }
26
+ }.freeze
27
27
 
28
28
  # milestones from accessioning and the order they happen in
29
29
  STEPS = {
@@ -36,7 +36,7 @@ module Dor
36
36
  'indexed' => 7,
37
37
  'shelved' => 8,
38
38
  'opened' => 9
39
- }
39
+ }.freeze
40
40
 
41
41
  # This is a work-around for some strange logic in ActiveFedora that
42
42
  # don't allow self.workflows.new? to work if we load the object using
@@ -138,7 +138,9 @@ module Dor
138
138
  # @return [String] single composed status from status_info
139
139
  def status(include_time = false)
140
140
  status_info_hash = status_info
141
- current_version, status_code, status_time = status_info_hash[:current_version], status_info_hash[:status_code], status_info_hash[:status_time]
141
+ current_version = status_info_hash[:current_version]
142
+ status_code = status_info_hash[:status_code]
143
+ status_time = status_info_hash[:status_time]
142
144
 
143
145
  # use the translation table to get the appropriate verbage for the latest step
144
146
  result = "v#{current_version} #{STATUS_CODE_DISP_TXT[status_code]}"
@@ -229,8 +231,12 @@ module Dor
229
231
  # handles formating utc date/time to human readable
230
232
  # XXX: bad form to hardcode TZ here. Code smell abounds.
231
233
  def format_date(datetime)
232
- d = datetime.is_a?(Time) ? datetime :
233
- DateTime.parse(datetime).in_time_zone(ActiveSupport::TimeZone.new('Pacific Time (US & Canada)'))
234
+ d =
235
+ if datetime.is_a?(Time)
236
+ datetime
237
+ else
238
+ DateTime.parse(datetime).in_time_zone(ActiveSupport::TimeZone.new('Pacific Time (US & Canada)'))
239
+ end
234
240
  I18n.l(d).strftime('%Y-%m-%d %I:%M%p')
235
241
  rescue
236
242
  d = datetime.is_a?(Time) ? datetime : Time.parse(datetime.to_s)
@@ -101,7 +101,7 @@ module Dor
101
101
  def self.copy_file(workspace_pathname, stacks_pathname, moab_signature)
102
102
  if stacks_pathname.exist?
103
103
  file_signature = Moab::FileSignature.new.signature_from_file(stacks_pathname)
104
- stacks_pathname.delete if (file_signature != moab_signature)
104
+ stacks_pathname.delete if file_signature != moab_signature
105
105
  end
106
106
  unless stacks_pathname.exist?
107
107
  stacks_pathname.parent.mkpath
@@ -23,9 +23,9 @@ module Dor
23
23
  end
24
24
 
25
25
  def check_objects_editable
26
- raise Dor::Exception.new("Primary object is not editable: #{@primary.pid}") unless @primary.allows_modification?
26
+ raise Dor::Exception, "Primary object is not editable: #{@primary.pid}" unless @primary.allows_modification?
27
27
  non_editable = @secondary_objs.detect {|obj| !obj.allows_modification? }
28
- raise Dor::Exception.new "Secondary object is not editable: #{non_editable.pid}" if non_editable
28
+ raise Dor::Exception, "Secondary object is not editable: #{non_editable.pid}" if non_editable
29
29
  end
30
30
 
31
31
  def move_metadata_and_content
@@ -4,7 +4,7 @@ require 'active_support/core_ext'
4
4
  module Dor
5
5
  class SearchService
6
6
 
7
- RISEARCH_TEMPLATE = "select $object from <#ri> where $object <dc:identifier> '%s'"
7
+ RISEARCH_TEMPLATE = "select $object from <#ri> where $object <dc:identifier> '%s'".freeze
8
8
  @@index_version = nil
9
9
 
10
10
  class << self
@@ -17,7 +17,7 @@ module Dor
17
17
  ids = resource["identifiers?quantity=#{quantity}"].post('').chomp.split(/\n/).collect { |id| "#{Config.suri.id_namespace}:#{id.strip}" }
18
18
  else
19
19
  repo = ActiveFedora::Base.respond_to?(:connection_for_pid) ? ActiveFedora::Base.connection_for_pid(0) : ActiveFedora.fedora.connection
20
- resp = Nokogiri::XML(repo.next_pid :numPIDs => quantity)
20
+ resp = Nokogiri::XML(repo.next_pid(numPIDs: quantity))
21
21
  ids = resp.xpath('/pidList/pid').collect { |node| node.text }
22
22
  end
23
23
  want_array ? ids : ids.first
@@ -50,6 +50,8 @@ module Dor
50
50
  def self.get_content_group_diff(dor_item)
51
51
  inventory_diff = dor_item.get_content_diff('all')
52
52
  inventory_diff.group_difference('content')
53
+ rescue Dor::Exception # no contentMetadata
54
+ Moab::FileGroupDifference.new
53
55
  end
54
56
 
55
57
  # @param [FileGroupDifference] content_group_diff
@@ -33,6 +33,7 @@ module Sdr
33
33
  Moab::SignatureCatalog.new(:digital_object_id => druid, :version_id => 0)
34
34
  end
35
35
 
36
+ # @return [Moab::FileInventoryDifference] the differences for the given content and subset
36
37
  def get_content_diff(druid, current_content, subset = :all, version = nil)
37
38
  unless %w(all shelve preserve publish).include?(subset.to_s)
38
39
  raise Dor::ParameterError, "Invalid subset value: #{subset}"
data/lib/dor/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dor
2
- VERSION = '5.6.0'
2
+ VERSION = '5.7.0'.freeze
3
3
  end
@@ -4,10 +4,10 @@ module Dor
4
4
  module Workflow
5
5
  class Graph
6
6
 
7
- FILL_COLORS = { 'waiting' => 'white', 'ready' => 'white', 'error' => '#8B0000', 'blocked' => 'white', 'completed' => 'darkgreen', 'unknown' => '#CFCFCF' }
8
- TEXT_COLORS = { 'waiting' => 'black', 'ready' => 'black', 'error' => 'white', 'blocked' => '#8B0000', 'completed' => 'white', 'unknown' => 'black' }
9
- PATTERNS = { 'waiting' => 'diagonals', 'ready' => 'filled', 'error' => 'filled', 'blocked' => 'diagonals', 'completed' => 'filled', 'unknown' => 'filled' }
10
- RESERVED_KEYS = %w(repository name)
7
+ FILL_COLORS = { 'waiting' => 'white', 'ready' => 'white', 'error' => '#8B0000', 'blocked' => 'white', 'completed' => 'darkgreen', 'unknown' => '#CFCFCF' }.freeze
8
+ TEXT_COLORS = { 'waiting' => 'black', 'ready' => 'black', 'error' => 'white', 'blocked' => '#8B0000', 'completed' => 'white', 'unknown' => 'black' }.freeze
9
+ PATTERNS = { 'waiting' => 'diagonals', 'ready' => 'filled', 'error' => 'filled', 'blocked' => 'diagonals', 'completed' => 'filled', 'unknown' => 'filled' }.freeze
10
+ RESERVED_KEYS = %w(repository name).freeze
11
11
 
12
12
  attr_reader :repo, :name, :processes, :graph, :root
13
13
 
@@ -142,7 +142,7 @@ class Graph
142
142
  edge.dir = 'both'
143
143
  edge.arrowhead = 'none'
144
144
  edge.arrowtail = 'none'
145
- edge.style = 'dashed' if (wf1 != wf2)
145
+ edge.style = 'dashed' if wf1 != wf2
146
146
  prerequisites << process
147
147
  }
148
148
  self
@@ -53,11 +53,11 @@ module Workflow
53
53
  end
54
54
 
55
55
  def ready?
56
- self.waiting? && (!prerequisite.nil?) && prerequisite.all? { |pr| (prq = owner[pr]) && prq.completed? }
56
+ self.waiting? && !prerequisite.nil? && prerequisite.all? { |pr| (prq = owner[pr]) && prq.completed? }
57
57
  end
58
58
 
59
59
  def blocked?
60
- self.waiting? && (!prerequisite.nil?) && prerequisite.any? { |pr| (prq = owner[pr]) && (prq.error? || prq.blocked?) }
60
+ self.waiting? && !prerequisite.nil? && prerequisite.any? { |pr| (prq = owner[pr]) && (prq.error? || prq.blocked?) }
61
61
  end
62
62
 
63
63
  def state
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.6.0
4
+ version: 5.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Klein
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2016-03-11 00:00:00.000000000 Z
17
+ date: 2016-03-30 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: active-fedora
@@ -120,20 +120,6 @@ dependencies:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
122
  version: '1.6'
123
- - !ruby/object:Gem::Dependency
124
- name: nokogiri-pretty
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '0.1'
130
- type: :runtime
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '0.1'
137
123
  - !ruby/object:Gem::Dependency
138
124
  name: om
139
125
  requirement: !ruby/object:Gem::Requirement
@@ -579,6 +565,7 @@ files:
579
565
  - lib/dor/datastreams/embargo_metadata_ds.rb
580
566
  - lib/dor/datastreams/events_ds.rb
581
567
  - lib/dor/datastreams/geo_metadata_ds.rb
568
+ - lib/dor/datastreams/human.xslt
582
569
  - lib/dor/datastreams/identity.xsl
583
570
  - lib/dor/datastreams/identity_metadata_ds.rb
584
571
  - lib/dor/datastreams/rights_metadata_ds.rb
@@ -665,7 +652,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
665
652
  version: 1.3.6
666
653
  requirements: []
667
654
  rubyforge_project:
668
- rubygems_version: 2.4.8
655
+ rubygems_version: 2.4.5.1
669
656
  signing_key:
670
657
  specification_version: 4
671
658
  summary: Ruby implmentation of DOR services used by the SULAIR Digital Library