ddr-models 2.9.2 → 2.10.0.rc1

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: e3024e1a5c4b9c8b8ff641f6005db555818f10f7
4
- data.tar.gz: 5b1e4a3a72f8af8d2e4a99fd9194953d46e3153a
3
+ metadata.gz: cb52395b49775aa484605d3eccc046d52a97226a
4
+ data.tar.gz: a3d47a19af939cb42b2b20c1341fb3be1b9f04d8
5
5
  SHA512:
6
- metadata.gz: 9d8cfee5e32a4617204cb5dd7bcfa062b6cb51b5c7fd761768efb32a45f917af66736cdb9cc4cac7d4028e11c16578ad7a729cffad76ab3c4e71b3dd95f52486
7
- data.tar.gz: 99bd90c593985fa393a8f0b165b28132b4fca0de2c19109cf14dd42573422992374c2d066c5bbc937f154afa30ea8fea4b862e13a3cef3d78c0980ae1acd5e76
6
+ metadata.gz: 9335f431776f65227f2ab87585e89c401a9b8a62cad9885900d59ce909ce6be00b942a509465bf14138d9283db2cd57a2e229caa0ff34d8c92bf8f6fcc8921bc
7
+ data.tar.gz: 6dc0228d4831aaa17604a9eb4b71197acee77c3738798688edfb59804f58d4f887bbcdce5e359f53e07ba8f5c2e318f912918d39c9a7a570c6706a4fa72a6451
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ spec/dummy/db/*.sqlite3
6
6
  spec/dummy/db/*.sqlite3-journal
7
7
  spec/dummy/log/*
8
8
  tmp
9
+ .byebug_history
@@ -11,8 +11,6 @@ class Item < Ddr::Models::Base
11
11
  has_many :children, property: :is_part_of, class_name: 'Component'
12
12
  belongs_to :parent, property: :is_member_of_collection, class_name: 'Collection'
13
13
 
14
- has_attributes :nested_path, datastream: Ddr::Datastreams::ADMIN_METADATA, multiple: false
15
-
16
14
  alias_method :components, :children
17
15
  alias_method :component_ids, :child_ids
18
16
 
@@ -57,12 +55,31 @@ class Item < Ddr::Models::Base
57
55
  end
58
56
 
59
57
  def add_components_to_structure(structure, structmap)
60
- count = 0
58
+ component_structure_types(sorted_children).each do |type_term, children|
59
+ div = structure.add_div(parent: structmap, type: type_term)
60
+ children.each_with_index do |child, index|
61
+ sub_div = structure.add_div(parent: div, order: index + 1)
62
+ structure.add_mptr(parent: sub_div, href: child[Ddr::Index::Fields::PERMANENT_ID])
63
+ end
64
+ end
65
+ end
66
+
67
+ def component_structure_types(sorted_children)
68
+ type_divs = {}
61
69
  sorted_children.each do |child|
62
- count += 1
63
- div = structure.add_div(parent: structmap, order: count)
64
- structure.add_mptr(parent: div, href: child[Ddr::Index::Fields::PERMANENT_ID])
70
+ term = type_term(child) || "Other"
71
+ if type_divs.has_key?(term)
72
+ type_divs[term] << child
73
+ else
74
+ type_divs[term] = [ child ]
75
+ end
65
76
  end
77
+ type_divs
78
+ end
79
+
80
+ def type_term(component_doc)
81
+ media_type = component_doc[Ddr::Index::Fields::MEDIA_TYPE].first
82
+ Ddr::Models::Structures::ComponentTypeTerm.term(media_type)
66
83
  end
67
84
 
68
85
  end
@@ -45,4 +45,5 @@ Gem::Specification.new do |s|
45
45
  s.add_development_dependency "factory_girl_rails", "~> 4.4"
46
46
  s.add_development_dependency "jettywrapper", "~> 1.8"
47
47
  s.add_development_dependency "database_cleaner"
48
+ s.add_development_dependency "byebug"
48
49
  end
@@ -12,7 +12,7 @@ module Ddr
12
12
  # Return result of fixity check
13
13
  def self._execute(object)
14
14
  Result.new(pid: object.pid).tap do |r|
15
- object.datastreams_to_validate.each do |dsid, ds|
15
+ object.datastreams_having_content.each do |dsid, ds|
16
16
  r.success &&= ds.dsChecksumValid
17
17
  r.results[dsid] = ds.profile
18
18
  end
@@ -1,5 +1,17 @@
1
1
  module Ddr::Datastreams
2
2
  class ContentDatastream < ExternalFileDatastream
3
3
 
4
+ CONTENT_CHANGED = "content_changed.content.repo_file"
5
+
6
+ around_save :notify_content_changed, if: [:external?, :dsLocation_changed?]
7
+
8
+ private
9
+
10
+ def notify_content_changed
11
+ ActiveSupport::Notifications.instrument(CONTENT_CHANGED, pid: pid) do |payload|
12
+ yield
13
+ end
14
+ end
15
+
4
16
  end
5
17
  end
@@ -15,8 +15,8 @@ module Ddr
15
15
  # Note that empty values (nil or "") are rejected from values array
16
16
  def set_values(term, values)
17
17
  vals = Array(values)
18
- .map { |v| v.to_s.strip }
19
- .reject { |v| v.blank? }
18
+ .map { |v| sanitize_value(v) }
19
+ .reject { |v| reject_value?(v) }
20
20
  begin
21
21
  self.send("#{term}=", vals)
22
22
  rescue NoMethodError
@@ -37,6 +37,19 @@ module Ddr
37
37
  super && !empty?
38
38
  end
39
39
 
40
+ private
41
+
42
+ def sanitize_value(value)
43
+ value
44
+ .to_s
45
+ .strip
46
+ .gsub(/[[:cntrl:]]/, "")
47
+ end
48
+
49
+ def reject_value?(value)
50
+ value.blank?
51
+ end
52
+
40
53
  end
41
54
  end
42
55
  end
@@ -1,16 +1,22 @@
1
1
  module Ddr::Events
2
2
  class UpdateEvent < Event
3
+
3
4
  self.description = "Object updated"
4
5
 
5
6
  def self.call(*args)
6
7
  super do |event, notification|
7
8
  attrs_changed = notification.payload[:attributes_changed]
8
9
  ds_changed = notification.payload[:datastreams_changed]
9
- event.detail = ["Attributes changed: #{attrs_changed}",
10
- "Datastreams changed: #{ds_changed.join(', ')}",
11
- event.detail,
12
- ].compact.join("\n\n")
10
+ detail = [
11
+ "Datastreams changed: #{ds_changed.join(', ')}",
12
+ event.detail,
13
+ ]
14
+ if attrs_changed.present?
15
+ detail << "Attributes changed: #{attrs_changed}"
16
+ end
17
+ event.detail = detail.compact.join("\n\n")
13
18
  end
14
19
  end
20
+
15
21
  end
16
22
  end
@@ -10,14 +10,14 @@ module Ddr::Index
10
10
  module Methods
11
11
  extend Forwardable
12
12
 
13
- delegate [:get, :paginate] => :solr
13
+ delegate [:get, :post, :paginate] => :solr
14
14
 
15
15
  def solr
16
16
  RSolr.connect(ActiveFedora.solr_config)
17
17
  end
18
18
 
19
19
  def select(params, extra={})
20
- Response.new get("select", params: params.merge(extra))
20
+ Response.new post("select", params: params.merge(extra))
21
21
  end
22
22
 
23
23
  def page(*args)
@@ -80,6 +80,7 @@ module Ddr::Index
80
80
  OBJECT_STATE = Field.new :object_state, :stored_sortable
81
81
  OBJECT_CREATE_DATE = Field.new :system_create, :stored_sortable, type: :date
82
82
  OBJECT_MODIFIED_DATE = Field.new :system_modified, :stored_sortable, type: :date
83
+ ORIGINAL_FILENAME = Field.new :original_filename, solr_name: "admin_metadata__original_filename_ssi"
83
84
  PERFORMER_FACET = Field.new :performer_facet, :facetable
84
85
  PERMANENT_ID = Field.new :permanent_id, :stored_sortable, type: :string
85
86
  PERMANENT_URL = Field.new :permanent_url, :stored_sortable, type: :string
@@ -141,6 +142,16 @@ module Ddr::Index
141
142
  end.freeze
142
143
  end
143
144
 
145
+ def self.adminmd
146
+ @adminmd ||= Ddr::Datastreams::AdministrativeMetadataDatastream.properties.map do |base, config|
147
+ begin
148
+ get(base)
149
+ rescue NameError
150
+ Field.new base, *(config.behaviors)
151
+ end
152
+ end.freeze
153
+ end
154
+
144
155
  def self.const_missing(name)
145
156
  if name == :PID
146
157
  Deprecation.warn(Ddr::Index::Fields,
@@ -82,6 +82,7 @@ module Ddr
82
82
  autoload :MetsHdr
83
83
  autoload :Mptr
84
84
  autoload :StructMap
85
+ autoload :ComponentTypeTerm
85
86
  end
86
87
 
87
88
  # Image server URL
@@ -31,10 +31,10 @@ module Ddr
31
31
  before_create :set_ingested_by, if: :performed_by, unless: :ingested_by
32
32
  before_create :grant_default_roles
33
33
 
34
- after_create :assign_permanent_id!, if: :assign_permanent_id?
35
- after_create :notify_ingest
36
-
37
34
  around_save :notify_update, unless: :new_record?
35
+ around_save :assign_permanent_id!, if: :assign_permanent_id?, on: :create
36
+
37
+ after_create :notify_ingest
38
38
 
39
39
  around_deaccession :notify_deaccession
40
40
  around_destroy :notify_delete
@@ -202,6 +202,7 @@ module Ddr
202
202
  end
203
203
 
204
204
  def assign_permanent_id!
205
+ yield
205
206
  PermanentId.assign!(self)
206
207
  end
207
208
 
@@ -16,6 +16,7 @@ module Ddr::Models
16
16
  :display_format,
17
17
  :license,
18
18
  :local_id,
19
+ :nested_path,
19
20
  :permanent_id,
20
21
  :permanent_url,
21
22
  :research_help_contact,
@@ -9,12 +9,9 @@ module Ddr
9
9
  end
10
10
 
11
11
  def structure
12
- unless @structure
13
- if datastreams[Ddr::Datastreams::STRUCT_METADATA].content
14
- @structure = Ddr::Models::Structure.new(Nokogiri::XML(datastreams[Ddr::Datastreams::STRUCT_METADATA].content))
15
- end
12
+ if datastreams[Ddr::Datastreams::STRUCT_METADATA].has_content?
13
+ Ddr::Models::Structure.new(Nokogiri::XML(datastreams[Ddr::Datastreams::STRUCT_METADATA].content))
16
14
  end
17
- @structure
18
15
  end
19
16
 
20
17
  def multires_image_file_paths
@@ -0,0 +1,29 @@
1
+ module Ddr::Models::Structures
2
+ class ComponentTypeTerm
3
+
4
+ CONFIG_FILE = ::File.join(Rails.root, 'config', 'structure_component_type.yml')
5
+
6
+ @@lookup = {}
7
+
8
+ def self.term(media_type)
9
+ hit = lookup_table.detect { |k,v| media_type =~ k }
10
+ hit.last if hit
11
+ end
12
+
13
+ def self.lookup_table
14
+ load_lookup if @@lookup.empty?
15
+ @@lookup
16
+ end
17
+
18
+ def self.load_lookup
19
+ config = YAML::load(::File.read(CONFIG_FILE))
20
+ config.each do |type_term, media_types|
21
+ media_types.each do |media_type|
22
+ lookup_key = Regexp.new("\\A#{media_type.gsub('*', '.*')}\\Z")
23
+ @@lookup[lookup_key] = type_term
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  module Ddr
2
2
  module Models
3
- VERSION = "2.9.2"
3
+ VERSION = "2.10.0.rc1"
4
4
  end
5
5
  end
@@ -0,0 +1,18 @@
1
+ # NOTE: This configuration and the associated application functionality does not
2
+ # account for precedence among the media types and associated type designations.
3
+ # In practical terms, this means that the media type for any given Component is
4
+ # to match no more than one of the indicated media type values. If the media type
5
+ # for a Component matches more than one media type value, the type designation
6
+ # that is used is arbitrary.
7
+ Documents:
8
+ - application/pdf
9
+ - application/msword
10
+ - application/vnd.openxmlformats-officedocument.wordprocessingml*
11
+ - application/vnd.ms-word*
12
+ - application/rtf
13
+ - text/*
14
+ Images:
15
+ - image/*
16
+ Media:
17
+ - audio/*
18
+ - video/*
@@ -1,65 +1,63 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="0.8.5" timestamp="7/3/15 8:29 PM">
2
+ <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="1.2.0" timestamp="10/17/17 5:48 PM">
3
3
  <identification>
4
- <identity format="Portable Document Format" mimetype="application/pdf" toolname="FITS" toolversion="0.8.5">
5
- <tool toolname="Jhove" toolversion="1.5" />
6
- <tool toolname="file utility" toolversion="5.04" />
7
- <tool toolname="Exiftool" toolversion="9.13" />
8
- <tool toolname="Droid" toolversion="6.1.3" />
9
- <tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" />
4
+ <identity format="Portable Document Format" mimetype="application/pdf" toolname="FITS" toolversion="1.2.0">
5
+ <tool toolname="Droid" toolversion="6.3" />
6
+ <tool toolname="Jhove" toolversion="1.16" />
7
+ <tool toolname="file utility" toolversion="5.25" />
8
+ <tool toolname="Exiftool" toolversion="10.00" />
9
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" />
10
10
  <tool toolname="ffident" toolversion="0.2" />
11
- <tool toolname="Tika" toolversion="1.3" />
12
- <version toolname="Jhove" toolversion="1.5">1.6</version>
13
- <externalIdentifier toolname="Droid" toolversion="6.1.3" type="puid">fmt/20</externalIdentifier>
11
+ <tool toolname="Tika" toolversion="1.10" />
12
+ <version toolname="Droid" toolversion="6.3">1.6</version>
13
+ <externalIdentifier toolname="Droid" toolversion="6.3" type="puid">fmt/20</externalIdentifier>
14
14
  </identity>
15
15
  </identification>
16
16
  <fileinfo>
17
- <size toolname="Jhove" toolversion="1.5">3786205</size>
18
- <creatingApplicationName toolname="Exiftool" toolversion="9.13" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/PREMIS Editorial Committee</creatingApplicationName>
19
- <creatingApplicationName toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/Acrobat PDFMaker 11 for Word</creatingApplicationName>
20
- <lastmodified toolname="Exiftool" toolversion="9.13" status="CONFLICT">2015:06:25 21:45:24-04:00</lastmodified>
21
- <lastmodified toolname="Tika" toolversion="1.3" status="CONFLICT">2015-06-08T21:22:35Z</lastmodified>
22
- <created toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2015:06:05 15:16:23-04:00</created>
17
+ <size toolname="Jhove" toolversion="1.16">2176353</size>
18
+ <creatingApplicationName toolname="Exiftool" toolversion="10.00">Adobe PDF Library 11.0/Acrobat PDFMaker 11 for Word</creatingApplicationName>
19
+ <lastmodified toolname="Exiftool" toolversion="10.00" status="CONFLICT">2016:01:07 09:49:50-05:00</lastmodified>
20
+ <lastmodified toolname="Tika" toolversion="1.10" status="CONFLICT">2016-01-07T14:49:50Z</lastmodified>
21
+ <created toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">2015:12:09 13:23:09-05:00</created>
23
22
  <filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/premis-3-0-final.pdf</filepath>
24
23
  <filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">premis-3-0-final.pdf</filename>
25
- <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">432ab76d650bfdc8f8d4a98cea9634bb</md5checksum>
26
- <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1435283124000</fslastmodified>
24
+ <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">58fee04df34490ee7ecf3cdd5ddafc72</md5checksum>
25
+ <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1508276630000</fslastmodified>
27
26
  </fileinfo>
28
27
  <filestatus>
29
- <well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
30
- <valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">false</valid>
31
- <message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Invalid page tree node offset=390028</message>
32
- <message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Outlines contain recursive references.</message>
28
+ <well-formed toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">true</well-formed>
29
+ <valid toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">true</valid>
33
30
  </filestatus>
34
31
  <metadata>
35
32
  <document>
36
- <title toolname="Jhove" toolversion="1.5" status="CONFLICT">CONTENTS</title>
37
- <title toolname="Exiftool" toolversion="9.13" status="CONFLICT">PREMIS Data Dictionary for Preservation Metadata, Version 3.0</title>
38
- <author toolname="Exiftool" toolversion="9.13">PREMIS Editorial Committee</author>
39
- <language toolname="Jhove" toolversion="1.5">en</language>
40
- <pageCount toolname="Exiftool" toolversion="9.13">282</pageCount>
41
- <isTagged toolname="Jhove" toolversion="1.5" status="CONFLICT">no</isTagged>
42
- <isTagged toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">yes</isTagged>
43
- <hasOutline toolname="Jhove" toolversion="1.5">yes</hasOutline>
44
- <hasAnnotations toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">no</hasAnnotations>
45
- <isRightsManaged toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">no</isRightsManaged>
46
- <isProtected toolname="Exiftool" toolversion="9.13">no</isProtected>
47
- <hasForms toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="SINGLE_RESULT">yes</hasForms>
48
- <subject toolname="Tika" toolversion="1.3" status="SINGLE_RESULT">PREMIS</subject>
33
+ <title toolname="Exiftool" toolversion="10.00">PREMIS Data Dictionary for Preservation Metadata, Version 3.0</title>
34
+ <author toolname="Exiftool" toolversion="10.00">PREMIS Editorial Committee</author>
35
+ <language toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">en</language>
36
+ <pageCount toolname="Exiftool" toolversion="10.00">283</pageCount>
37
+ <isTagged toolname="Exiftool" toolversion="10.00" status="CONFLICT">yes</isTagged>
38
+ <isTagged toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">no</isTagged>
39
+ <hasOutline toolname="Jhove" toolversion="1.16">no</hasOutline>
40
+ <hasAnnotations toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">no</hasAnnotations>
41
+ <subject toolname="Exiftool" toolversion="10.00" status="CONFLICT">PREMIS, Data Dictionary, Version 3.0, preservation metadata, library of congress</subject>
42
+ <subject toolname="Tika" toolversion="1.10" status="CONFLICT">PREMIS Data Dictionary, Version 3.0</subject>
43
+ <description toolname="Exiftool" toolversion="10.00">PREMIS Data Dictionary, Version 3.0</description>
44
+ <hasForms toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">no</hasForms>
49
45
  </document>
50
46
  </metadata>
51
- <statistics fitsExecutionTime="2977">
47
+ <statistics fitsExecutionTime="1373">
48
+ <tool toolname="MediaInfo" toolversion="0.7.75" status="did not run" />
52
49
  <tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
53
50
  <tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
54
- <tool toolname="Jhove" toolversion="1.5" executionTime="1034" />
55
- <tool toolname="file utility" toolversion="5.04" executionTime="912" />
56
- <tool toolname="Exiftool" toolversion="9.13" executionTime="842" />
57
- <tool toolname="Droid" toolversion="6.1.3" executionTime="336" />
58
- <tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" executionTime="2192" />
59
- <tool toolname="OIS File Information" toolversion="0.2" executionTime="351" />
51
+ <tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
52
+ <tool toolname="Droid" toolversion="6.3" executionTime="144" />
53
+ <tool toolname="Jhove" toolversion="1.16" executionTime="488" />
54
+ <tool toolname="file utility" toolversion="5.25" executionTime="471" />
55
+ <tool toolname="Exiftool" toolversion="10.00" executionTime="479" />
56
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" executionTime="454" />
57
+ <tool toolname="OIS File Information" toolversion="0.2" executionTime="141" />
60
58
  <tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
61
- <tool toolname="ffident" toolversion="0.2" executionTime="410" />
62
- <tool toolname="Tika" toolversion="1.3" executionTime="2911" />
59
+ <tool toolname="ffident" toolversion="0.2" executionTime="449" />
60
+ <tool toolname="Tika" toolversion="1.10" executionTime="1337" />
63
61
  </statistics>
64
62
  </fits>
65
63
 
@@ -1,59 +1,60 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="0.8.5" timestamp="7/28/15 4:34 PM">
2
+ <fits xmlns="http://hul.harvard.edu/ois/xml/ns/fits/fits_output" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/fits/fits_output http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd" version="1.2.0" timestamp="10/17/17 5:47 PM">
3
3
  <identification>
4
- <identity format="JPEG File Interchange Format" mimetype="image/jpeg" toolname="FITS" toolversion="0.8.5">
5
- <tool toolname="Jhove" toolversion="1.5" />
6
- <tool toolname="file utility" toolversion="5.04" />
7
- <tool toolname="Exiftool" toolversion="9.13" />
8
- <tool toolname="Droid" toolversion="6.1.3" />
9
- <tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" />
10
- <version toolname="Jhove" toolversion="1.5">1.01</version>
11
- <externalIdentifier toolname="Droid" toolversion="6.1.3" type="puid">fmt/43</externalIdentifier>
4
+ <identity format="JPEG File Interchange Format" mimetype="image/jpeg" toolname="FITS" toolversion="1.2.0">
5
+ <tool toolname="Droid" toolversion="6.3" />
6
+ <tool toolname="Jhove" toolversion="1.16" />
7
+ <tool toolname="file utility" toolversion="5.25" />
8
+ <tool toolname="Exiftool" toolversion="10.00" />
9
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" />
10
+ <version toolname="Droid" toolversion="6.3">1.01</version>
11
+ <externalIdentifier toolname="Droid" toolversion="6.3" type="puid">fmt/43</externalIdentifier>
12
12
  </identity>
13
13
  </identification>
14
14
  <fileinfo>
15
- <size toolname="Jhove" toolversion="1.5">94497</size>
16
- <creatingApplicationName toolname="Jhove" toolversion="1.5">File source: https://commons.wikimedia.org/wiki/File:Dante_Gabriel_Rossetti_-_Joan_of_Arc_(1882).jpg</creatingApplicationName>
17
- <lastmodified toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2015:07:28 10:19:55-04:00</lastmodified>
18
- <filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/Joan_of_Arc.jpg</filepath>
19
- <filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">Joan_of_Arc.jpg</filename>
20
- <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">bc575fbcbffff0248f5da3dddf8afd69</md5checksum>
21
- <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1438093195000</fslastmodified>
15
+ <size toolname="Jhove" toolversion="1.16">97220</size>
16
+ <creatingApplicationName toolname="Jhove" toolversion="1.16">File source: https://commons.wikimedia.org/wiki/File:Dante_Gabriel_Rossetti_-_Joan_of_Arc_(1882).jpg</creatingApplicationName>
17
+ <filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/Dante_Gabriel_Rossetti_-_Joan_of_Arc_(1882).jpg</filepath>
18
+ <filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">Dante_Gabriel_Rossetti_-_Joan_of_Arc_(1882).jpg</filename>
19
+ <md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">c21d5fecf9d0310858d2bfe44e5436ce</md5checksum>
20
+ <fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1508276690000</fslastmodified>
22
21
  </fileinfo>
23
22
  <filestatus>
24
- <well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
25
- <valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</valid>
23
+ <well-formed toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">true</well-formed>
24
+ <valid toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">true</valid>
26
25
  </filestatus>
27
26
  <metadata>
28
27
  <image>
29
- <byteOrder toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">big endian</byteOrder>
30
- <compressionScheme toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">JPEG (old-style)</compressionScheme>
31
- <imageWidth toolname="Jhove" toolversion="1.5">500</imageWidth>
32
- <imageHeight toolname="Jhove" toolversion="1.5">569</imageHeight>
33
- <colorSpace toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">YCbCr</colorSpace>
34
- <iccProfileName toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">c2</iccProfileName>
35
- <YCbCrSubSampling toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">1 1</YCbCrSubSampling>
36
- <samplingFrequencyUnit toolname="Jhove" toolversion="1.5">in.</samplingFrequencyUnit>
37
- <xSamplingFrequency toolname="Jhove" toolversion="1.5">128</xSamplingFrequency>
38
- <ySamplingFrequency toolname="Jhove" toolversion="1.5">128</ySamplingFrequency>
39
- <bitsPerSample toolname="Jhove" toolversion="1.5">8 8 8</bitsPerSample>
40
- <samplesPerPixel toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">3</samplesPerPixel>
41
- <lightSource toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="SINGLE_RESULT">unknown</lightSource>
42
- <iccProfileVersion toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2.1.0</iccProfileVersion>
28
+ <byteOrder toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">big endian</byteOrder>
29
+ <compressionScheme toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">JPEG</compressionScheme>
30
+ <imageWidth toolname="Jhove" toolversion="1.16">512</imageWidth>
31
+ <imageHeight toolname="Exiftool" toolversion="10.00">583</imageHeight>
32
+ <colorSpace toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">YCbCr</colorSpace>
33
+ <iccProfileName toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">c2</iccProfileName>
34
+ <YCbCrSubSampling toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">1 1</YCbCrSubSampling>
35
+ <samplingFrequencyUnit toolname="Jhove" toolversion="1.16">in.</samplingFrequencyUnit>
36
+ <xSamplingFrequency toolname="Exiftool" toolversion="10.00">128</xSamplingFrequency>
37
+ <ySamplingFrequency toolname="Exiftool" toolversion="10.00">128</ySamplingFrequency>
38
+ <bitsPerSample toolname="Jhove" toolversion="1.16">8 8 8</bitsPerSample>
39
+ <samplesPerPixel toolname="Jhove" toolversion="1.16" status="SINGLE_RESULT">3</samplesPerPixel>
40
+ <lightSource toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">unknown</lightSource>
41
+ <iccProfileVersion toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">2.1.0</iccProfileVersion>
43
42
  </image>
44
43
  </metadata>
45
- <statistics fitsExecutionTime="897">
44
+ <statistics fitsExecutionTime="722">
45
+ <tool toolname="MediaInfo" toolversion="0.7.75" status="did not run" />
46
46
  <tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
47
47
  <tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
48
- <tool toolname="Jhove" toolversion="1.5" executionTime="728" />
49
- <tool toolname="file utility" toolversion="5.04" executionTime="662" />
50
- <tool toolname="Exiftool" toolversion="9.13" executionTime="718" />
51
- <tool toolname="Droid" toolversion="6.1.3" executionTime="85" />
52
- <tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" executionTime="664" />
53
- <tool toolname="OIS File Information" toolversion="0.2" executionTime="82" />
48
+ <tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
49
+ <tool toolname="Droid" toolversion="6.3" executionTime="151" />
50
+ <tool toolname="Jhove" toolversion="1.16" executionTime="644" />
51
+ <tool toolname="file utility" toolversion="5.25" executionTime="545" />
52
+ <tool toolname="Exiftool" toolversion="10.00" executionTime="629" />
53
+ <tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" executionTime="592" />
54
+ <tool toolname="OIS File Information" toolversion="0.2" executionTime="148" />
54
55
  <tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
55
- <tool toolname="ffident" toolversion="0.2" executionTime="315" />
56
- <tool toolname="Tika" toolversion="1.3" executionTime="240" />
56
+ <tool toolname="ffident" toolversion="0.2" executionTime="537" />
57
+ <tool toolname="Tika" toolversion="1.10" executionTime="635" />
57
58
  </statistics>
58
59
  </fits>
59
60
 
@@ -39,23 +39,23 @@ module Ddr::Managers
39
39
 
40
40
  its(:fits?) { is_expected.to be true }
41
41
 
42
- its(:created) { is_expected.to eq(["2015:06:05 15:16:23-04:00"]) }
43
- its(:creating_application) { is_expected.to contain_exactly("Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/PREMIS Editorial Committee", "Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/Acrobat PDFMaker 11 for Word") }
44
- its(:extent) { is_expected.to eq(["3786205"]) }
45
- its(:file_size) { is_expected.to eq([3786205]) }
46
- its(:fits_version) { is_expected.to eq("0.8.5") }
42
+ its(:created) { is_expected.to eq(["2015:12:09 13:23:09-05:00"]) }
43
+ its(:creating_application) { is_expected.to contain_exactly("Adobe PDF Library 11.0/Acrobat PDFMaker 11 for Word") }
44
+ its(:extent) { is_expected.to eq(["2176353"]) }
45
+ its(:file_size) { is_expected.to eq([2176353]) }
46
+ its(:fits_version) { is_expected.to eq("1.2.0") }
47
47
  its(:format_label) { is_expected.to eq(["Portable Document Format"]) }
48
48
  its(:format_version) { is_expected.to eq(["1.6"]) }
49
- its(:last_modified) { is_expected.to eq(["2015-06-08T21:22:35Z"]) }
50
- its(:md5) { is_expected.to eq("432ab76d650bfdc8f8d4a98cea9634bb") }
49
+ its(:last_modified) { is_expected.to eq(["2016-01-07T14:49:50Z"]) }
50
+ its(:md5) { is_expected.to eq("58fee04df34490ee7ecf3cdd5ddafc72") }
51
51
  its(:media_type) { is_expected.to eq(["application/pdf"]) }
52
52
  its(:pronom_identifier) { is_expected.to eq(["fmt/20"]) }
53
- its(:valid) { is_expected.to eq(["false"]) }
53
+ its(:valid) { is_expected.to eq(["true"]) }
54
54
  its(:well_formed) { is_expected.to eq(["true"]) }
55
55
 
56
56
  describe "datetime fields" do
57
- its(:creation_time) { is_expected.to contain_exactly(DateTime.parse("2015-06-05 15:16:23-04:00").to_time.utc) }
58
- its(:modification_time) { is_expected.to contain_exactly(DateTime.parse("2015-06-08T21:22:35Z").to_time.utc) }
57
+ its(:creation_time) { is_expected.to contain_exactly(DateTime.parse("2015-12-09 13:23:09-05:00").to_time.utc) }
58
+ its(:modification_time) { is_expected.to contain_exactly(DateTime.parse("2016-01-07T14:49:50Z").to_time.utc) }
59
59
  end
60
60
  end
61
61
 
@@ -73,8 +73,8 @@ module Ddr::Managers
73
73
  before do
74
74
  obj.fits.content = fixture_file_upload(File.join("fits", "image.xml"))
75
75
  end
76
- its(:image_width) { is_expected.to eq(["500"]) }
77
- its(:image_height) { is_expected.to eq(["569"]) }
76
+ its(:image_width) { is_expected.to eq(["512"]) }
77
+ its(:image_height) { is_expected.to eq(["583"]) }
78
78
  its(:color_space) { is_expected.to eq(["YCbCr"]) }
79
79
  its(:icc_profile_name) { is_expected.to eq(["c2"]) }
80
80
  its(:icc_profile_version) { is_expected.to eq(["2.1.0"]) }
@@ -91,6 +91,10 @@ module Ddr::Datastreams
91
91
  subject.set_values :type, [ "Image", "Still Image " ]
92
92
  expect(subject.type).to eq([ "Image", "Still Image" ])
93
93
  end
94
+ it "strips controls characters from values" do
95
+ subject.set_values :type, [ "Image", "Still\f Image" ]
96
+ expect(subject.type).to eq([ "Image", "Still Image" ])
97
+ end
94
98
  end
95
99
  describe "#add_value" do
96
100
  it "should add the supplied value to those of the term" do
@@ -66,8 +66,10 @@ RSpec.describe Item, type: :model do
66
66
  end
67
67
  end
68
68
  describe "when the item has components" do
69
- let(:comp1) { FactoryGirl.create(:component) }
70
- let(:comp2) { FactoryGirl.create(:component) }
69
+ let(:comp1) { Component.new }
70
+ let(:comp2) { Component.new }
71
+ let(:comp3) { Component.new }
72
+ let(:comp4) { Component.new }
71
73
  let(:expected) do
72
74
  xml = <<-EOS
73
75
  <mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
@@ -77,11 +79,23 @@ RSpec.describe Item, type: :model do
77
79
  </agent>
78
80
  </metsHdr>
79
81
  <structMap TYPE="#{Ddr::Models::Structure::TYPE_DEFAULT}">
80
- <div ORDER="1">
81
- <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4bbb" />
82
+ <div TYPE="Documents">
83
+ <div ORDER="1">
84
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4ccc" />
85
+ </div>
82
86
  </div>
83
- <div ORDER="2">
84
- <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4aaa" />
87
+ <div TYPE="Images">
88
+ <div ORDER="1">
89
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4bbb" />
90
+ </div>
91
+ <div ORDER="2">
92
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4aaa" />
93
+ </div>
94
+ </div>
95
+ <div TYPE="Other">
96
+ <div ORDER="1">
97
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4ddd" />
98
+ </div>
85
99
  </div>
86
100
  </structMap>
87
101
  </mets>
@@ -89,20 +103,32 @@ RSpec.describe Item, type: :model do
89
103
  xml
90
104
  end
91
105
  before do
92
- comp1.local_id = "test002"
106
+ comp1.local_id = "test001002"
93
107
  comp1.permanent_id = "ark:/99999/fk4aaa"
108
+ comp1.upload fixture_file_upload("imageB.tif", "image/tiff")
94
109
  comp1.save!
95
- comp2.local_id = "test001"
110
+ comp2.local_id = "test001001"
96
111
  comp2.permanent_id = "ark:/99999/fk4bbb"
112
+ comp2.upload fixture_file_upload("imageA.tif", "image/tiff")
97
113
  comp2.save!
114
+ comp3.local_id = "test001"
115
+ comp3.permanent_id = "ark:/99999/fk4ccc"
116
+ comp3.upload fixture_file_upload("sample.pdf", "application/pdf")
117
+ comp3.save!
118
+ comp4.local_id = "test123"
119
+ comp4.permanent_id = "ark:/99999/fk4ddd"
120
+ comp4.upload fixture_file_upload("abcd1234.vtt", "application/octet-stream")
121
+ comp4.save!
98
122
  subject.children << comp1
99
123
  subject.children << comp2
124
+ subject.children << comp3
125
+ subject.children << comp4
100
126
  subject.save!
101
- allow(SecureRandom).to receive(:uuid).and_return("abc-def", "ghi-jkl")
102
127
  end
103
128
  after do
104
129
  comp1.destroy
105
130
  comp2.destroy
131
+ comp3.destroy
106
132
  end
107
133
  it "should be the appropriate structure" do
108
134
  expect(subject.default_structure.to_xml).to be_equivalent_to(expected)
@@ -11,10 +11,6 @@ module Ddr::Models
11
11
  allow(described_class.identifier_class).to receive(:find).with("foo") { id }
12
12
  allow(Ddr::Models).to receive(:auto_assign_permanent_id) { true }
13
13
  end
14
- after do
15
- obj.permanent_id = nil
16
- obj.save!
17
- end
18
14
  it "assigns a permanent id to the object" do
19
15
  obj.reload
20
16
  expect(obj.permanent_id).to eq("foo")
@@ -0,0 +1,14 @@
1
+ module Ddr::Models::Structures
2
+ RSpec.describe ComponentTypeTerm do
3
+
4
+ it "should return the correct term" do
5
+ expect(described_class.term('image/tiff')).to eq("Images")
6
+ expect(described_class.term('audio/x-wav')).to eq("Media")
7
+ expect(described_class.term('video/quicktime')).to eq("Media")
8
+ expect(described_class.term('text/plain')).to eq("Documents")
9
+ expect(described_class.term('application/pdf')).to eq("Documents")
10
+ expect(described_class.term('application/vnd.openxmlformats-officedocument.wordprocessingml.document')).to eq("Documents")
11
+ expect(described_class.term('application/vnd.ms-access')).to be nil
12
+ end
13
+ end
14
+ end
@@ -69,6 +69,13 @@ RSpec.shared_examples "an object that can have content" do
69
69
  expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
70
70
  subject.save
71
71
  end
72
+ it "should notify that content has changed" do
73
+ callback = lambda { |*args| args }
74
+ ActiveSupport::Notifications.subscribed(callback, "content_changed.content.repo_file") do
75
+ expect(callback).to receive(:call) { nil }
76
+ subject.save
77
+ end
78
+ end
72
79
  end
73
80
 
74
81
  context "and it's an existing object with content" do
@@ -78,6 +85,13 @@ RSpec.shared_examples "an object that can have content" do
78
85
  expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
79
86
  subject.upload! file
80
87
  end
88
+ it "should notify that content has changed" do
89
+ callback = lambda { |*args| args }
90
+ ActiveSupport::Notifications.subscribed(callback, "content_changed.content.repo_file") do
91
+ expect(callback).to receive(:call) { nil }
92
+ subject.upload! file
93
+ end
94
+ end
81
95
  context "and it is saved with :skip_update_derivatives=>true" do
82
96
  it "does not generate derivatives" do
83
97
  expect_any_instance_of(Ddr::Managers::DerivativesManager).not_to receive(:update_derivatives)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddr-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.2
4
+ version: 2.10.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Coble
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-31 00:00:00.000000000 Z
12
+ date: 2017-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -393,6 +393,20 @@ dependencies:
393
393
  - - ">="
394
394
  - !ruby/object:Gem::Version
395
395
  version: '0'
396
+ - !ruby/object:Gem::Dependency
397
+ name: byebug
398
+ requirement: !ruby/object:Gem::Requirement
399
+ requirements:
400
+ - - ">="
401
+ - !ruby/object:Gem::Version
402
+ version: '0'
403
+ type: :development
404
+ prerelease: false
405
+ version_requirements: !ruby/object:Gem::Requirement
406
+ requirements:
407
+ - - ">="
408
+ - !ruby/object:Gem::Version
409
+ version: '0'
396
410
  description: Models used in the Duke Digital Repository
397
411
  email:
398
412
  - lib-drs@duke.edu
@@ -580,6 +594,7 @@ files:
580
594
  - lib/ddr/models/streamable.rb
581
595
  - lib/ddr/models/structure.rb
582
596
  - lib/ddr/models/structures/agent.rb
597
+ - lib/ddr/models/structures/component_type_term.rb
583
598
  - lib/ddr/models/structures/div.rb
584
599
  - lib/ddr/models/structures/f_locat.rb
585
600
  - lib/ddr/models/structures/file.rb
@@ -664,6 +679,7 @@ files:
664
679
  - spec/dummy/config/locales/en.yml
665
680
  - spec/dummy/config/routes.rb
666
681
  - spec/dummy/config/secrets.yml
682
+ - spec/dummy/config/structure_component_type.yml
667
683
  - spec/dummy/db/schema.rb
668
684
  - spec/dummy/lib/assets/.keep
669
685
  - spec/dummy/log/.keep
@@ -734,6 +750,7 @@ files:
734
750
  - spec/models/solr_document_spec.rb
735
751
  - spec/models/structure_spec.rb
736
752
  - spec/models/structures/agent_spec.rb
753
+ - spec/models/structures/component_type_term_spec.rb
737
754
  - spec/models/structures/div_spec.rb
738
755
  - spec/models/structures/f_locat_spec.rb
739
756
  - spec/models/structures/file_grp_spec.rb
@@ -757,7 +774,7 @@ files:
757
774
  - spec/support/shared_examples_for_events.rb
758
775
  - spec/support/shared_examples_for_governables.rb
759
776
  - spec/support/shared_examples_for_has_content.rb
760
- - spec/support/shared_examples_for_has_intermediate_spec.rb
777
+ - spec/support/shared_examples_for_has_intermediate_file.rb
761
778
  - spec/support/shared_examples_for_indexing.rb
762
779
  - spec/support/shared_examples_for_non_collection_models.rb
763
780
  - spec/support/shared_examples_for_publication.rb
@@ -781,9 +798,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
781
798
  version: '0'
782
799
  required_rubygems_version: !ruby/object:Gem::Requirement
783
800
  requirements:
784
- - - ">="
801
+ - - ">"
785
802
  - !ruby/object:Gem::Version
786
- version: '0'
803
+ version: 1.3.1
787
804
  requirements: []
788
805
  rubyforge_project:
789
806
  rubygems_version: 2.6.11
@@ -852,6 +869,7 @@ test_files:
852
869
  - spec/dummy/config/locales/en.yml
853
870
  - spec/dummy/config/routes.rb
854
871
  - spec/dummy/config/secrets.yml
872
+ - spec/dummy/config/structure_component_type.yml
855
873
  - spec/dummy/db/schema.rb
856
874
  - spec/dummy/lib/assets/.keep
857
875
  - spec/dummy/log/.keep
@@ -922,6 +940,7 @@ test_files:
922
940
  - spec/models/solr_document_spec.rb
923
941
  - spec/models/structure_spec.rb
924
942
  - spec/models/structures/agent_spec.rb
943
+ - spec/models/structures/component_type_term_spec.rb
925
944
  - spec/models/structures/div_spec.rb
926
945
  - spec/models/structures/f_locat_spec.rb
927
946
  - spec/models/structures/file_grp_spec.rb
@@ -945,7 +964,7 @@ test_files:
945
964
  - spec/support/shared_examples_for_events.rb
946
965
  - spec/support/shared_examples_for_governables.rb
947
966
  - spec/support/shared_examples_for_has_content.rb
948
- - spec/support/shared_examples_for_has_intermediate_spec.rb
967
+ - spec/support/shared_examples_for_has_intermediate_file.rb
949
968
  - spec/support/shared_examples_for_indexing.rb
950
969
  - spec/support/shared_examples_for_non_collection_models.rb
951
970
  - spec/support/shared_examples_for_publication.rb