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.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile +2 -3
  5. data/app/models/collection.rb +11 -3
  6. data/app/models/component.rb +54 -4
  7. data/app/models/item.rb +1 -2
  8. data/config/initializers/active_fedora_base.rb +8 -5
  9. data/config/initializers/rubydora_monkey_patch.rb +11 -0
  10. data/config/initializers/subscriptions.rb +16 -9
  11. data/config/locales/ddr-models.en.yml +3 -0
  12. data/ddr-models.gemspec +3 -2
  13. data/lib/ddr/actions/virus_check.rb +10 -16
  14. data/lib/ddr/auth.rb +0 -8
  15. data/lib/ddr/datastreams.rb +13 -2
  16. data/lib/ddr/datastreams/administrative_metadata_datastream.rb +9 -0
  17. data/lib/ddr/datastreams/content_datastream.rb +5 -0
  18. data/lib/ddr/datastreams/datastream_behavior.rb +60 -15
  19. data/lib/ddr/datastreams/delete_external_files.rb +29 -0
  20. data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +33 -33
  21. data/lib/ddr/datastreams/external_file_datastream.rb +69 -0
  22. data/lib/ddr/datastreams/fits_datastream.rb +15 -5
  23. data/lib/ddr/datastreams/intermediate_file_datastream.rb +5 -0
  24. data/lib/ddr/datastreams/metadata_datastream.rb +15 -17
  25. data/lib/ddr/datastreams/multires_image_datastream.rb +5 -0
  26. data/lib/ddr/derivatives.rb +1 -0
  27. data/lib/ddr/derivatives/ptif_generator.rb +5 -1
  28. data/lib/ddr/derivatives/update_derivatives.rb +23 -0
  29. data/lib/ddr/events/deletion_event.rb +5 -9
  30. data/lib/ddr/events/event.rb +7 -9
  31. data/lib/ddr/events/ingestion_event.rb +5 -9
  32. data/lib/ddr/events/update_event.rb +12 -5
  33. data/lib/ddr/index.rb +0 -1
  34. data/lib/ddr/index/csv_query_result.rb +10 -2
  35. data/lib/ddr/index/fields.rb +10 -9
  36. data/lib/ddr/index/filter.rb +1 -0
  37. data/lib/ddr/managers/derivatives_manager.rb +84 -98
  38. data/lib/ddr/managers/technical_metadata_manager.rb +20 -5
  39. data/lib/ddr/models.rb +24 -24
  40. data/lib/ddr/models/base.rb +98 -74
  41. data/lib/ddr/models/cache.rb +20 -0
  42. data/lib/ddr/models/engine.rb +4 -6
  43. data/lib/ddr/models/file_management.rb +57 -152
  44. data/lib/ddr/models/fixity_checkable.rb +0 -5
  45. data/lib/ddr/models/has_admin_metadata.rb +4 -2
  46. data/lib/ddr/models/has_children.rb +35 -1
  47. data/lib/ddr/models/has_content.rb +3 -33
  48. data/lib/ddr/models/has_intermediate_file.rb +18 -0
  49. data/lib/ddr/models/has_multires_image.rb +12 -15
  50. data/lib/ddr/models/has_struct_metadata.rb +2 -38
  51. data/lib/ddr/models/indexing.rb +160 -163
  52. data/lib/ddr/models/permanent_id.rb +26 -49
  53. data/lib/ddr/models/solr_document.rb +21 -19
  54. data/lib/ddr/models/structure.rb +168 -41
  55. data/lib/ddr/models/structures/agent.rb +49 -0
  56. data/lib/ddr/models/structures/div.rb +64 -0
  57. data/lib/ddr/models/structures/f_locat.rb +54 -0
  58. data/lib/ddr/models/structures/file.rb +52 -0
  59. data/lib/ddr/models/structures/file_grp.rb +35 -0
  60. data/lib/ddr/models/structures/file_sec.rb +22 -0
  61. data/lib/ddr/models/structures/fptr.rb +31 -0
  62. data/lib/ddr/models/structures/mets_hdr.rb +37 -0
  63. data/lib/ddr/models/structures/mptr.rb +49 -0
  64. data/lib/ddr/models/structures/struct_map.rb +40 -0
  65. data/lib/ddr/models/version.rb +1 -1
  66. data/lib/ddr/notifications.rb +10 -12
  67. data/lib/ddr/utils.rb +29 -16
  68. data/lib/ddr/vocab.rb +15 -17
  69. data/lib/ddr/vocab/asset.rb +29 -19
  70. data/lib/ddr/vocab/contact.rb +5 -7
  71. data/lib/ddr/vocab/display.rb +6 -8
  72. data/lib/ddr/vocab/duke_terms.rb +8 -10
  73. data/lib/ddr/vocab/rdf_vocabulary_parser.rb +37 -39
  74. data/lib/ddr/vocab/roles.rb +17 -19
  75. data/lib/ddr/vocab/vocabulary.rb +26 -26
  76. data/spec/datastreams/external_file_datastream_spec.rb +37 -0
  77. data/spec/derivatives/png_generator_spec.rb +21 -25
  78. data/spec/derivatives/ptif_generator_spec.rb +22 -26
  79. data/spec/dummy/config/environments/test.rb +1 -1
  80. data/spec/dummy/db/schema.rb +23 -23
  81. data/spec/factories/structure_factories.rb +8 -2
  82. data/spec/fixtures/imageA.jpg +0 -0
  83. data/spec/fixtures/imageB.jpg +0 -0
  84. data/spec/index/csv_query_result_spec.rb +3 -3
  85. data/spec/index/fields_spec.rb +7 -6
  86. data/spec/managers/derivatives_manager_spec.rb +105 -112
  87. data/spec/managers/technical_metadata_manager_spec.rb +22 -18
  88. data/spec/models/active_fedora_base_spec.rb +0 -106
  89. data/spec/models/active_fedora_datastream_spec.rb +33 -2
  90. data/spec/models/attachment_spec.rb +0 -2
  91. data/spec/models/cache_spec.rb +32 -0
  92. data/spec/models/collection_spec.rb +43 -19
  93. data/spec/models/component_spec.rb +41 -51
  94. data/spec/models/descriptive_metadata_datastream_spec.rb +99 -87
  95. data/spec/models/events_spec.rb +50 -69
  96. data/spec/models/file_management_spec.rb +79 -187
  97. data/spec/models/has_children_spec.rb +54 -3
  98. data/spec/models/has_struct_metadata_spec.rb +32 -38
  99. data/spec/models/indexing_spec.rb +11 -6
  100. data/spec/models/item_spec.rb +21 -7
  101. data/spec/models/permanent_id_spec.rb +1 -5
  102. data/spec/models/solr_document_spec.rb +13 -41
  103. data/spec/models/structure_spec.rb +85 -16
  104. data/spec/models/structures/agent_spec.rb +30 -0
  105. data/spec/models/structures/div_spec.rb +26 -0
  106. data/spec/models/structures/f_locat_spec.rb +78 -0
  107. data/spec/models/structures/file_grp_spec.rb +23 -0
  108. data/spec/models/structures/file_sec_spec.rb +22 -0
  109. data/spec/models/structures/file_spec.rb +60 -0
  110. data/spec/models/structures/fptr_spec.rb +23 -0
  111. data/spec/models/structures/mets_hdr_spec.rb +26 -0
  112. data/spec/models/structures/mptr_spec.rb +25 -0
  113. data/spec/models/structures/struct_map_spec.rb +24 -0
  114. data/spec/models/target_spec.rb +0 -2
  115. data/spec/spec_helper.rb +4 -9
  116. data/spec/support/shared_examples_for_ddr_models.rb +96 -156
  117. data/spec/support/shared_examples_for_has_content.rb +56 -30
  118. data/spec/support/shared_examples_for_has_intermediate_spec.rb +28 -0
  119. data/spec/support/shared_examples_for_non_collection_models.rb +5 -0
  120. data/spec/support/structural_metadata_helper.rb +230 -59
  121. data/spec/utils_spec.rb +0 -2
  122. metadata +86 -44
  123. data/app/helpers/models_helper.rb +0 -10
  124. data/lib/ddr/auth/legacy/abstract_legacy_permissions.rb +0 -17
  125. data/lib/ddr/auth/legacy/legacy_authorization.rb +0 -44
  126. data/lib/ddr/auth/legacy/legacy_default_permissions.rb +0 -33
  127. data/lib/ddr/auth/legacy/legacy_permissions.rb +0 -33
  128. data/lib/ddr/auth/legacy/legacy_roles.rb +0 -25
  129. data/lib/ddr/index/legacy_license_fields.rb +0 -12
  130. data/lib/ddr/jobs.rb +0 -12
  131. data/lib/ddr/jobs/fits_file_characterization.rb +0 -13
  132. data/lib/ddr/jobs/fixity_check.rb +0 -13
  133. data/lib/ddr/jobs/job.rb +0 -36
  134. data/lib/ddr/jobs/queue.rb +0 -27
  135. data/lib/ddr/jobs/update_index.rb +0 -13
  136. data/lib/ddr/models/access_controllable.rb +0 -24
  137. data/lib/ddr/models/struct_div.rb +0 -63
  138. data/spec/auth/legacy_default_permissions_spec.rb +0 -37
  139. data/spec/auth/legacy_permissions_spec.rb +0 -37
  140. data/spec/helpers/models_helper_spec.rb +0 -11
  141. data/spec/jobs/fits_file_characterization_spec.rb +0 -16
  142. data/spec/jobs/fixity_check_spec.rb +0 -22
  143. data/spec/jobs/job_spec.rb +0 -40
  144. data/spec/jobs/update_index_spec.rb +0 -22
  145. data/spec/models/struct_div_spec.rb +0 -70
  146. 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
