ddr-models 2.6.2 → 2.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/Gemfile +2 -3
- data/app/models/collection.rb +11 -3
- data/app/models/component.rb +54 -4
- data/app/models/item.rb +1 -2
- data/config/initializers/active_fedora_base.rb +8 -5
- data/config/initializers/rubydora_monkey_patch.rb +11 -0
- data/config/initializers/subscriptions.rb +16 -9
- data/config/locales/ddr-models.en.yml +3 -0
- data/ddr-models.gemspec +3 -2
- data/lib/ddr/actions/virus_check.rb +10 -16
- data/lib/ddr/auth.rb +0 -8
- data/lib/ddr/datastreams.rb +13 -2
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +9 -0
- data/lib/ddr/datastreams/content_datastream.rb +5 -0
- data/lib/ddr/datastreams/datastream_behavior.rb +60 -15
- data/lib/ddr/datastreams/delete_external_files.rb +29 -0
- data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +33 -33
- data/lib/ddr/datastreams/external_file_datastream.rb +69 -0
- data/lib/ddr/datastreams/fits_datastream.rb +15 -5
- data/lib/ddr/datastreams/intermediate_file_datastream.rb +5 -0
- data/lib/ddr/datastreams/metadata_datastream.rb +15 -17
- data/lib/ddr/datastreams/multires_image_datastream.rb +5 -0
- data/lib/ddr/derivatives.rb +1 -0
- data/lib/ddr/derivatives/ptif_generator.rb +5 -1
- data/lib/ddr/derivatives/update_derivatives.rb +23 -0
- data/lib/ddr/events/deletion_event.rb +5 -9
- data/lib/ddr/events/event.rb +7 -9
- data/lib/ddr/events/ingestion_event.rb +5 -9
- data/lib/ddr/events/update_event.rb +12 -5
- data/lib/ddr/index.rb +0 -1
- data/lib/ddr/index/csv_query_result.rb +10 -2
- data/lib/ddr/index/fields.rb +10 -9
- data/lib/ddr/index/filter.rb +1 -0
- data/lib/ddr/managers/derivatives_manager.rb +84 -98
- data/lib/ddr/managers/technical_metadata_manager.rb +20 -5
- data/lib/ddr/models.rb +24 -24
- data/lib/ddr/models/base.rb +98 -74
- data/lib/ddr/models/cache.rb +20 -0
- data/lib/ddr/models/engine.rb +4 -6
- data/lib/ddr/models/file_management.rb +57 -152
- data/lib/ddr/models/fixity_checkable.rb +0 -5
- data/lib/ddr/models/has_admin_metadata.rb +4 -2
- data/lib/ddr/models/has_children.rb +35 -1
- data/lib/ddr/models/has_content.rb +3 -33
- data/lib/ddr/models/has_intermediate_file.rb +18 -0
- data/lib/ddr/models/has_multires_image.rb +12 -15
- data/lib/ddr/models/has_struct_metadata.rb +2 -38
- data/lib/ddr/models/indexing.rb +160 -163
- data/lib/ddr/models/permanent_id.rb +26 -49
- data/lib/ddr/models/solr_document.rb +21 -19
- data/lib/ddr/models/structure.rb +168 -41
- data/lib/ddr/models/structures/agent.rb +49 -0
- data/lib/ddr/models/structures/div.rb +64 -0
- data/lib/ddr/models/structures/f_locat.rb +54 -0
- data/lib/ddr/models/structures/file.rb +52 -0
- data/lib/ddr/models/structures/file_grp.rb +35 -0
- data/lib/ddr/models/structures/file_sec.rb +22 -0
- data/lib/ddr/models/structures/fptr.rb +31 -0
- data/lib/ddr/models/structures/mets_hdr.rb +37 -0
- data/lib/ddr/models/structures/mptr.rb +49 -0
- data/lib/ddr/models/structures/struct_map.rb +40 -0
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/notifications.rb +10 -12
- data/lib/ddr/utils.rb +29 -16
- data/lib/ddr/vocab.rb +15 -17
- data/lib/ddr/vocab/asset.rb +29 -19
- data/lib/ddr/vocab/contact.rb +5 -7
- data/lib/ddr/vocab/display.rb +6 -8
- data/lib/ddr/vocab/duke_terms.rb +8 -10
- data/lib/ddr/vocab/rdf_vocabulary_parser.rb +37 -39
- data/lib/ddr/vocab/roles.rb +17 -19
- data/lib/ddr/vocab/vocabulary.rb +26 -26
- data/spec/datastreams/external_file_datastream_spec.rb +37 -0
- data/spec/derivatives/png_generator_spec.rb +21 -25
- data/spec/derivatives/ptif_generator_spec.rb +22 -26
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/db/schema.rb +23 -23
- data/spec/factories/structure_factories.rb +8 -2
- data/spec/fixtures/imageA.jpg +0 -0
- data/spec/fixtures/imageB.jpg +0 -0
- data/spec/index/csv_query_result_spec.rb +3 -3
- data/spec/index/fields_spec.rb +7 -6
- data/spec/managers/derivatives_manager_spec.rb +105 -112
- data/spec/managers/technical_metadata_manager_spec.rb +22 -18
- data/spec/models/active_fedora_base_spec.rb +0 -106
- data/spec/models/active_fedora_datastream_spec.rb +33 -2
- data/spec/models/attachment_spec.rb +0 -2
- data/spec/models/cache_spec.rb +32 -0
- data/spec/models/collection_spec.rb +43 -19
- data/spec/models/component_spec.rb +41 -51
- data/spec/models/descriptive_metadata_datastream_spec.rb +99 -87
- data/spec/models/events_spec.rb +50 -69
- data/spec/models/file_management_spec.rb +79 -187
- data/spec/models/has_children_spec.rb +54 -3
- data/spec/models/has_struct_metadata_spec.rb +32 -38
- data/spec/models/indexing_spec.rb +11 -6
- data/spec/models/item_spec.rb +21 -7
- data/spec/models/permanent_id_spec.rb +1 -5
- data/spec/models/solr_document_spec.rb +13 -41
- data/spec/models/structure_spec.rb +85 -16
- data/spec/models/structures/agent_spec.rb +30 -0
- data/spec/models/structures/div_spec.rb +26 -0
- data/spec/models/structures/f_locat_spec.rb +78 -0
- data/spec/models/structures/file_grp_spec.rb +23 -0
- data/spec/models/structures/file_sec_spec.rb +22 -0
- data/spec/models/structures/file_spec.rb +60 -0
- data/spec/models/structures/fptr_spec.rb +23 -0
- data/spec/models/structures/mets_hdr_spec.rb +26 -0
- data/spec/models/structures/mptr_spec.rb +25 -0
- data/spec/models/structures/struct_map_spec.rb +24 -0
- data/spec/models/target_spec.rb +0 -2
- data/spec/spec_helper.rb +4 -9
- data/spec/support/shared_examples_for_ddr_models.rb +96 -156
- data/spec/support/shared_examples_for_has_content.rb +56 -30
- data/spec/support/shared_examples_for_has_intermediate_spec.rb +28 -0
- data/spec/support/shared_examples_for_non_collection_models.rb +5 -0
- data/spec/support/structural_metadata_helper.rb +230 -59
- data/spec/utils_spec.rb +0 -2
- metadata +86 -44
- data/app/helpers/models_helper.rb +0 -10
- data/lib/ddr/auth/legacy/abstract_legacy_permissions.rb +0 -17
- data/lib/ddr/auth/legacy/legacy_authorization.rb +0 -44
- data/lib/ddr/auth/legacy/legacy_default_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_permissions.rb +0 -33
- data/lib/ddr/auth/legacy/legacy_roles.rb +0 -25
- data/lib/ddr/index/legacy_license_fields.rb +0 -12
- data/lib/ddr/jobs.rb +0 -12
- data/lib/ddr/jobs/fits_file_characterization.rb +0 -13
- data/lib/ddr/jobs/fixity_check.rb +0 -13
- data/lib/ddr/jobs/job.rb +0 -36
- data/lib/ddr/jobs/queue.rb +0 -27
- data/lib/ddr/jobs/update_index.rb +0 -13
- data/lib/ddr/models/access_controllable.rb +0 -24
- data/lib/ddr/models/struct_div.rb +0 -63
- data/spec/auth/legacy_default_permissions_spec.rb +0 -37
- data/spec/auth/legacy_permissions_spec.rb +0 -37
- data/spec/helpers/models_helper_spec.rb +0 -11
- data/spec/jobs/fits_file_characterization_spec.rb +0 -16
- data/spec/jobs/fixity_check_spec.rb +0 -22
- data/spec/jobs/job_spec.rb +0 -40
- data/spec/jobs/update_index_spec.rb +0 -22
- data/spec/models/struct_div_spec.rb +0 -70
- data/spec/support/shared_examples_for_access_controllables.rb +0 -6
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
1
|
require 'openssl'
|
3
2
|
|
4
3
|
RSpec.shared_examples "an object that can have content" do
|
@@ -7,6 +6,16 @@ RSpec.shared_examples "an object that can have content" do
|
|
7
6
|
|
8
7
|
before { allow(Resque).to receive(:enqueue) }
|
9
8
|
|
9
|
+
its(:can_have_content?) { is_expected.to be true }
|
10
|
+
it { is_expected.to_not have_content }
|
11
|
+
specify {
|
12
|
+
allow(subject.content).to receive(:has_content?) { true }
|
13
|
+
expect(subject).to have_content
|
14
|
+
}
|
15
|
+
|
16
|
+
its(:can_have_children?) { is_expected.to be false }
|
17
|
+
it { is_expected.to_not have_children }
|
18
|
+
|
10
19
|
it "should delegate :validate_checksum! to :content" do
|
11
20
|
checksum = "dea56f15b309e47b74fa24797f85245dda0ca3d274644a96804438bbd659555a"
|
12
21
|
expect(subject.content).to receive(:validate_checksum!).with(checksum, "SHA-256")
|
@@ -42,33 +51,22 @@ RSpec.shared_examples "an object that can have content" do
|
|
42
51
|
|
43
52
|
describe "adding a file" do
|
44
53
|
let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
context "with option `:original_name=>false`" do
|
54
|
-
before { subject.add_file file, "content", original_name: false }
|
55
|
-
its(:original_filename) { should be_nil }
|
56
|
-
end
|
57
|
-
context "with `:original_name` option set to a string" do
|
58
|
-
before { subject.add_file file, "content", original_name: "another-name.tiff" }
|
59
|
-
its(:original_filename) { should eq("another-name.tiff") }
|
54
|
+
before { subject.add_file file, "content" }
|
55
|
+
its(:original_filename) { should eq("imageA.tif") }
|
56
|
+
its(:content_type) { should eq("image/tiff") }
|
57
|
+
it "should create a 'virus check' event for the object" do
|
58
|
+
expect(Ddr::Events::VirusCheckEvent).to receive(:create)
|
59
|
+
subject.save!
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
describe "save" do
|
64
|
-
|
65
64
|
describe "when new content is present" do
|
66
|
-
|
67
65
|
context "and it's a new object" do
|
68
66
|
before { subject.add_file file, "content" }
|
69
67
|
let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
|
70
68
|
it "should generate derivatives" do
|
71
|
-
|
69
|
+
expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
|
72
70
|
subject.save
|
73
71
|
end
|
74
72
|
end
|
@@ -77,7 +75,7 @@ RSpec.shared_examples "an object that can have content" do
|
|
77
75
|
before { subject.upload! fixture_file_upload('imageA.tif', 'image/tiff') }
|
78
76
|
let(:file) { fixture_file_upload("imageB.tif", "image/tiff") }
|
79
77
|
it "should generate derivatives" do
|
80
|
-
|
78
|
+
expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
|
81
79
|
subject.upload! file
|
82
80
|
end
|
83
81
|
context "and the file has not previously been characterized" do
|
@@ -95,16 +93,6 @@ RSpec.shared_examples "an object that can have content" do
|
|
95
93
|
expect(subject.reload.fits).to have_content
|
96
94
|
end
|
97
95
|
end
|
98
|
-
context "and the file has previously been characterized" do
|
99
|
-
before {
|
100
|
-
subject.fits.content = fixture_file_upload("fits/document.xml")
|
101
|
-
subject.save!
|
102
|
-
}
|
103
|
-
it "deletes the existing characterization data" do
|
104
|
-
subject.upload! file
|
105
|
-
expect(subject.reload.fits).to_not have_content
|
106
|
-
end
|
107
|
-
end
|
108
96
|
end
|
109
97
|
end
|
110
98
|
end
|
@@ -126,4 +114,42 @@ RSpec.shared_examples "an object that can have content" do
|
|
126
114
|
end
|
127
115
|
end
|
128
116
|
|
117
|
+
describe "deleting / deaccessioning" do
|
118
|
+
let(:file1) { fixture_file_upload("sample.pdf") }
|
119
|
+
let(:file2) { fixture_file_upload("sample.docx") }
|
120
|
+
before do
|
121
|
+
subject.upload! file1
|
122
|
+
@path1 = subject.content.file_path
|
123
|
+
subject.upload! file2
|
124
|
+
@path2 = subject.content.file_path
|
125
|
+
end
|
126
|
+
describe "#destroy" do
|
127
|
+
it "deletes the content files" do
|
128
|
+
expect(::File.exist?(@path1)).to be true
|
129
|
+
expect(::File.exist?(@path2)).to be true
|
130
|
+
subject.destroy
|
131
|
+
expect(::File.exist?(@path1)).to be false
|
132
|
+
expect(::File.exist?(@path2)).to be false
|
133
|
+
end
|
134
|
+
end
|
135
|
+
describe "#deaccession" do
|
136
|
+
it "deletes the content files" do
|
137
|
+
expect(::File.exist?(@path1)).to be true
|
138
|
+
expect(::File.exist?(@path2)).to be true
|
139
|
+
subject.deaccession
|
140
|
+
expect(::File.exist?(@path1)).to be false
|
141
|
+
expect(::File.exist?(@path2)).to be false
|
142
|
+
end
|
143
|
+
end
|
144
|
+
describe "deleting the 'content' datastream" do
|
145
|
+
it "deletes the content files" do
|
146
|
+
expect(::File.exist?(@path1)).to be true
|
147
|
+
expect(::File.exist?(@path2)).to be true
|
148
|
+
subject.content.delete
|
149
|
+
expect(::File.exist?(@path1)).to be false
|
150
|
+
expect(::File.exist?(@path2)).to be false
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
129
155
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
RSpec.shared_examples "an object that can have an intermediate file" do
|
2
|
+
|
3
|
+
subject { described_class.new(title: [ "I Have An Intermediate File!" ]) }
|
4
|
+
|
5
|
+
describe "save" do
|
6
|
+
describe "when a new intermediate file is present" do
|
7
|
+
context "and it's a new object" do
|
8
|
+
before { subject.add_file file, "intermediateFile" }
|
9
|
+
let(:file) { fixture_file_upload("imageA.jpg", "image/jpeg") }
|
10
|
+
it "should generate derivatives" do
|
11
|
+
expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
|
12
|
+
subject.save
|
13
|
+
end
|
14
|
+
end
|
15
|
+
context "and it's an existing object with an intermediate file" do
|
16
|
+
before { subject.upload! fixture_file_upload('imageA.jpg', 'image/jpeg') }
|
17
|
+
let(:file) { fixture_file_upload("imageB.jpg", "image/jpeg") }
|
18
|
+
it "should generate derivatives" do
|
19
|
+
expect_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:update_derivatives)
|
20
|
+
subject.upload! file
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
|
@@ -33,4 +33,9 @@ RSpec.shared_examples "a non-collection model" do
|
|
33
33
|
expect(subject.to_solr[Ddr::Index::Fields::COLLECTION_TITLE]).to eq("Test Collection")
|
34
34
|
end
|
35
35
|
end
|
36
|
+
|
37
|
+
describe "attachments" do
|
38
|
+
its(:can_have_attachments?) { is_expected.to be false }
|
39
|
+
it { is_expected.not_to have_attachments }
|
40
|
+
end
|
36
41
|
end
|
@@ -1,13 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
def simple_structure_document
|
4
|
-
Nokogiri::XML(
|
4
|
+
Nokogiri::XML(simple_structure_xml) do |config|
|
5
5
|
config.noblanks
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def nested_structure_document
|
10
|
-
Nokogiri::XML(
|
10
|
+
Nokogiri::XML(nested_structure_xml) do |config|
|
11
|
+
config.noblanks
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def nested_structure_mptr_document
|
16
|
+
Nokogiri::XML(nested_structure_mptr_xml) do |config|
|
11
17
|
config.noblanks
|
12
18
|
end
|
13
19
|
end
|
@@ -18,38 +24,99 @@ def multiple_struct_maps_structure_document
|
|
18
24
|
end
|
19
25
|
end
|
20
26
|
|
21
|
-
def
|
27
|
+
def simple_structure_xml
|
22
28
|
<<-eos
|
23
29
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
30
|
+
<metsHdr>
|
31
|
+
<agent ROLE="CREATOR">
|
32
|
+
<name>Sam Spade</name>
|
33
|
+
</agent>
|
34
|
+
</metsHdr>
|
35
|
+
<fileSec>
|
36
|
+
<fileGrp>
|
37
|
+
<file ID="abc" USE="foo">
|
38
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ab3" />
|
39
|
+
</file>
|
40
|
+
<file ID="def" USE="bar">
|
41
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4cd9" />
|
42
|
+
</file>
|
43
|
+
<file ID="ghi" USE="baz">
|
44
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ef1" />
|
45
|
+
</file>
|
46
|
+
</fileGrp>
|
47
|
+
</fileSec>
|
24
48
|
<structMap TYPE="default">
|
25
49
|
<div ORDER="1">
|
26
|
-
<fptr
|
50
|
+
<fptr FILEID="abc" />
|
27
51
|
</div>
|
28
52
|
<div ORDER="2">
|
29
|
-
<fptr
|
53
|
+
<fptr FILEID="def" />
|
30
54
|
</div>
|
31
55
|
<div ORDER="3">
|
32
|
-
<fptr
|
56
|
+
<fptr FILEID="ghi" />
|
33
57
|
</div>
|
34
58
|
</structMap>
|
35
59
|
</mets>
|
36
60
|
eos
|
37
61
|
end
|
38
62
|
|
39
|
-
def
|
63
|
+
def nested_structure_xml
|
40
64
|
<<-eos
|
41
65
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
66
|
+
<metsHdr>
|
67
|
+
<agent ROLE="CREATOR">
|
68
|
+
<name>Sam Spade</name>
|
69
|
+
</agent>
|
70
|
+
</metsHdr>
|
71
|
+
<fileSec>
|
72
|
+
<fileGrp>
|
73
|
+
<file ID="abc" USE="foo">
|
74
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ab3" />
|
75
|
+
</file>
|
76
|
+
<file ID="def" USE="bar">
|
77
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4cd9" />
|
78
|
+
</file>
|
79
|
+
<file ID="ghi" USE="baz">
|
80
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ef1" />
|
81
|
+
</file>
|
82
|
+
</fileGrp>
|
83
|
+
</fileSec>
|
42
84
|
<structMap TYPE="default">
|
43
85
|
<div ORDER="1" LABEL="Front">
|
44
|
-
<fptr
|
86
|
+
<fptr FILEID="abc" />
|
45
87
|
</div>
|
46
88
|
<div ORDER="2" LABEL="Back">
|
47
89
|
<div ORDER="1" LABEL="Top">
|
48
|
-
<fptr
|
49
|
-
</div>
|
90
|
+
<fptr FILEID="def" />
|
91
|
+
</div>
|
92
|
+
<div ORDER="2" LABEL="Bottom">
|
93
|
+
<fptr FILEID="ghi" />
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
</structMap>
|
97
|
+
</mets>
|
98
|
+
eos
|
99
|
+
end
|
100
|
+
|
101
|
+
def nested_structure_mptr_xml
|
102
|
+
<<-eos
|
103
|
+
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
104
|
+
<metsHdr>
|
105
|
+
<agent ROLE="CREATOR">
|
106
|
+
<name>Sam Spade</name>
|
107
|
+
</agent>
|
108
|
+
</metsHdr>
|
109
|
+
<structMap TYPE="default">
|
110
|
+
<div ORDER="1" LABEL="Front">
|
111
|
+
<mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4ab3" />
|
112
|
+
</div>
|
113
|
+
<div ORDER="2" LABEL="Back">
|
114
|
+
<div ORDER="1" LABEL="Top">
|
115
|
+
<mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4cd9" />
|
116
|
+
</div>
|
50
117
|
<div ORDER="2" LABEL="Bottom">
|
51
|
-
<
|
52
|
-
</div>
|
118
|
+
<mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4ef1" />
|
119
|
+
</div>
|
53
120
|
</div>
|
54
121
|
</structMap>
|
55
122
|
</mets>
|
@@ -59,77 +126,181 @@ end
|
|
59
126
|
def multiple_struct_maps_structure
|
60
127
|
<<-eos
|
61
128
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
129
|
+
<fileSec>
|
130
|
+
<fileGrp>
|
131
|
+
<file ID="abc" USE="foo">
|
132
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ab3" />
|
133
|
+
</file>
|
134
|
+
<file ID="def" USE="bar">
|
135
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4cd9" />
|
136
|
+
</file>
|
137
|
+
<file ID="ghi" USE="baz">
|
138
|
+
<FLocat LOCTYPE="ARK" xlink:href="ark:/99999/fk4ef1" />
|
139
|
+
</file>
|
140
|
+
</fileGrp>
|
141
|
+
</fileSec>
|
62
142
|
<structMap TYPE="default">
|
63
143
|
<div ORDER="1" LABEL="Front">
|
64
|
-
<fptr
|
144
|
+
<fptr FILEID="abc" />
|
65
145
|
</div>
|
66
146
|
<div ORDER="2" LABEL="Back">
|
67
147
|
<div ORDER="1" LABEL="Top">
|
68
|
-
<fptr
|
69
|
-
</div>
|
148
|
+
<fptr FILEID="def" />
|
149
|
+
</div>
|
70
150
|
<div ORDER="2" LABEL="Bottom">
|
71
|
-
<fptr
|
72
|
-
</div>
|
151
|
+
<fptr FILEID="ghi" />
|
152
|
+
</div>
|
73
153
|
</div>
|
74
154
|
</structMap>
|
75
155
|
<structMap TYPE="reverse">
|
76
156
|
<div ORDER="1" LABEL="Back">
|
77
157
|
<div ORDER="1" LABEL="Bottom">
|
78
|
-
<fptr
|
158
|
+
<fptr FILEID="ghi" />
|
79
159
|
</div>
|
80
160
|
<div ORDER="2" LABEL="Top">
|
81
|
-
<fptr
|
82
|
-
</div>
|
161
|
+
<fptr FILEID="def" />
|
162
|
+
</div>
|
83
163
|
</div>
|
84
164
|
<div ORDER="2" LABEL="Front">
|
85
|
-
<fptr
|
165
|
+
<fptr FILEID="abc" />
|
86
166
|
</div>
|
87
167
|
</structMap>
|
88
168
|
</mets>
|
89
169
|
eos
|
90
170
|
end
|
91
171
|
|
92
|
-
def
|
93
|
-
|
172
|
+
def simple_structure_dereferenced_hash
|
173
|
+
yaml = <<-eos
|
174
|
+
default:
|
175
|
+
:type: 'default'
|
176
|
+
:contents:
|
177
|
+
- :order: '1'
|
178
|
+
:contents:
|
179
|
+
- :repo_id: 'test:7'
|
180
|
+
:use: 'foo'
|
181
|
+
- :order: '2'
|
182
|
+
:contents:
|
183
|
+
- :repo_id: 'test:8'
|
184
|
+
:use: 'bar'
|
185
|
+
- :order: '3'
|
186
|
+
:contents:
|
187
|
+
- :repo_id: 'test:9'
|
188
|
+
:use: 'baz'
|
189
|
+
eos
|
190
|
+
YAML.load(yaml)
|
94
191
|
end
|
95
192
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
193
|
+
def nested_structure_dereferenced_hash
|
194
|
+
yaml = <<-eos
|
195
|
+
default:
|
196
|
+
:type: 'default'
|
197
|
+
:contents:
|
198
|
+
- :label: 'Front'
|
199
|
+
:order: '1'
|
200
|
+
:contents:
|
201
|
+
- :repo_id: 'test:7'
|
202
|
+
:use: 'foo'
|
203
|
+
- :label: 'Back'
|
204
|
+
:order: '2'
|
205
|
+
:contents:
|
206
|
+
- :label: 'Top'
|
207
|
+
:order: '1'
|
208
|
+
:contents:
|
209
|
+
- :repo_id: 'test:8'
|
210
|
+
:use: 'bar'
|
211
|
+
- :label: 'Bottom'
|
212
|
+
:order: '2'
|
213
|
+
:contents:
|
214
|
+
- :repo_id: 'test:9'
|
215
|
+
:use: 'baz'
|
106
216
|
eos
|
107
|
-
|
217
|
+
YAML.load(yaml)
|
108
218
|
end
|
109
219
|
|
110
|
-
def
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
]
|
131
|
-
}
|
132
|
-
}
|
220
|
+
def nested_structure_mptr_dereferenced_hash
|
221
|
+
yaml = <<-eos
|
222
|
+
default:
|
223
|
+
:type: 'default'
|
224
|
+
:contents:
|
225
|
+
- :label: 'Front'
|
226
|
+
:order: '1'
|
227
|
+
:contents:
|
228
|
+
- :repo_id: 'test:7'
|
229
|
+
- :label: 'Back'
|
230
|
+
:order: '2'
|
231
|
+
:contents:
|
232
|
+
- :label: 'Top'
|
233
|
+
:order: '1'
|
234
|
+
:contents:
|
235
|
+
- :repo_id: 'test:8'
|
236
|
+
- :label: 'Bottom'
|
237
|
+
:order: '2'
|
238
|
+
:contents:
|
239
|
+
- :repo_id: 'test:9'
|
133
240
|
eos
|
134
|
-
|
135
|
-
end
|
241
|
+
YAML.load(yaml)
|
242
|
+
end
|
243
|
+
|
244
|
+
def multiple_struct_maps_structure_dereferenced_hash
|
245
|
+
yaml = <<-eos
|
246
|
+
default:
|
247
|
+
:type: 'default'
|
248
|
+
:contents:
|
249
|
+
- :label: 'Front'
|
250
|
+
:order: '1'
|
251
|
+
:contents:
|
252
|
+
- :repo_id: 'test:7'
|
253
|
+
:use: 'foo'
|
254
|
+
- :label: 'Back'
|
255
|
+
:order: '2'
|
256
|
+
:contents:
|
257
|
+
- :label: 'Top'
|
258
|
+
:order: '1'
|
259
|
+
:contents:
|
260
|
+
- :repo_id: 'test:8'
|
261
|
+
:use: 'bar'
|
262
|
+
- :label: 'Bottom'
|
263
|
+
:order: '2'
|
264
|
+
:contents:
|
265
|
+
- :repo_id: 'test:9'
|
266
|
+
:use: 'baz'
|
267
|
+
reverse:
|
268
|
+
:type: 'reverse'
|
269
|
+
:contents:
|
270
|
+
- :label: 'Back'
|
271
|
+
:order: '1'
|
272
|
+
:contents:
|
273
|
+
- :label: 'Bottom'
|
274
|
+
:order: '1'
|
275
|
+
:contents:
|
276
|
+
- :repo_id: 'test:9'
|
277
|
+
:use: 'baz'
|
278
|
+
- :label: 'Top'
|
279
|
+
:order: '2'
|
280
|
+
:contents:
|
281
|
+
- :repo_id: 'test:8'
|
282
|
+
:use: 'bar'
|
283
|
+
- :label: 'Front'
|
284
|
+
:order: '2'
|
285
|
+
:contents:
|
286
|
+
- :repo_id: 'test:7'
|
287
|
+
:use: 'foo'
|
288
|
+
eos
|
289
|
+
YAML.load(yaml)
|
290
|
+
end
|
291
|
+
|
292
|
+
def simple_structure_to_json
|
293
|
+
simple_structure_dereferenced_hash.to_json
|
294
|
+
end
|
295
|
+
|
296
|
+
def nested_structure_to_json
|
297
|
+
nested_structure_dereferenced_hash.to_json
|
298
|
+
end
|
299
|
+
|
300
|
+
def nested_structure_mptr_to_json
|
301
|
+
nested_structure_mptr_dereferenced_hash.to_json
|
302
|
+
end
|
303
|
+
|
304
|
+
def multiple_struct_maps_structure_to_json
|
305
|
+
multiple_struct_maps_structure_dereferenced_hash.to_json
|
306
|
+
end
|