ddr-models 2.8.0 → 2.9.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.
@@ -155,5 +155,13 @@ module Ddr::Models
155
155
  }
156
156
  end
157
157
 
158
+ describe "nested path" do
159
+ subject { FactoryGirl.build(:item) }
160
+ before { subject.nested_path = "/foo/bar/baz" }
161
+ specify {
162
+ expect(subject.index_fields[Indexing::NESTED_PATH]).to eq "/foo/bar/baz"
163
+ expect(subject.index_fields[Indexing::NESTED_PATH_TEXT]).to eq "/foo/bar/baz"
164
+ }
165
+ end
158
166
  end
159
167
  end
@@ -46,4 +46,68 @@ RSpec.describe Item, type: :model do
46
46
  }
47
47
  end
48
48
 
49
+ describe "#default_structure" do
50
+ describe "when the item has no components" do
51
+ let(:expected) do
52
+ xml = <<-EOS
53
+ <mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
54
+ <metsHdr>
55
+ <agent ROLE="#{Ddr::Models::Structures::Agent::ROLE_CREATOR}">
56
+ <name>#{Ddr::Models::Structures::Agent::NAME_REPOSITORY_DEFAULT}</name>
57
+ </agent>
58
+ </metsHdr>
59
+ <structMap TYPE="#{Ddr::Models::Structure::TYPE_DEFAULT}" />
60
+ </mets>
61
+ EOS
62
+ xml
63
+ end
64
+ it "should be the appropriate structure" do
65
+ expect(subject.default_structure.to_xml).to be_equivalent_to(expected)
66
+ end
67
+ end
68
+ describe "when the item has components" do
69
+ let(:comp1) { FactoryGirl.create(:component) }
70
+ let(:comp2) { FactoryGirl.create(:component) }
71
+ let(:expected) do
72
+ xml = <<-EOS
73
+ <mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
74
+ <metsHdr>
75
+ <agent ROLE="#{Ddr::Models::Structures::Agent::ROLE_CREATOR}">
76
+ <name>#{Ddr::Models::Structures::Agent::NAME_REPOSITORY_DEFAULT}</name>
77
+ </agent>
78
+ </metsHdr>
79
+ <structMap TYPE="#{Ddr::Models::Structure::TYPE_DEFAULT}">
80
+ <div ORDER="1">
81
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4bbb" />
82
+ </div>
83
+ <div ORDER="2">
84
+ <mptr LOCTYPE="ARK" xlink:href="ark:/99999/fk4aaa" />
85
+ </div>
86
+ </structMap>
87
+ </mets>
88
+ EOS
89
+ xml
90
+ end
91
+ before do
92
+ comp1.local_id = "test002"
93
+ comp1.permanent_id = "ark:/99999/fk4aaa"
94
+ comp1.save!
95
+ comp2.local_id = "test001"
96
+ comp2.permanent_id = "ark:/99999/fk4bbb"
97
+ comp2.save!
98
+ subject.children << comp1
99
+ subject.children << comp2
100
+ subject.save!
101
+ allow(SecureRandom).to receive(:uuid).and_return("abc-def", "ghi-jkl")
102
+ end
103
+ after do
104
+ comp1.destroy
105
+ comp2.destroy
106
+ end
107
+ it "should be the appropriate structure" do
108
+ expect(subject.default_structure.to_xml).to be_equivalent_to(expected)
109
+ end
110
+ end
111
+ end
112
+
49
113
  end
@@ -207,6 +207,117 @@ EOS
207
207
  }
208
208
  end
209
209
 