- context "defaults" do
46
- before { subject.add_file file, "content" }
47
- its(:original_filename) { should eq("imageA.tif") }
48
- its(:content_type) { should eq("image/tiff") }
49
- it "should create a 'virus check' event for the object" do
50
- expect { subject.save }.to change { subject.virus_checks.count }
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
- expect(subject.derivatives).to receive(:update_derivatives)
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
- expect(subject.derivatives).to receive(:update_derivatives)
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(simple_structure) do |config|
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(nested_structure) do |config|
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 simple_structure
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 CONTENTIDS="info:fedora/test:6" />
50
+ <fptr FILEID="abc" />
27
51
  </div>
28
52
  <div ORDER="2">
29
- <fptr CONTENTIDS="info:fedora/test:5" />
53
+ <fptr FILEID="def" />
30
54
  </div>
31
55
  <div ORDER="3">
32
- <fptr CONTENTIDS="info:fedora/test:7" />
56
+ <fptr FILEID="ghi" />
33
57
  </div>
34
58
  </structMap>
35
59
  </mets>
36
60
  eos
37
61
  end
38
62
 
39
- def nested_structure
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 CONTENTIDS="info:fedora/test:5" />
86
+ <fptr FILEID="abc" />
45
87
  </div>
46
88
  <div ORDER="2" LABEL="Back">
