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 +4 -4
- data/.gitignore +1 -0
- data/app/models/item.rb +23 -6
- data/ddr-models.gemspec +1 -0
- data/lib/ddr/actions/fixity_check.rb +1 -1
- data/lib/ddr/datastreams/content_datastream.rb +12 -0
- data/lib/ddr/datastreams/metadata_datastream.rb +15 -2
- data/lib/ddr/events/update_event.rb +10 -4
- data/lib/ddr/index/connection.rb +2 -2
- data/lib/ddr/index/fields.rb +11 -0
- data/lib/ddr/models.rb +1 -0
- data/lib/ddr/models/base.rb +4 -3
- data/lib/ddr/models/has_admin_metadata.rb +1 -0
- data/lib/ddr/models/has_struct_metadata.rb +2 -5
- data/lib/ddr/models/structures/component_type_term.rb +29 -0
- data/lib/ddr/models/version.rb +1 -1
- data/spec/dummy/config/structure_component_type.yml +18 -0
- data/spec/fixtures/fits/document.xml +42 -44
- data/spec/fixtures/fits/image.xml +42 -41
- data/spec/managers/technical_metadata_manager_spec.rb +12 -12
- data/spec/models/descriptive_metadata_datastream_spec.rb +4 -0
- data/spec/models/item_spec.rb +35 -9
- data/spec/models/permanent_id_spec.rb +0 -4
- data/spec/models/structures/component_type_term_spec.rb +14 -0
- data/spec/support/shared_examples_for_has_content.rb +14 -0
- data/spec/support/{shared_examples_for_has_intermediate_spec.rb → shared_examples_for_has_intermediate_file.rb} +0 -0
- metadata +25 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb52395b49775aa484605d3eccc046d52a97226a
|
4
|
+
data.tar.gz: a3d47a19af939cb42b2b20c1341fb3be1b9f04d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9335f431776f65227f2ab87585e89c401a9b8a62cad9885900d59ce909ce6be00b942a509465bf14138d9283db2cd57a2e229caa0ff34d8c92bf8f6fcc8921bc
|
7
|
+
data.tar.gz: 6dc0228d4831aaa17604a9eb4b71197acee77c3738798688edfb59804f58d4f887bbcdce5e359f53e07ba8f5c2e318f912918d39c9a7a570c6706a4fa72a6451
|
data/.gitignore
CHANGED
data/app/models/item.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
63
|
-
|
64
|
-
|
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
|
data/ddr-models.gemspec
CHANGED
@@ -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.
|
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
|
19
|
-
.reject { |v| v
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
data/lib/ddr/index/connection.rb
CHANGED
@@ -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
|
20
|
+
Response.new post("select", params: params.merge(extra))
|
21
21
|
end
|
22
22
|
|
23
23
|
def page(*args)
|
data/lib/ddr/index/fields.rb
CHANGED
@@ -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,
|
data/lib/ddr/models.rb
CHANGED
data/lib/ddr/models/base.rb
CHANGED
@@ -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
|
|
@@ -9,12 +9,9 @@ module Ddr
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def structure
|
12
|
-
|
13
|
-
|
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
|
data/lib/ddr/models/version.rb
CHANGED
@@ -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="
|
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="
|
5
|
-
<tool toolname="
|
6
|
-
<tool toolname="
|
7
|
-
<tool toolname="
|
8
|
-
<tool toolname="
|
9
|
-
<tool toolname="NLNZ Metadata Extractor" toolversion="3.
|
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.
|
12
|
-
<version toolname="
|
13
|
-
<externalIdentifier toolname="Droid" toolversion="6.
|
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.
|
18
|
-
<creatingApplicationName toolname="Exiftool" toolversion="
|
19
|
-
<
|
20
|
-
<lastmodified toolname="
|
21
|
-
<
|
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">
|
26
|
-
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">
|
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.
|
30
|
-
<valid toolname="Jhove" toolversion="1.
|
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="
|
37
|
-
<
|
38
|
-
<
|
39
|
-
<
|
40
|
-
<
|
41
|
-
<isTagged toolname="
|
42
|
-
<
|
43
|
-
<
|
44
|
-
<
|
45
|
-
<
|
46
|
-
<
|
47
|
-
<hasForms toolname="NLNZ Metadata Extractor" toolversion="3.
|
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="
|
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="
|
55
|
-
<tool toolname="
|
56
|
-
<tool toolname="
|
57
|
-
<tool toolname="
|
58
|
-
<tool toolname="
|
59
|
-
<tool toolname="
|
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="
|
62
|
-
<tool toolname="Tika" toolversion="1.
|
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="
|
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="
|
5
|
-
<tool toolname="
|
6
|
-
<tool toolname="
|
7
|
-
<tool toolname="
|
8
|
-
<tool toolname="
|
9
|
-
<tool toolname="NLNZ Metadata Extractor" toolversion="3.
|
10
|
-
<version toolname="
|
11
|
-
<externalIdentifier toolname="Droid" toolversion="6.
|
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.
|
16
|
-
<creatingApplicationName toolname="Jhove" toolversion="1.
|
17
|
-
<
|
18
|
-
<
|
19
|
-
<
|
20
|
-
<
|
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.
|
25
|
-
<valid toolname="Jhove" toolversion="1.
|
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.
|
30
|
-
<compressionScheme toolname="Jhove" toolversion="1.
|
31
|
-
<imageWidth toolname="Jhove" toolversion="1.
|
32
|
-
<imageHeight toolname="
|
33
|
-
<colorSpace toolname="Jhove" toolversion="1.
|
34
|
-
<iccProfileName toolname="Exiftool" toolversion="
|
35
|
-
<YCbCrSubSampling toolname="Exiftool" toolversion="
|
36
|
-
<samplingFrequencyUnit toolname="Jhove" toolversion="1.
|
37
|
-
<xSamplingFrequency toolname="
|
38
|
-
<ySamplingFrequency toolname="
|
39
|
-
<bitsPerSample toolname="Jhove" toolversion="1.
|
40
|
-
<samplesPerPixel toolname="Jhove" toolversion="1.
|
41
|
-
<lightSource toolname="NLNZ Metadata Extractor" toolversion="3.
|
42
|
-
<iccProfileVersion toolname="Exiftool" toolversion="
|
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="
|
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="
|
49
|
-
<tool toolname="
|
50
|
-
<tool toolname="
|
51
|
-
<tool toolname="
|
52
|
-
<tool toolname="
|
53
|
-
<tool toolname="
|
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="
|
56
|
-
<tool toolname="Tika" toolversion="1.
|
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:
|
43
|
-
its(:creating_application) { is_expected.to contain_exactly("Adobe
|
44
|
-
its(:extent) { is_expected.to eq(["
|
45
|
-
its(:file_size) { is_expected.to eq([
|
46
|
-
its(:fits_version) { is_expected.to eq("
|
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(["
|
50
|
-
its(:md5) { is_expected.to eq("
|
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(["
|
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-
|
58
|
-
its(:modification_time) { is_expected.to contain_exactly(DateTime.parse("
|
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(["
|
77
|
-
its(:image_height) { is_expected.to eq(["
|
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
|
data/spec/models/item_spec.rb
CHANGED
@@ -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) {
|
70
|
-
let(:comp2) {
|
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
|
81
|
-
<
|
82
|
+
<div TYPE="Documents">
|
83
|
+
<div ORDER="1">
|
84
|
+
<mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4ccc" />
|
85
|
+
</div>
|
82
86
|
</div>
|
83
|
-
<div
|
84
|
-
<
|
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 = "
|
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 = "
|
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)
|
File without changes
|
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.
|
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-
|
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/
|
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:
|
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/
|
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
|