dor-services 5.10.4 → 5.11.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: 5c643c1a3d63b56fd2e74475941e379a93a7220a
4
- data.tar.gz: 7b7f607b5a01f5acf6b3e876e59f9954e4ae0782
3
+ metadata.gz: b43e614c997ae6368c5a7b14cc78ce07ae8cbfc8
4
+ data.tar.gz: aa9935c4a84262fcd5f6f8b18f3f8eead8530a5c
5
5
  SHA512:
6
- metadata.gz: fb4b9b98f90f2b21061f5b563d1574434baa47894f3d8cc0abc2d7fef9e667633272c431198ed75c6d388be8262c6ca1d3274b06f96e31ea3c88fef30bbbed8c
7
- data.tar.gz: 66b565537443097f8b2bc32538cad5bffbdc3bb97595dd28cca1cdd2801981c07e936ca73bde863fd8d9ef57a9f673dd877742e289d8bcd93fe40562470b398e
6
+ metadata.gz: cde8359eab91eaa96ff7773ec814b0bcfafa8a6e208c7179aa8b82bfb050b1bce9b853b7d705b38265e300482813c9f72cacf6e3e83e4de091e8c8b34bc7f412
7
+ data.tar.gz: 3cc30b9150f706c3f97858c6bf8109d6529f24f16b24d242f9bfa4cb38fddd287fc63c5893632a46cdab336633568ef5e168d8f8c0b11589ba10d5e25164a50c
@@ -205,6 +205,25 @@ module Dor
205
205
  desc_md_ds_title.present? ? desc_md_ds_title : default_title
206
206
  end
207
207
 