210
+ describe "#intermediate_type" do
211
+ specify {
212
+ allow(subject).to receive(:has_intermediate_file?) { false }
213
+ expect(subject.intermediate_path).to be_nil
214
+ }
215
+ specify {
216
+ allow(subject).to receive(:datastreams) do
217
+ {"intermediateFile"=>{"dsMIME"=>"audio/wav"}}
218
+ end
219
+ expect(subject.intermediate_type).to eq "audio/wav"
220
+ }
221
+ end
222
+
223
+ describe "#intermediate_path" do
224
+ specify {
225
+ allow(subject).to receive(:has_intermediate_file?) { false }
226
+ expect(subject.intermediate_path).to be_nil
227
+ }
228
+ specify {
229
+ allow(subject).to receive(:datastreams) do
230
+ {"intermediateFile"=>{"dsLocation"=>"file:/foo/bar/baz.txt"}}
231
+ end
232
+ expect(subject.intermediate_path).to eq "/foo/bar/baz.txt"
233
+ }
234
+ end
235
+
236
+ describe "#intermediate_extension" do
237
+ let(:extensions) { {'audio/wav' => 'wav', 'video/quicktime' => 'mov'} }
238
+ before { allow(Ddr::Models).to receive(:preferred_file_extensions) { extensions } }
239
+ before { allow(subject).to receive(:has_intermediate_file?) { true } }
240
+ specify {
241
+ allow(subject).to receive(:has_intermediate_file?) { false }
242
+ expect(subject.intermediate_extension).to be_nil
243
+ }
244
+ specify {
245
+ allow(subject).to receive(:intermediate_type) { 'audio/wav'}
246
+ expect(subject.intermediate_extension).to eq "wav"
247
+ }
248
+ specify {
249
+ allow(subject).to receive(:intermediate_type) { 'video/quicktime'}
250
+ expect(subject.intermediate_extension).to eq "mov"
251
+ }
252
+ specify {
253
+ allow(subject).to receive(:intermediate_type) { 'application/foo'}
254
+ allow(subject).to receive(:intermediate_extension_default) { "bin" }
255
+ expect(subject.intermediate_extension).to eq "bin"
256
+ }
257
+ end
258
+
259
+
260
+ describe "#captionable?" do
261
+ specify {
262
+ allow(subject).to receive(:has_datastream?).with(Ddr::Datastreams::CAPTION) { false }
263
+ expect(subject).not_to be_captionable
264
+ }
265
+ specify {
266
+ allow(subject).to receive(:has_datastream?).with(Ddr::Datastreams::CAPTION) { true }
267
+ expect(subject).to be_captionable
268
+ }
269
+ end
270
+
271
+ describe "#caption_type" do
272
+ specify {
273
+ allow(subject).to receive(:captionable?) { false }
274
+ expect(subject.caption_type).to be_nil
275
+ }
276
+ specify {
277
+ allow(subject).to receive(:datastreams) do
278
+ {"caption"=>{"dsMIME"=>"text/vtt"}}
279
+ end
280
+ expect(subject.caption_type).to eq "text/vtt"
281
+ }
282
+ end
283
+
284
+ describe "#caption_path" do
285
+ specify {
286
+ allow(subject).to receive(:captionable?) { false }
287
+ expect(subject.caption_path).to be_nil
288
+ }
289
+ specify {
290
+ allow(subject).to receive(:datastreams) do
291
+ {"caption"=>{"dsLocation"=>"file:/foo/bar/baz.txt"}}
292
+ end
293
+ expect(subject.caption_path).to eq "/foo/bar/baz.txt"
294
+ }
295
+ end
296
+
297
+ describe "#caption_extension" do
298
+ let(:extensions) { {'text/vtt' => 'vtt', 'application/zip' => 'zip'} }
299
+ before { allow(Ddr::Models).to receive(:preferred_file_extensions) { extensions } }
300
+ before { allow(subject).to receive(:captionable?) { true } }
301
+ specify {
302
+ allow(subject).to receive(:captionable?) { false }
303
+ expect(subject.caption_extension).to be_nil
304
+ }
305
+ specify {
306
+ allow(subject).to receive(:caption_type) { 'text/vtt'}
307
+ expect(subject.caption_extension).to eq "vtt"
308
+ }
309
+ specify {
310
+ allow(subject).to receive(:caption_type) { 'application/zip'}
311
+ expect(subject.caption_extension).to eq "zip"
312
+ }
313
+ specify {
314
+ allow(subject).to receive(:caption_type) { 'application/foo'}
315
+ allow(subject).to receive(:caption_extension_default) { "bin" }
316
+ expect(subject.caption_extension).to eq "bin"
317
+ }
318
+ end
319
+
320
+
210
321
  describe "#streamable?" do
211
322
  specify {
212
323
  allow(subject).to receive(:has_datastream?).with(Ddr::Datastreams::STREAMABLE_MEDIA) { false }
@@ -231,6 +342,26 @@ EOS
231
342
  }
232
343
  end
233
344
 
345
+ describe "#streamable_media_extension" do
346
+ let(:extensions) { {'audio/mpeg' => 'mp3', 'video/mp4' => 'mp4'} }
347
+ before { allow(Ddr::Models).to receive(:preferred_file_extensions) { extensions } }
348
+ before { allow(subject).to receive(:streamable?) { true } }
349
+ specify {
350
+ allow(subject).to receive(:streamable?) { false }
351
+ expect(subject.streamable_media_extension).to be_nil
352
+ }
353
+ specify {
354
+ allow(subject).to receive(:streamable_media_type) { 'audio/mpeg'}
355
+ expect(subject.streamable_media_extension).to eq "mp3"
356
+ }
357
+ specify {
358
+ allow(subject).to receive(:streamable_media_type) { 'application/foo'}
359
+ allow(subject).to receive(:streamable_media_extension_default) { "bin" }
360
+ expect(subject.streamable_media_extension).to eq "bin"
361
+ }
362
+ end
363
+
364
+
234
365
  describe "#rights" do
