hydra-works 0.17.0 → 1.0.0
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 +3 -1
- data/.rubocop.yml +1 -0
- data/.travis.yml +2 -2
- data/CHANGELOG.md +621 -0
- data/CODE_OF_CONDUCT.md +36 -0
- data/CONTRIBUTING.md +23 -21
- data/LICENSE +14 -16
- data/README.md +28 -1
- data/SUPPORT.md +5 -0
- data/hydra-works.gemspec +10 -9
- data/lib/hydra/works/characterization.rb +5 -4
- data/lib/hydra/works/characterization/fits_document.rb +22 -8
- data/lib/hydra/works/characterization/schema/audio_schema.rb +2 -0
- data/lib/hydra/works/characterization/schema/video_schema.rb +2 -0
- data/lib/hydra/works/services/add_external_file_to_file_set.rb +1 -1
- data/lib/hydra/works/services/add_file_to_file_set.rb +1 -1
- data/lib/hydra/works/version.rb +1 -1
- data/spec/fixtures/fits_1.2.0_avi.xml +83 -0
- data/spec/fixtures/fits_1.2.0_jpg.xml +76 -0
- data/spec/fixtures/fits_1.2.0_mp3.xml +51 -0
- data/spec/fixtures/fits_1.2.0_mp4.xml +88 -0
- data/spec/hydra/works/characterization_spec.rb +12 -5
- data/spec/hydra/works/models/collection_spec.rb +12 -0
- data/spec/hydra/works/models/concerns/file_set/contained_files_spec.rb +3 -16
- data/spec/hydra/works/services/characterization_service_spec.rb +70 -26
- data/use-cases/princeton_book_use_case.md +1 -1
- metadata +66 -35
|
@@ -0,0 +1,76 @@
|
|
|
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="1.2.0" timestamp="12/28/17 2:57 PM">
|
|
3
|
+
<identification>
|
|
4
|
+
<identity format="JPEG EXIF" mimetype="image/jpeg" toolname="FITS" toolversion="1.2.0">
|
|
5
|
+
<tool toolname="Exiftool" toolversion="10.00" />
|
|
6
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" />
|
|
7
|
+
<version toolname="Exiftool" toolversion="10.00">1.02</version>
|
|
8
|
+
</identity>
|
|
9
|
+
</identification>
|
|
10
|
+
<fileinfo>
|
|
11
|
+
<size toolname="Jhove" toolversion="1.16">2510223</size>
|
|
12
|
+
<creatingApplicationName toolname="Exiftool" toolversion="10.00" status="CONFLICT">Canon EOS-1D Mark III</creatingApplicationName>
|
|
13
|
+
<creatingApplicationName toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">Adobe Photoshop CS3 Macintosh</creatingApplicationName>
|
|
14
|
+
<lastmodified toolname="Exiftool" toolversion="10.00" status="CONFLICT">2009:02:04 16:10:47</lastmodified>
|
|
15
|
+
<lastmodified toolname="Tika" toolversion="1.10" status="CONFLICT">2009-02-04T16:10:47</lastmodified>
|
|
16
|
+
<created toolname="Exiftool" toolversion="10.00" status="CONFLICT">2009:02:04 11:05:25.36-06:00</created>
|
|
17
|
+
<created toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">2009:02:04 16:10:47</created>
|
|
18
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/kefo/Work/fits/samples/image/127783_717918.jpg</filepath>
|
|
19
|
+
<filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">127783_717918.jpg</filename>
|
|
20
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">ece070706671c92a27386e8f3aeae346</md5checksum>
|
|
21
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1514490121000</fslastmodified>
|
|
22
|
+
</fileinfo>
|
|
23
|
+
<filestatus />
|
|
24
|
+
<metadata>
|
|
25
|
+
<image>
|
|
26
|
+
<compressionScheme toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">LZW</compressionScheme>
|
|
27
|
+
<imageWidth toolname="Exiftool" toolversion="10.00">3000</imageWidth>
|
|
28
|
+
<imageHeight toolname="Exiftool" toolversion="10.00">2153</imageHeight>
|
|
29
|
+
<colorSpace toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">RGB</colorSpace>
|
|
30
|
+
<iccProfileName toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">Adobe RGB (1998)</iccProfileName>
|
|
31
|
+
<iccProfileVersion toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">2.1.0</iccProfileVersion>
|
|
32
|
+
<YCbCrSubSampling toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">1 1</YCbCrSubSampling>
|
|
33
|
+
<orientation toolname="Exiftool" toolversion="10.00">normal*</orientation>
|
|
34
|
+
<samplingFrequencyUnit toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">in.</samplingFrequencyUnit>
|
|
35
|
+
<xSamplingFrequency toolname="Exiftool" toolversion="10.00">240</xSamplingFrequency>
|
|
36
|
+
<ySamplingFrequency toolname="Exiftool" toolversion="10.00">240</ySamplingFrequency>
|
|
37
|
+
<bitsPerSample toolname="Exiftool" toolversion="10.00">8 8 8</bitsPerSample>
|
|
38
|
+
<samplesPerPixel toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">3</samplesPerPixel>
|
|
39
|
+
<digitalCameraManufacturer toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">Canon</digitalCameraManufacturer>
|
|
40
|
+
<digitalCameraModelName toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">Canon EOS-1D Mark III</digitalCameraModelName>
|
|
41
|
+
<scanningSoftwareName toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">Adobe Photoshop CS3 Macintosh</scanningSoftwareName>
|
|
42
|
+
<fNumber toolname="Exiftool" toolversion="10.00">11.0</fNumber>
|
|
43
|
+
<exposureTime toolname="Exiftool" toolversion="10.00">0.125</exposureTime>
|
|
44
|
+
<exposureProgram toolname="Exiftool" toolversion="10.00">Manual</exposureProgram>
|
|
45
|
+
<isoSpeedRating toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">100</isoSpeedRating>
|
|
46
|
+
<exifVersion toolname="Exiftool" toolversion="10.00" status="CONFLICT">0221</exifVersion>
|
|
47
|
+
<exifVersion toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">1220</exifVersion>
|
|
48
|
+
<shutterSpeedValue toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">1/8</shutterSpeedValue>
|
|
49
|
+
<apertureValue toolname="Exiftool" toolversion="10.00" status="CONFLICT">11.0</apertureValue>
|
|
50
|
+
<apertureValue toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">6.918863</apertureValue>
|
|
51
|
+
<exposureBiasValue toolname="Exiftool" toolversion="10.00" status="SINGLE_RESULT">0</exposureBiasValue>
|
|
52
|
+
<maxApertureValue toolname="Exiftool" toolversion="10.00" status="CONFLICT">2.5</maxApertureValue>
|
|
53
|
+
<maxApertureValue toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">2.625</maxApertureValue>
|
|
54
|
+
<meteringMode toolname="Exiftool" toolversion="10.00">Pattern</meteringMode>
|
|
55
|
+
<lightSource toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">unknown</lightSource>
|
|
56
|
+
<flash toolname="Exiftool" toolversion="10.00">Flash did not fire</flash>
|
|
57
|
+
<focalLength toolname="Exiftool" toolversion="10.00">50.0</focalLength>
|
|
58
|
+
</image>
|
|
59
|
+
</metadata>
|
|
60
|
+
<statistics fitsExecutionTime="255">
|
|
61
|
+
<tool toolname="MediaInfo" toolversion="0.7.75" status="did not run" />
|
|
62
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
|
63
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
|
64
|
+
<tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
|
|
65
|
+
<tool toolname="Droid" toolversion="6.3" executionTime="5" />
|
|
66
|
+
<tool toolname="Jhove" toolversion="1.16" executionTime="68" />
|
|
67
|
+
<tool toolname="file utility" toolversion="5.29" executionTime="61" />
|
|
68
|
+
<tool toolname="Exiftool" toolversion="10.00" executionTime="240" />
|
|
69
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" executionTime="63" />
|
|
70
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="10" />
|
|
71
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
|
72
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="4" />
|
|
73
|
+
<tool toolname="Tika" toolversion="1.10" executionTime="127" />
|
|
74
|
+
</statistics>
|
|
75
|
+
</fits>
|
|
76
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
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="1.2.0" timestamp="4/4/18 4:13 PM">
|
|
3
|
+
<identification>
|
|
4
|
+
<identity format="MPEG 1/2 Audio Layer 3" mimetype="audio/mpeg" toolname="FITS" toolversion="1.2.0">
|
|
5
|
+
<tool toolname="Droid" toolversion="6.3" />
|
|
6
|
+
<tool toolname="Exiftool" toolversion="10.00" />
|
|
7
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" />
|
|
8
|
+
<tool toolname="ffident" toolversion="0.2" />
|
|
9
|
+
<tool toolname="Tika" toolversion="1.10" />
|
|
10
|
+
<version toolname="NLNZ Metadata Extractor" toolversion="3.6GA">1</version>
|
|
11
|
+
<externalIdentifier toolname="Droid" toolversion="6.3" type="puid">fmt/134</externalIdentifier>
|
|
12
|
+
</identity>
|
|
13
|
+
</identification>
|
|
14
|
+
<fileinfo>
|
|
15
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/cjcolvar/Documents/Code/samvera/hydra-works/spec/fixtures/test5.mp3</filepath>
|
|
16
|
+
<filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">test5.mp3</filename>
|
|
17
|
+
<size toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">366464</size>
|
|
18
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">d98da8d92c397294164b02a0382eb0e6</md5checksum>
|
|
19
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1522855873000</fslastmodified>
|
|
20
|
+
</fileinfo>
|
|
21
|
+
<filestatus />
|
|
22
|
+
<metadata>
|
|
23
|
+
<audio>
|
|
24
|
+
<duration toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">0:0:15:261</duration>
|
|
25
|
+
<bitRate toolname="Exiftool" toolversion="10.00" status="CONFLICT">192 kbps</bitRate>
|
|
26
|
+
<bitRate toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="CONFLICT">192000</bitRate>
|
|
27
|
+
<sampleRate toolname="Exiftool" toolversion="10.00">44100</sampleRate>
|
|
28
|
+
<channels toolname="Exiftool" toolversion="10.00">2</channels>
|
|
29
|
+
<milliseconds toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="SINGLE_RESULT">15261</milliseconds>
|
|
30
|
+
<author toolname="Tika" toolversion="1.10" status="SINGLE_RESULT">Hendrik Broekman</author>
|
|
31
|
+
<title toolname="Tika" toolversion="1.10" status="SINGLE_RESULT">BachGavotteShort</title>
|
|
32
|
+
<sampleRate toolname="Tika" toolversion="1.10" status="SINGLE_RESULT">44100</sampleRate>
|
|
33
|
+
</audio>
|
|
34
|
+
</metadata>
|
|
35
|
+
<statistics fitsExecutionTime="2609">
|
|
36
|
+
<tool toolname="MediaInfo" toolversion="0.7.75" status="did not run" />
|
|
37
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
|
38
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
|
39
|
+
<tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
|
|
40
|
+
<tool toolname="Droid" toolversion="6.3" executionTime="1557" />
|
|
41
|
+
<tool toolname="Jhove" toolversion="1.16" executionTime="2561" />
|
|
42
|
+
<tool toolname="file utility" toolversion="5.31" executionTime="1513" />
|
|
43
|
+
<tool toolname="Exiftool" toolversion="10.00" executionTime="1568" />
|
|
44
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" executionTime="1251" />
|
|
45
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="463" />
|
|
46
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
|
47
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="1315" />
|
|
48
|
+
<tool toolname="Tika" toolversion="1.10" executionTime="640" />
|
|
49
|
+
</statistics>
|
|
50
|
+
</fits>
|
|
51
|
+
|
|
@@ -0,0 +1,88 @@
|
|
|
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="1.2.0" timestamp="4/4/18 3:02 PM">
|
|
3
|
+
<identification status="CONFLICT">
|
|
4
|
+
<identity format="Quicktime" mimetype="video/quicktime" toolname="FITS" toolversion="1.2.0">
|
|
5
|
+
<tool toolname="MediaInfo" toolversion="0.7.75" />
|
|
6
|
+
</identity>
|
|
7
|
+
<identity format="MPEG-4 Media File" mimetype="application/mp4, video/mp4" toolname="FITS" toolversion="1.2.0">
|
|
8
|
+
<tool toolname="Droid" toolversion="6.3" />
|
|
9
|
+
<externalIdentifier toolname="Droid" toolversion="6.3" type="puid">fmt/199</externalIdentifier>
|
|
10
|
+
</identity>
|
|
11
|
+
<identity format="ISO Media, MP4 v2 [ISO 14496-14]" mimetype="video/mp4" toolname="FITS" toolversion="1.2.0">
|
|
12
|
+
<tool toolname="file utility" toolversion="5.22" />
|
|
13
|
+
</identity>
|
|
14
|
+
</identification>
|
|
15
|
+
<fileinfo>
|
|
16
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/home/app/avalon/tmp/original_file.mp4</filepath>
|
|
17
|
+
<filename toolname="MediaInfo" toolversion="0.7.75">original_file.mp4</filename>
|
|
18
|
+
<size toolname="MediaInfo" toolversion="0.7.75">199160</size>
|
|
19
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">7ae24368ccb7a6c6422a14ff73f33c9a</md5checksum>
|
|
20
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1522853877000</fslastmodified>
|
|
21
|
+
</fileinfo>
|
|
22
|
+
<filestatus />
|
|
23
|
+
<metadata>
|
|
24
|
+
<video>
|
|
25
|
+
<location toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">/home/app/avalon/tmp/original_file.mp4</location>
|
|
26
|
+
<mimeType toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">video/quicktime</mimeType>
|
|
27
|
+
<format toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">Quicktime</format>
|
|
28
|
+
<formatProfile toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">Base Media / Version 2</formatProfile>
|
|
29
|
+
<duration toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">6315</duration>
|
|
30
|
+
<bitRate toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">252301</bitRate>
|
|
31
|
+
<dateCreated toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">UTC 2010-09-23 00:37:25</dateCreated>
|
|
32
|
+
<dateModified toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">UTC 2018-04-04 14:57:57</dateModified>
|
|
33
|
+
<track type="video" id="1" toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">
|
|
34
|
+
<videoDataEncoding>avc1</videoDataEncoding>
|
|
35
|
+
<codecId>avc1</codecId>
|
|
36
|
+
<codecCC>avc1</codecCC>
|
|
37
|
+
<codecVersion>Main@L1.1</codecVersion>
|
|
38
|
+
<codecName>AVC</codecName>
|
|
39
|
+
<codecFamily>H.264</codecFamily>
|
|
40
|
+
<codecInfo>Advanced Video Codec</codecInfo>
|
|
41
|
+
<compression>Unknown</compression>
|
|
42
|
+
<byteOrder>Unknown</byteOrder>
|
|
43
|
+
<bitDepth>8 bits</bitDepth>
|
|
44
|
+
<bitRate>74477</bitRate>
|
|
45
|
+
<duration>6282</duration>
|
|
46
|
+
<trackSize>58482</trackSize>
|
|
47
|
+
<width>200 pixels</width>
|
|
48
|
+
<height>110 pixels</height>
|
|
49
|
+
<frameRate>24.390</frameRate>
|
|
50
|
+
<frameRateMode>Variable</frameRateMode>
|
|
51
|
+
<frameCount>149</frameCount>
|
|
52
|
+
<aspectRatio>16:9</aspectRatio>
|
|
53
|
+
<scanningFormat>Progressive</scanningFormat>
|
|
54
|
+
<chromaSubsampling>4:2:0</chromaSubsampling>
|
|
55
|
+
<colorspace>YUV</colorspace>
|
|
56
|
+
</track>
|
|
57
|
+
<track type="audio" id="2" toolname="MediaInfo" toolversion="0.7.75" status="SINGLE_RESULT">
|
|
58
|
+
<audioDataEncoding>AAC</audioDataEncoding>
|
|
59
|
+
<codecId>40</codecId>
|
|
60
|
+
<codecFamily>AAC</codecFamily>
|
|
61
|
+
<compression>Lossy</compression>
|
|
62
|
+
<bitRate>201736</bitRate>
|
|
63
|
+
<bitRateMode>Variable</bitRateMode>
|
|
64
|
+
<duration>6315</duration>
|
|
65
|
+
<trackSize>134999</trackSize>
|
|
66
|
+
<soundField>Front: C</soundField>
|
|
67
|
+
<samplingRate>48000</samplingRate>
|
|
68
|
+
<numSamples>303120</numSamples>
|
|
69
|
+
<channels>1</channels>
|
|
70
|
+
</track>
|
|
71
|
+
</video>
|
|
72
|
+
</metadata>
|
|
73
|
+
<statistics fitsExecutionTime="266">
|
|
74
|
+
<tool toolname="MediaInfo" toolversion="0.7.75" executionTime="252" />
|
|
75
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
|
76
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
|
77
|
+
<tool toolname="VTT Tool" toolversion="0.1" status="did not run" />
|
|
78
|
+
<tool toolname="Droid" toolversion="6.3" executionTime="103" />
|
|
79
|
+
<tool toolname="Jhove" toolversion="1.16" status="did not run" />
|
|
80
|
+
<tool toolname="file utility" toolversion="5.22" executionTime="227" />
|
|
81
|
+
<tool toolname="Exiftool" toolversion="10.00" status="did not run" />
|
|
82
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.6GA" status="did not run" />
|
|
83
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="95" />
|
|
84
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
|
85
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="198" />
|
|
86
|
+
<tool toolname="Tika" toolversion="1.10" status="did not run" />
|
|
87
|
+
</statistics>
|
|
88
|
+
</fits>
|
|
@@ -60,14 +60,17 @@ describe Hydra::Works::Characterization do
|
|
|
60
60
|
it { is_expected.to respond_to(:height) }
|
|
61
61
|
it { is_expected.to respond_to(:width) }
|
|
62
62
|
it { is_expected.to respond_to(:frame_rate) }
|
|
63
|
+
it { is_expected.to respond_to(:bit_rate) }
|
|
63
64
|
it { is_expected.to respond_to(:duration) }
|
|
64
65
|
it { is_expected.to respond_to(:sample_rate) }
|
|
66
|
+
it { is_expected.to respond_to(:aspect_ratio) }
|
|
65
67
|
end
|
|
66
68
|
context "with Audio schema" do
|
|
67
69
|
it { is_expected.to respond_to(:bit_depth) }
|
|
68
70
|
it { is_expected.to respond_to(:channels) }
|
|
69
71
|
it { is_expected.to respond_to(:data_format) }
|
|
70
72
|
it { is_expected.to respond_to(:frame_rate) }
|
|
73
|
+
it { is_expected.to respond_to(:bit_rate) }
|
|
71
74
|
it { is_expected.to respond_to(:duration) }
|
|
72
75
|
it { is_expected.to respond_to(:sample_rate) }
|
|
73
76
|
it { is_expected.to respond_to(:offset) }
|
|
@@ -77,17 +80,21 @@ describe Hydra::Works::Characterization do
|
|
|
77
80
|
describe "::mapper" do
|
|
78
81
|
let(:mapper_keys) do
|
|
79
82
|
[
|
|
80
|
-
:audio_duration,
|
|
81
|
-
:audio_sample_rate,
|
|
82
|
-
:exif_tool_version,
|
|
83
83
|
:file_author,
|
|
84
84
|
:file_language,
|
|
85
85
|
:file_mime_type,
|
|
86
|
+
:audio_duration,
|
|
87
|
+
:audio_sample_rate,
|
|
88
|
+
:audio_bit_rate,
|
|
86
89
|
:video_audio_sample_rate,
|
|
90
|
+
:track_frame_rate,
|
|
87
91
|
:video_duration,
|
|
88
|
-
:video_height,
|
|
89
92
|
:video_sample_rate,
|
|
90
|
-
:
|
|
93
|
+
:video_bit_rate,
|
|
94
|
+
:video_width,
|
|
95
|
+
:video_track_width,
|
|
96
|
+
:video_height,
|
|
97
|
+
:video_track_height
|
|
91
98
|
]
|
|
92
99
|
end
|
|
93
100
|
subject { described_class.mapper.keys }
|
|
@@ -118,6 +118,18 @@ describe Hydra::Works::Collection do
|
|
|
118
118
|
it { is_expected.to eq [collection1] }
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
+
describe 'member_of_collections' do
|
|
122
|
+
let(:collection1) { described_class.create }
|
|
123
|
+
before do
|
|
124
|
+
collection.member_of_collections = [collection1]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'is a member of the collection' do
|
|
128
|
+
expect(collection.member_of_collections).to eq [collection1]
|
|
129
|
+
expect(collection.member_of_collection_ids).to eq [collection1.id]
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
121
133
|
describe 'adding file_sets to collections' do
|
|
122
134
|
let(:file_set) { Hydra::Works::FileSet.new }
|
|
123
135
|
let(:exception) { ActiveFedora::AssociationTypeMismatch }
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Hydra::Works::ContainedFiles do
|
|
4
|
-
let(:file_set)
|
|
5
|
-
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
let(:thumbnail) do
|
|
9
|
-
file = file_set.files.build
|
|
10
|
-
Hydra::PCDM::AddTypeToFile.call(file, pcdm_thumbnail_uri)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
let(:file) { file_set.files.build }
|
|
14
|
-
let(:pcdm_thumbnail_uri) { ::RDF::URI('http://pcdm.org/use#ThumbnailImage') }
|
|
15
|
-
|
|
16
|
-
before do
|
|
17
|
-
file_set.files = [file]
|
|
18
|
-
end
|
|
4
|
+
let(:file_set) { Hydra::Works::FileSet.create }
|
|
5
|
+
let(:pcdm_thumbnail_uri) { ::RDF::URI('http://pcdm.org/use#ThumbnailImage') }
|
|
19
6
|
|
|
20
7
|
describe '#thumbnail' do
|
|
21
8
|
context 'when a thumbnail is present' do
|
|
@@ -63,7 +50,7 @@ describe Hydra::Works::ContainedFiles do
|
|
|
63
50
|
end
|
|
64
51
|
it 'retains origin pcdm.File RDF type' do
|
|
65
52
|
expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#OriginalFile'))
|
|
66
|
-
expect(
|
|
53
|
+
expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
|
|
67
54
|
end
|
|
68
55
|
end
|
|
69
56
|
|
|
@@ -81,20 +81,24 @@ describe Hydra::Works::CharacterizationService do
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
context "passing an object that does not have matching properties" do
|
|
84
|
-
let!(:current_schemas) { ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas }
|
|
85
|
-
|
|
86
84
|
let(:characterization) { class_double("Hydra::FileCharacterization").as_stubbed_const }
|
|
87
85
|
let(:fits_filename) { 'fits_0.8.5_pdf.xml' }
|
|
88
86
|
let(:fits_response) { IO.read(File.join(fixture_path, fits_filename)) }
|
|
89
87
|
let(:file_content) { 'dummy content' }
|
|
90
88
|
let(:file) { Hydra::PCDM::File.new { |f| f.content = file_content } }
|
|
91
89
|
|
|
92
|
-
|
|
90
|
+
around do |example|
|
|
91
|
+
@current_schemas = ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas
|
|
92
|
+
@metadata_schema = Hydra::PCDM::File::GeneratedMetadataSchema
|
|
93
93
|
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas = [ActiveFedora::WithMetadata::DefaultSchema]
|
|
94
|
-
|
|
94
|
+
example.run
|
|
95
|
+
ActiveFedora::WithMetadata::DefaultMetadataClassFactory.file_metadata_schemas = @current_schemas
|
|
96
|
+
# This next line required to force resetting the metadata schema class used by Hydra::PCDM::File
|
|
97
|
+
Hydra::PCDM::File.instance_variable_set(:@metadata_schema, @metadata_schema)
|
|
95
98
|
end
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
|
|
100
|
+
before do
|
|
101
|
+
allow(characterization).to receive(:characterize).and_return(fits_response)
|
|
98
102
|
end
|
|
99
103
|
|
|
100
104
|
it 'does not explode with an error' do
|
|
@@ -133,38 +137,78 @@ describe Hydra::Works::CharacterizationService do
|
|
|
133
137
|
end
|
|
134
138
|
|
|
135
139
|
context 'using image metadata' do
|
|
136
|
-
let(:fits_filename) { 'fits_0.8.5_jp2.xml' }
|
|
137
140
|
let(:fits_response) { IO.read(File.join(fixture_path, fits_filename)) }
|
|
138
141
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
context 'with fits_0.8.5' do
|
|
143
|
+
let(:fits_filename) { 'fits_0.8.5_jp2.xml' }
|
|
144
|
+
it 'assigns expected values to image properties.' do
|
|
145
|
+
expect(file.file_size).to eq(["11043"])
|
|
146
|
+
expect(file.byte_order).to eq(["big endian"])
|
|
147
|
+
expect(file.compression).to contain_exactly("JPEG 2000 Lossless", "JPEG 2000")
|
|
148
|
+
expect(file.width).to eq(["512"])
|
|
149
|
+
expect(file.height).to eq(["465"])
|
|
150
|
+
expect(file.color_space).to eq(["sRGB"])
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
context 'with fits_1.2.0' do
|
|
155
|
+
let(:fits_filename) { 'fits_1.2.0_jpg.xml' }
|
|
156
|
+
it 'ensures duplicate values are not returned for exifVersion, dateCreated, dateModified.' do
|
|
157
|
+
expect(file.exif_version).to eq(["0221"])
|
|
158
|
+
expect(file.date_created).to eq(["2009:02:04 11:05:25.36-06:00"])
|
|
159
|
+
expect(file.date_modified).to eq(["2009:02:04 16:10:47"])
|
|
160
|
+
end
|
|
146
161
|
end
|
|
147
162
|
end
|
|
163
|
+
|
|
148
164
|
context 'using video metadata' do
|
|
149
|
-
let(:fits_filename) { 'fits_0.8.5_avi.xml' }
|
|
150
165
|
let(:fits_response) { IO.read(File.join(fixture_path, fits_filename)) }
|
|
151
166
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
167
|
+
context 'with fits_0.8.5' do
|
|
168
|
+
let(:fits_filename) { 'fits_0.8.5_avi.xml' }
|
|
169
|
+
it 'assigns expected values to video properties.' do
|
|
170
|
+
expect(file.height).to eq(["264"])
|
|
171
|
+
expect(file.width).to eq(["356"])
|
|
172
|
+
expect(file.duration).to eq(["14.10 s"])
|
|
173
|
+
expect(file.frame_rate).to eq(["10"])
|
|
174
|
+
expect(file.sample_rate).to eq(["11025"])
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
context 'with fits_1.2.0' do
|
|
179
|
+
let(:fits_filename) { 'fits_1.2.0_avi.xml' }
|
|
180
|
+
it 'assigns expected values to video properties.' do
|
|
181
|
+
expect(file.height).to eq(["264"])
|
|
182
|
+
expect(file.width).to eq(["356"])
|
|
183
|
+
expect(file.duration).to eq(["14148"])
|
|
184
|
+
expect(file.frame_rate).to eq(["10.000"])
|
|
185
|
+
expect(file.bit_rate).to eq(["409204"])
|
|
186
|
+
expect(file.aspect_ratio).to eq(["4:3"])
|
|
187
|
+
end
|
|
158
188
|
end
|
|
159
189
|
end
|
|
190
|
+
|
|
160
191
|
context 'using audio metadata' do
|
|
161
|
-
let(:fits_filename) { 'fits_0.8.5_mp3.xml' }
|
|
162
192
|
let(:fits_response) { IO.read(File.join(fixture_path, fits_filename)) }
|
|
163
193
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
194
|
+
context 'with fits_0.8.5' do
|
|
195
|
+
let(:fits_filename) { 'fits_0.8.5_mp3.xml' }
|
|
196
|
+
it 'assigns expected values to audio properties.' do
|
|
197
|
+
expect(file.mime_type).to eq("audio/mpeg")
|
|
198
|
+
expect(file.duration).to eq(["0:0:15:261"])
|
|
199
|
+
expect(file.bit_rate).to include("192000")
|
|
200
|
+
expect(file.sample_rate).to eq(["44100"])
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
context 'with fits_1.2.0' do
|
|
205
|
+
let(:fits_filename) { 'fits_1.2.0_mp3.xml' }
|
|
206
|
+
it 'assigns expected values to audio properties.' do
|
|
207
|
+
expect(file.mime_type).to eq("audio/mpeg")
|
|
208
|
+
expect(file.duration).to eq(["0:0:15:261"])
|
|
209
|
+
expect(file.bit_rate).to include("192000")
|
|
210
|
+
expect(file.sample_rate).to eq(["44100"])
|
|
211
|
+
end
|
|
168
212
|
end
|
|
169
213
|
end
|
|
170
214
|
|
|
@@ -114,4 +114,4 @@ Can have one or more physical volumes. Below assumes this is the case.
|
|
|
114
114
|
|
|
115
115
|
## Proposal
|
|
116
116
|
|
|
117
|
-
No doubt there are other ways, but I feel confident that [this approach](https://github.com/
|
|
117
|
+
No doubt there are other ways, but I feel confident that [this approach](https://github.com/samvera/hydra-works/issues/9#issuecomment-58511913) would solve all of the above use cases. Validations included in subclasses of Hydra::Work would serve to constrain recursion.
|