208
+ # a regex that can be used to identify the last part of a druid (e.g. oo000oo0001)
209
+ # @return [Regex] a regular expression to identify the ID part of the druid
210
+ def pid_regex
211
+ /[a-zA-Z]{2}[0-9]{3}[a-zA-Z]{2}[0-9]{4}/
212
+ end
213
+
214
+ # a regex that can be used to identify a full druid with prefix (e.g. druid:oo000oo0001)
215
+ # @return [Regex] a regular expression to identify a full druid
216
+ def druid_regex
217
+ /druid:#{pid_regex}/
218
+ end
219
+
220
+ # Since purl does not use the druid: prefix but much of dor does, use this function to strip the druid: if needed
221
+ # @return [String] the druid sans the druid: or if there was no druid: prefix, the entire string you passed
222
+ def remove_druid_prefix(druid=id)
223
+ result=druid.match(/#{pid_regex}/)
224
+ result.nil? ? druid : result[0] # if no matches, return the string passed in, otherwise return the match
225
+ end
226
+
208
227
  private
209
228
 
210
229
  def solrize_related_obj_titles(solr_doc, relationships, title_hash, union_field_name, nonhydrus_field_name, hydrus_field_name)
@@ -10,6 +10,59 @@ module Dor
10
10
  include Itemizable
11
11
  include Rightsable
12
12
 
13
+ # Compute the thumbnail for this object following the rules at https://consul.stanford.edu/display/chimera/The+Rules+of+Thumb
14
+ # @return [String] the computed thumb filename, with the druid prefix and a slash in front of it, e.g. oo000oo0001/filenamewith space.jp2
15
+ def thumb
16
+ return if contentMetadata.nil?
17
+ cm = contentMetadata.ng_xml
18
+ mime_type_finder = "@mimetype='image/jp2' or @mimeType='image/jp2'" # allow the mimetype attribute to be lower or camelcase when searching to make it more robust
19
+ thumb_image=nil
20
+
21
+ # these are the finders we will use to search for a thumb resource in contentMetadata, they will be searched in the order provided, stopping when one is reached
22
+ thumb_xpath_finders = [
23
+ {image_type: 'local', finder: "/contentMetadata/resource[@type='thumb' and @thumb='yes']/file[#{mime_type_finder}]"}, # first find a file of mimetype jp2 explicitly marked as a thumb in the resource type and with a thumb=yes attribute
24
+ {image_type: 'external', finder: "/contentMetadata/resource[@type='thumb' and @thumb='yes']/externalFile[#{mime_type_finder}]"}, # same thing for external files
25
+ {image_type: 'local', finder: "/contentMetadata/resource[(@type='page' or @type='image') and @thumb='yes']/file[#{mime_type_finder}]"},# next find any image or page resource types with the thumb=yes attribute of mimetype jp2
26
+ {image_type: 'external', finder: "/contentMetadata/resource[(@type='page' or @type='image') and @thumb='yes']/externalFile[#{mime_type_finder}]"},# same thing for external file
27
+ {image_type: 'local', finder: "/contentMetadata/resource[@type='thumb']/file[#{mime_type_finder}]"}, # next find a file of mimetype jp2 and resource type=thumb but not marked with the thumb directive
28
+ {image_type: 'external', finder: "/contentMetadata/resource[@type='thumb']/externalFile[#{mime_type_finder}]"}, # same thing for external file
29
+ {image_type: 'local', finder: "/contentMetadata/resource[@type='page' or @type='image']/file[#{mime_type_finder}]"}, # finally find the first page or image resource of mimetype jp2
30
+ {image_type: 'external', finder: "/contentMetadata/resource[@type='page' or @type='image']/externalFile[#{mime_type_finder}]"} # same thing for external file
31
+ ]
32
+
33
+ thumb_xpath_finders.each do |search_path|
34
+ thumb_files = cm.xpath(search_path[:finder]) # look for a thumb
35
+ if thumb_files.size > 0 # if we find one, return the filename based on whether it is a local file or external file
36
+ if search_path[:image_type] == 'local'
37
+ thumb_image="#{remove_druid_prefix}/#{thumb_files[0]['id']}"
38
+ else
39
+ thumb_image="#{remove_druid_prefix(thumb_files[0]['objectId'])}/#{thumb_files[0]['fileId']}"
40
+ end
41
+ break # break out of the loop so we stop searching
42
+ end
43
+ end
44
+
45
+ thumb_image
46
+ end
47
+
48
+ # Return a URI encoded version of the thumb image for use by indexers (leaving the extension of the filename)
49
+ # @return [String] URI encoded version of the thumb with the druid prefix, e.g. oo000oo0001%2Ffilenamewith%20space.jp2
50
+ def encoded_thumb
51
+ thumb_image = thumb # store the result locally, so we don't have to compute each time we use it below
52
+ return unless thumb_image
53
+ thumb_druid=thumb_image.split('/').first # the druid (before the first slash)
54
+ thumb_filename=thumb_image.split(/#{pid_regex}[\/]/).last # everything after the druid
55
+ "#{thumb_druid}%2F#{URI.escape(thumb_filename)}"
56
+ end
57
+
58
+ # Return a full qualified thumbnail image URL if the thumb is computable
59
+ # @return [String] fully qualified image URL for the computed thumbnail, e.g. https://stacks.stanford.edu/image/iiif/oo000oo0001%2Ffilenamewith%20space/full
60
+ def thumb_url
61
+ return unless encoded_thumb
62
+ thumb_basename=File.basename(encoded_thumb, File.extname(encoded_thumb)) # strip the extension for URL generation
63
+ "https://#{Dor::Config.stacks.host}/image/iiif/#{thumb_basename}/full/!400,400/0/default.jpg"
64
+ end
65
+
13
66
  def public_relationships
14
67
  include_elements = ['fedora:isMemberOf', 'fedora:isMemberOfCollection', 'fedora:isConstituentOf']
15
68
  rels_doc = Nokogiri::XML(datastreams['RELS-EXT'].content)
@@ -41,9 +94,11 @@ module Dor
41
94
  rels = public_relationships.root
42
95
  pub.add_child(rels.clone) unless rels.nil? # TODO: Should never be nil in practice; working around an ActiveFedora quirk for testing
43
96
  pub.add_child(generate_dublin_core.root.clone)
97
+ pub.add_child(Nokogiri::XML(generate_public_desc_md).root.clone) if metadata_format == 'mods'
44
98
  pub.add_child(Nokogiri(generate_release_xml).root.clone) unless release_xml.children.size == 0 # If there are no release_tags, this prevents an empty <releaseData/> from being added
45
99
  # Note we cannot base this on if an individual object has release tags or not, because the collection may cause one to be generated for an item,
46
100
  # so we need to calculate it and then look at the final result.s
101
+ pub.add_child(Nokogiri("<thumb>#{thumb}</thumb>").root.clone) unless thumb.nil?
47
102
  new_pub = Nokogiri::XML(pub.to_xml) { |x| x.noblanks }
48
103
  new_pub.encoding = 'UTF-8'
49
104
  new_pub.to_xml
@@ -284,14 +284,6 @@ module Dor
284
284
  end
285
285
  end
286
286
 
287
- # Since purl does not use the druid: prefix but much of dor does, use this function to strip the druid: if needed
288
- # @return [String] the druid sans the druid: or if there was no druid: prefix, the entire string you passed
289
- def remove_druid_prefix
290
- druid_prefix = 'druid:'
291
- return id.split(druid_prefix)[1] if id.split(druid_prefix).size > 1
292
- druid
293
- end
294
-
295
287
  # Take the and create the entire purl url that will usable for the open method in open-uri, returns http
296
288
  # @return [String] the full url
297
289
  def form_purl_url
data/lib/dor/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dor
2
- VERSION = '5.10.4'.freeze
2
+ VERSION = '5.11.0'.freeze
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.10.4
4
+ version: 5.11.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-09-29 00:00:00.000000000 Z
17
+ date: 2016-10-05 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: active-fedora