235
366
  specify {
236
367
  obj = Item.create(rights: ["http://example.com"])
@@ -0,0 +1,23 @@
1
+ RSpec.shared_examples "an object that cannot be captioned" do
2
+ it { is_expected.to_not be_captioned }
3
+ its(:captionable?) { is_expected.to be false }
4
+ end
5
+
6
+ RSpec.shared_examples "an object that can be captioned" do
7
+ it { is_expected.to_not be_captioned }
8
+ its(:captionable?) { is_expected.to be true }
9
+
10
+ describe "when caption file is present" do
11
+ before {
12
+ subject.add_file(fixture_file_upload('abcd1234.vtt', 'text/vtt'), 'caption')
13
+ subject.save!
14
+ }
15
+ specify {
16
+ expect(subject).to be_captioned
17
+ expect(subject.caption_path).to be_present
18
+ expect(subject.caption_path).to eq subject.caption.file_path
19
+ expect(subject.caption_type).to eq 'text/vtt'
20
+ expect(subject.caption_extension).to eq 'vtt'
21
+ }
22
+ end
23
+ end
@@ -17,6 +17,7 @@ RSpec.shared_examples "an object that can be streamable" do
17
17
  expect(subject.streamable_media_type).to eq 'image/jpeg'
18
18
  expect(subject.streamable_media_path).to be_present
19
19
  expect(subject.streamable_media_path).to eq subject.streamableMedia.file_path
20
+ expect(subject.streamable_media_extension).to eq 'jpeg'
20
21
  }
21
22
  end
22
23
  end
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.8.0
4
+ version: 2.9.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-06-20 00:00:00.000000000 Z
12
+ date: 2017-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -494,6 +494,7 @@ files:
494
494
  - lib/ddr/auth/web_auth_context.rb
495
495
  - lib/ddr/datastreams.rb
496
496
  - lib/ddr/datastreams/administrative_metadata_datastream.rb
497
+ - lib/ddr/datastreams/caption_datastream.rb
497
498
  - lib/ddr/datastreams/content_datastream.rb
498
499
  - lib/ddr/datastreams/datastream_behavior.rb
499
500
  - lib/ddr/datastreams/delete_external_files.rb
@@ -551,6 +552,7 @@ files:
551
552
  - lib/ddr/models/admin_set.rb
552
553
  - lib/ddr/models/base.rb
553
554
  - lib/ddr/models/cache.rb
555
+ - lib/ddr/models/captionable.rb
554
556
  - lib/ddr/models/contact.rb
555
557
  - lib/ddr/models/describable.rb
556
558
  - lib/ddr/models/engine.rb
@@ -683,6 +685,7 @@ files:
683
685
  - spec/factories/user_factories.rb
684
686
  - spec/fixtures/16bit.tif
685
687
  - spec/fixtures/8bit.tif
688
+ - spec/fixtures/abcd1234.vtt
686
689
  - spec/fixtures/arrow1rightred_e0.gif
687
690
  - spec/fixtures/bird.jpg
688
691
  - spec/fixtures/extractedText1.txt
@@ -748,6 +751,7 @@ files:
748
751
  - spec/support/ezid_mock_identifier.rb
749
752
  - spec/support/shared_examples_for_associations.rb
750
753
  - spec/support/shared_examples_for_auth_contexts.rb
754
+ - spec/support/shared_examples_for_captionable.rb
751
755
  - spec/support/shared_examples_for_ddr_models.rb
752
756
  - spec/support/shared_examples_for_describables.rb
753
757
  - spec/support/shared_examples_for_events.rb
@@ -777,9 +781,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
777
781
  version: '0'
778
782
  required_rubygems_version: !ruby/object:Gem::Requirement
779
783
  requirements:
780
- - - ">="
784
+ - - ">"
781
785
  - !ruby/object:Gem::Version
782
- version: '0'
786
+ version: 1.3.1
783
787
  requirements: []
784
788
  rubyforge_project:
785
789
  rubygems_version: 2.6.11
@@ -869,6 +873,7 @@ test_files:
869
873
  - spec/factories/user_factories.rb
870
874
  - spec/fixtures/16bit.tif
871
875
  - spec/fixtures/8bit.tif
876
+ - spec/fixtures/abcd1234.vtt
872
877
  - spec/fixtures/arrow1rightred_e0.gif
873
878
  - spec/fixtures/bird.jpg
874
879
  - spec/fixtures/extractedText1.txt
@@ -934,6 +939,7 @@ test_files:
934
939
  - spec/support/ezid_mock_identifier.rb
935
940
  - spec/support/shared_examples_for_associations.rb
936
941
  - spec/support/shared_examples_for_auth_contexts.rb
942
+ - spec/support/shared_examples_for_captionable.rb
937
943
  - spec/support/shared_examples_for_ddr_models.rb
938
944
  - spec/support/shared_examples_for_describables.rb
939
945
  - spec/support/shared_examples_for_events.rb