47
89
  <div ORDER="1" LABEL="Top">
48
- <fptr CONTENTIDS="info:fedora/test:7" />
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
- <fptr CONTENTIDS="info:fedora/test:6" />
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 CONTENTIDS="info:fedora/test:5" />
144
+ <fptr FILEID="abc" />
65
145
  </div>
66
146
  <div ORDER="2" LABEL="Back">
67
147
  <div ORDER="1" LABEL="Top">
68
- <fptr CONTENTIDS="info:fedora/test:7" />
69
- </div>
148
+ <fptr FILEID="def" />
149
+ </div>
70
150
  <div ORDER="2" LABEL="Bottom">
71
- <fptr CONTENTIDS="info:fedora/test:6" />
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 CONTENTIDS="info:fedora/test:6" />
158
+ <fptr FILEID="ghi" />
79
159
  </div>
80
160
  <div ORDER="2" LABEL="Top">
81
- <fptr CONTENTIDS="info:fedora/test:7" />
82
- </div>
161
+ <fptr FILEID="def" />
162
+ </div>
83
163
  </div>
84
164
  <div ORDER="2" LABEL="Front">
85
- <fptr CONTENTIDS="info:fedora/test:5" />
165
+ <fptr FILEID="abc" />
86
166
  </div>
87
167
  </structMap>
88
168
  </mets>
89
169
  eos
90
170
  end
91
171
 
92
- def simple_structure_query_response
93
- [{"system_create_dtsi"=>"2015-06-17T21:04:24Z", "system_modified_dtsi"=>"2015-06-17T21:04:56Z", "object_state_ssi"=>"A", "active_fedora_model_ssi"=>"Component", "id"=>"test:6", "object_profile_ssm"=>["{\"datastreams\":{\"RELS-EXT\":{\"dsLabel\":\"Fedora Object-to-Object Relationship Metadata\",\"dsVersionID\":\"RELS-EXT.1\",\"dsCreateDate\":\"2015-06-17T21:04:56Z\",\"dsState\":\"A\",\"dsMIME\":\"application/rdf+xml\",\"dsFormatURI\":null,\"dsControlGroup\":\"X\",\"dsSize\":408,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:6+RELS-EXT+RELS-EXT.1\",\"dsLocationType\":null,\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"bf84faa89d6b25924bc06357f7c33347a602e2ec8df9c1020ec98015fe571760\"},\"descMetadata\":{\"dsLabel\":\"Descriptive Metadata for this object\",\"dsVersionID\":\"descMetadata.1\",\"dsCreateDate\":\"2015-06-17T21:04:56Z\",\"dsState\":\"A\",\"dsMIME\":\"application/n-triples\",\"dsFormatURI\":null,\"dsControlGroup\":\"M\",\"dsSize\":70,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:6+descMetadata+descMetadata.1\",\"dsLocationType\":\"INTERNAL_ID\",\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"4d227bc972634ba2126eefff207fb3b35f6ff802a210ad7945d2ec60360076dd\"},\"rightsMetadata\":{},\"properties\":{},\"thumbnail\":{},\"adminMetadata\":{},\"content\":{},\"extractedText\":{},\"multiresImage\":{},\"structMetadata\":{}},\"objLabel\":null,\"objOwnerId\":\"fedoraAdmin\",\"objModels\":[\"info:fedora/fedora-system:FedoraObject-3.0\"],\"objCreateDate\":\"2015-06-17T21:04:24Z\",\"objLastModDate\":\"2015-06-17T21:04:24Z\",\"objDissIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A6/methods/fedora-system%3A3/viewMethodIndex\",\"objItemIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A6/methods/fedora-system%3A3/viewItemIndex\",\"objState\":\"A\"}"], "identifier_tesim"=>["abc001"], "is_part_of_ssim"=>["info:fedora/test:2"], "has_model_ssim"=>["info:fedora/afmodel:Component"], "title_ssi"=>"abc001", "internal_uri_ssi"=>"info:fedora/test:6", "identifier_ssi"=>"abc001", "access_role_ssi"=>"[]", "_version_"=>1504261016868880384, "timestamp"=>"2015-06-17T21:04:56.958Z"}, {"system_create_dtsi"=>"2015-06-17T21:03:58Z", "system_modified_dtsi"=>"2015-06-17T21:04:54Z", "object_state_ssi"=>"A", "active_fedora_model_ssi"=>"Component", "id"=>"test:5", "object_profile_ssm"=>["{\"datastreams\":{\"RELS-EXT\":{\"dsLabel\":\"Fedora Object-to-Object Relationship Metadata\",\"dsVersionID\":\"RELS-EXT.1\",\"dsCreateDate\":\"2015-06-17T21:04:54Z\",\"dsState\":\"A\",\"dsMIME\":\"application/rdf+xml\",\"dsFormatURI\":null,\"dsControlGroup\":\"X\",\"dsSize\":408,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:5+RELS-EXT+RELS-EXT.1\",\"dsLocationType\":null,\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"6a7f1cbe6e435991ae3bba134e52e7a275af8a232b209ac725fa54fdd81bb973\"},\"descMetadata\":{\"dsLabel\":\"Descriptive Metadata for this object\",\"dsVersionID\":\"descMetadata.1\",\"dsCreateDate\":\"2015-06-17T21:04:54Z\",\"dsState\":\"A\",\"dsMIME\":\"application/n-triples\",\"dsFormatURI\":null,\"dsControlGroup\":\"M\",\"dsSize\":70,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:5+descMetadata+descMetadata.1\",\"dsLocationType\":\"INTERNAL_ID\",\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"8b106726ca2d39d9a2e187fc9da2e58b25bd3553031012515ae31cf4fbe520e9\"},\"rightsMetadata\":{},\"properties\":{},\"thumbnail\":{},\"adminMetadata\":{},\"content\":{},\"extractedText\":{},\"multiresImage\":{},\"structMetadata\":{}},\"objLabel\":null,\"objOwnerId\":\"fedoraAdmin\",\"objModels\":[\"info:fedora/fedora-system:FedoraObject-3.0\"],\"objCreateDate\":\"2015-06-17T21:03:58Z\",\"objLastModDate\":\"2015-06-17T21:03:58Z\",\"objDissIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A5/methods/fedora-system%3A3/viewMethodIndex\",\"objItemIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A5/methods/fedora-system%3A3/viewItemIndex\",\"objState\":\"A\"}"], "identifier_tesim"=>["abc002"], "is_part_of_ssim"=>["info:fedora/test:2"], "has_model_ssim"=>["info:fedora/afmodel:Component"], "title_ssi"=>"abc002", "internal_uri_ssi"=>"info:fedora/test:5", "identifier_ssi"=>"abc002", "access_role_ssi"=>"[]", "_version_"=>1504261014501195776, "timestamp"=>"2015-06-17T21:04:54.701Z"}, {"system_create_dtsi"=>"2015-06-17T21:04:46Z", "system_modified_dtsi"=>"2015-06-17T21:04:59Z", "object_state_ssi"=>"A", "active_fedora_model_ssi"=>"Component", "id"=>"test:7", "object_profile_ssm"=>["{\"datastreams\":{\"RELS-EXT\":{\"dsLabel\":\"Fedora Object-to-Object Relationship Metadata\",\"dsVersionID\":\"RELS-EXT.1\",\"dsCreateDate\":\"2015-06-17T21:04:59Z\",\"dsState\":\"A\",\"dsMIME\":\"application/rdf+xml\",\"dsFormatURI\":null,\"dsControlGroup\":\"X\",\"dsSize\":408,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:7+RELS-EXT+RELS-EXT.1\",\"dsLocationType\":null,\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"cb385ff9a55b5fe24e8c2a8159fc928e3ee582ef312955132d34282676102a6a\"},\"descMetadata\":{\"dsLabel\":\"Descriptive Metadata for this object\",\"dsVersionID\":\"descMetadata.1\",\"dsCreateDate\":\"2015-06-17T21:04:59Z\",\"dsState\":\"A\",\"dsMIME\":\"application/n-triples\",\"dsFormatURI\":null,\"dsControlGroup\":\"M\",\"dsSize\":70,\"dsVersionable\":true,\"dsInfoType\":null,\"dsLocation\":\"test:7+descMetadata+descMetadata.1\",\"dsLocationType\":\"INTERNAL_ID\",\"dsChecksumType\":\"SHA-256\",\"dsChecksum\":\"523ee1e5d55d188bd17b2789e4c9109c8f9d0170b63af1219de8a74d4f32966a\"},\"rightsMetadata\":{},\"properties\":{},\"thumbnail\":{},\"adminMetadata\":{},\"content\":{},\"extractedText\":{},\"multiresImage\":{},\"structMetadata\":{}},\"objLabel\":null,\"objOwnerId\":\"fedoraAdmin\",\"objModels\":[\"info:fedora/fedora-system:FedoraObject-3.0\"],\"objCreateDate\":\"2015-06-17T21:04:46Z\",\"objLastModDate\":\"2015-06-17T21:04:46Z\",\"objDissIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A7/methods/fedora-system%3A3/viewMethodIndex\",\"objItemIndexViewURL\":\"http://localhost:8983/fedora/objects/test%3A7/methods/fedora-system%3A3/viewItemIndex\",\"objState\":\"A\"}"], "identifier_tesim"=>["abc003"], "is_part_of_ssim"=>["info:fedora/test:2"], "has_model_ssim"=>["info:fedora/afmodel:Component"], "title_ssi"=>"abc003", "internal_uri_ssi"=>"info:fedora/test:7", "identifier_ssi"=>"abc003", "access_role_ssi"=>"[]", "_version_"=>1504261019487174656, "timestamp"=>"2015-06-17T21:04:59.455Z"}]
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 simple_structure_to_json
97
- j = <<-eos
98
- {\"default\":
99
- {\"type\":\"default\",
100
- \"divs\":[{\"order\":\"1\",\"fptrs\":[\"test:6\"],\"divs\":[]},
101
- {\"order\":\"2\",\"fptrs\":[\"test:5\"],\"divs\":[]},
102
- {\"order\":\"3\",\"fptrs\":[\"test:7\"],\"divs\":[]}
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
- j.gsub(/\s+/, "")
217
+ YAML.load(yaml)
108
218
  end
109
219
 
110
- def multiple_struct_maps_structure_to_json
111
- j = <<-eos
112
- {\"default\":
113
- {\"type\":\"default\",
114
- \"divs\":[{\"label\":\"Front\",\"order\":\"1\",\"fptrs\":[\"test:5\"],\"divs\":[]},
115
- {\"label\":\"Back\",\"order\":\"2\",\"fptrs\":[],
116
- \"divs\":[{\"label\":\"Top\",\"order\":\"1\",\"fptrs\":[\"test:7\"],\"divs\":[]},
117
- {\"label\":\"Bottom\",\"order\":\"2\",\"fptrs\":[\"test:6\"],\"divs\":[]}
118
- ]
119
- }
120
- ]
121
- },
122
- \"reverse\":
123
- {\"type\":\"reverse\",
124
- \"divs\":[{\"label\":\"Back\",\"order\":\"1\",\"fptrs\":[],
125
- \"divs\":[{\"label\":\"Bottom\",\"order\":\"1\",\"fptrs\":[\"test:6\"],\"divs\":[]},
126
- {\"label\":\"Top\",\"order\":\"2\",\"fptrs\":[\"test:7\"],\"divs\":[]}
127
- ]
128
- },
129
- {\"label\":\"Front\",\"order\":\"2\",\"fptrs\":[\"test:5\"],\"divs\":[]}
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
- j.gsub(/\s+/, "")
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