ddr-models 2.0.1 → 2.1.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +23 -17
- data/app/models/collection.rb +1 -35
- data/ddr-models.gemspec +2 -1
- data/lib/ddr/actions.rb +1 -0
- data/lib/ddr/actions/virus_check.rb +28 -0
- data/lib/ddr/auth.rb +4 -0
- data/lib/ddr/auth/ability_definitions/datastream_ability_definitions.rb +7 -5
- data/lib/ddr/auth/grouper_gateway.rb +9 -1
- data/lib/ddr/auth/permissions.rb +2 -1
- data/lib/ddr/auth/role_based_access_controls_enforcement.rb +5 -5
- data/lib/ddr/auth/roles/role_types.rb +2 -1
- data/lib/ddr/datastreams.rb +2 -2
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +27 -14
- data/lib/ddr/datastreams/datastream_behavior.rb +13 -0
- data/lib/ddr/datastreams/fits_datastream.rb +88 -0
- data/lib/ddr/derivatives/png_generator.rb +2 -0
- data/lib/ddr/derivatives/ptif_generator.rb +2 -0
- data/lib/ddr/events/fixity_check_event.rb +2 -2
- data/lib/ddr/events/virus_check_event.rb +2 -14
- data/lib/ddr/index.rb +29 -0
- data/lib/ddr/index/abstract_query_result.rb +23 -0
- data/lib/ddr/index/connection.rb +17 -0
- data/lib/ddr/index/csv_query_result.rb +61 -0
- data/lib/ddr/index/document_builder.rb +9 -0
- data/lib/ddr/index/field.rb +23 -0
- data/lib/ddr/index/fields.rb +83 -0
- data/lib/ddr/index/filter.rb +48 -0
- data/lib/ddr/index/filters.rb +19 -0
- data/lib/ddr/index/legacy_license_fields.rb +14 -0
- data/lib/ddr/index/query.rb +35 -0
- data/lib/ddr/index/query_builder.rb +74 -0
- data/lib/ddr/index/query_clause.rb +52 -0
- data/lib/ddr/index/query_result.rb +70 -0
- data/lib/ddr/index/query_value.rb +16 -0
- data/lib/ddr/index/response.rb +13 -0
- data/lib/ddr/index/unique_key_field.rb +12 -0
- data/lib/ddr/index_fields.rb +7 -53
- data/lib/ddr/jobs.rb +1 -1
- data/lib/ddr/jobs/fits_file_characterization.rb +51 -0
- data/lib/ddr/managers.rb +1 -0
- data/lib/ddr/managers/technical_metadata_manager.rb +104 -0
- data/lib/ddr/models.rb +39 -23
- data/lib/ddr/models/base.rb +0 -2
- data/lib/ddr/models/describable.rb +1 -1
- data/lib/ddr/models/effective_license.rb +9 -0
- data/lib/ddr/models/engine.rb +13 -0
- data/lib/ddr/models/file_management.rb +157 -160
- data/lib/ddr/models/governable.rb +0 -4
- data/lib/ddr/models/has_admin_metadata.rb +80 -72
- data/lib/ddr/models/has_children.rb +1 -1
- data/lib/ddr/models/has_content.rb +18 -0
- data/lib/ddr/models/has_struct_metadata.rb +5 -1
- data/lib/ddr/models/indexing.rb +32 -20
- data/lib/ddr/models/inherited_license.rb +13 -0
- data/lib/ddr/models/license.rb +38 -0
- data/lib/ddr/models/solr_document.rb +195 -211
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/models/year_facet.rb +154 -0
- data/lib/ddr/utils.rb +13 -1
- data/lib/ddr/vocab/roles.rb +0 -10
- data/spec/controllers/including_role_based_access_controls_enforcement_spec.rb +4 -4
- data/spec/datastreams/fits_datastream_spec.rb +84 -0
- data/spec/fixtures/fits/document.xml +65 -0
- data/spec/fixtures/fits/image.xml +59 -0
- data/spec/index/filter_spec.rb +47 -0
- data/spec/index/filters_spec.rb +17 -0
- data/spec/index/query_spec.rb +19 -0
- data/spec/jobs/fits_file_characterization_spec.rb +52 -0
- data/spec/managers/technical_metadata_manager_spec.rb +140 -0
- data/spec/models/active_fedora_datastream_spec.rb +44 -0
- data/spec/models/collection_spec.rb +7 -12
- data/spec/models/component_spec.rb +3 -6
- data/spec/models/effective_license_spec.rb +49 -0
- data/spec/models/has_admin_metadata_spec.rb +143 -194
- data/spec/models/has_struct_metadata_spec.rb +2 -2
- data/spec/models/indexing_spec.rb +40 -0
- data/spec/models/solr_document_spec.rb +96 -37
- data/spec/models/year_facet_spec.rb +65 -0
- data/spec/spec_helper.rb +1 -7
- data/spec/support/shared_examples_for_ddr_models.rb +0 -2
- data/spec/support/shared_examples_for_has_content.rb +37 -3
- metadata +79 -32
- data/lib/ddr/datastreams/properties_datastream.rb +0 -25
- data/lib/ddr/jobs/migrate_legacy_authorization.rb +0 -23
- data/lib/ddr/models/has_properties.rb +0 -15
- data/lib/ddr/models/licensable.rb +0 -28
- data/spec/auth/legacy_authorization_spec.rb +0 -94
- data/spec/auth/legacy_roles_spec.rb +0 -32
- data/spec/jobs/migrate_legacy_authorization_spec.rb +0 -43
- data/spec/support/shared_examples_for_has_properties.rb +0 -5
- data/spec/support/shared_examples_for_licensable.rb +0 -15
data/lib/ddr/models/version.rb
CHANGED
@@ -0,0 +1,154 @@
|
|
1
|
+
require "date"
|
2
|
+
|
3
|
+
module Ddr::Models
|
4
|
+
class YearFacet
|
5
|
+
|
6
|
+
EARLIEST_YEAR = 1000
|
7
|
+
|
8
|
+
# Between 1965 and 1968
|
9
|
+
BETWEEN = Regexp.new '\A([Bb]etween\s+)(\d{4})(\s+and\s+)(\d{4})\??\z'
|
10
|
+
|
11
|
+
# YYYx (192x)
|
12
|
+
# YYYX (192X)
|
13
|
+
# YYY? (192?)
|
14
|
+
# YYY- (192-)
|
15
|
+
# YYY-? (192-?)
|
16
|
+
IN_DECADE = Regexp.new '\A(\d{3})([xX\-]\??|\?)\z'
|
17
|
+
|
18
|
+
# YYxx (19xx)
|
19
|
+
IN_CENTURY = Regexp.new '\A(\d{2})xx\z'
|
20
|
+
|
21
|
+
# YYY0s (1920s)
|
22
|
+
# YYY0s? (1920s?)
|
23
|
+
DECADE = Regexp.new '\A(\d{3}0)s\??\z'
|
24
|
+
|
25
|
+
# YYYY-MM (2010-01)
|
26
|
+
# YYYY/MM (2010/01)
|
27
|
+
YEAR_MONTH = Regexp.new '\A(\d{4})[/-](0[1-9]|1[0-2])\z'
|
28
|
+
|
29
|
+
# YYYY-YYYY (1935-2010)
|
30
|
+
# YYYY/YYYY (1935/2010)
|
31
|
+
YEAR_RANGE = Regexp.new '\A(\d{4})[/-](\d{4})\z'
|
32
|
+
|
33
|
+
# YYYY (1979)
|
34
|
+
YEAR = Regexp.new '\A\d{4}\z'
|
35
|
+
|
36
|
+
SQUARE_BRACKETS = Regexp.new '[\[\]]'
|
37
|
+
|
38
|
+
# c. 1920
|
39
|
+
# ca. 1920
|
40
|
+
# c1920
|
41
|
+
CIRCA = Regexp.new '\b(circa\s+|ca?\.\s*|c(?=\d{4}[^\d]*))'
|
42
|
+
|
43
|
+
class << self
|
44
|
+
def call(obj)
|
45
|
+
new(obj).values
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_reader :obj, :values
|
50
|
+
|
51
|
+
def initialize(obj)
|
52
|
+
@obj = obj
|
53
|
+
@values = []
|
54
|
+
facet_values
|
55
|
+
end
|
56
|
+
|
57
|
+
def facet_values
|
58
|
+
obj.date.each do |date|
|
59
|
+
date.split(/;/).each do |value|
|
60
|
+
clean! value
|
61
|
+
years = extract_years(value)
|
62
|
+
validate! years
|
63
|
+
values.push *years
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def extract_years(value)
|
69
|
+
years = match_years(value) || parse_year(value)
|
70
|
+
Array(years)
|
71
|
+
end
|
72
|
+
|
73
|
+
def clean!(value)
|
74
|
+
value.strip!
|
75
|
+
value.gsub! SQUARE_BRACKETS, ""
|
76
|
+
value.gsub! CIRCA, ""
|
77
|
+
end
|
78
|
+
|
79
|
+
def validate!(years)
|
80
|
+
years = years & valid_years.to_a
|
81
|
+
end
|
82
|
+
|
83
|
+
def parse_year(value)
|
84
|
+
Date.parse(value).year
|
85
|
+
rescue ArgumentError
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
def valid_years
|
90
|
+
(EARLIEST_YEAR..latest_year)
|
91
|
+
end
|
92
|
+
|
93
|
+
def latest_year
|
94
|
+
Date.today.year + 100
|
95
|
+
end
|
96
|
+
|
97
|
+
def match_years(value)
|
98
|
+
result = match_year_range(value) ||
|
99
|
+
match_year_month(value) ||
|
100
|
+
match_year(value) ||
|
101
|
+
match_in_decade(value) ||
|
102
|
+
match_in_century(value) ||
|
103
|
+
match_decade(value) ||
|
104
|
+
match_between(value)
|
105
|
+
first_year, last_year = Array(result).map(&:to_i)
|
106
|
+
last_year ? (first_year..last_year) : first_year
|
107
|
+
end
|
108
|
+
|
109
|
+
def match_year_range(value)
|
110
|
+
if m = YEAR_RANGE.match(value)
|
111
|
+
m[1, 2]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def match_year_month(value)
|
116
|
+
if m = YEAR_MONTH.match(value)
|
117
|
+
m[1]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def match_year(value)
|
122
|
+
if m = YEAR.match(value)
|
123
|
+
value
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def match_in_decade(value)
|
128
|
+
if m = IN_DECADE.match(value)
|
129
|
+
[ "#{m[1]}0", "#{m[1]}9" ]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def match_in_century(value)
|
134
|
+
if m = IN_CENTURY.match(value)
|
135
|
+
[ "#{m[1]}00", "#{m[1]}99" ]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def match_decade(value)
|
140
|
+
if m = DECADE.match(value)
|
141
|
+
[ m[1], m[1].sub(/0\z/, "9") ]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def match_between(value)
|
146
|
+
if m = BETWEEN.match(value)
|
147
|
+
value.sub! m[1], "" # [Bb]etween
|
148
|
+
value.sub! m[3], "-" # and
|
149
|
+
match_year_range(value)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
data/lib/ddr/utils.rb
CHANGED
@@ -93,7 +93,7 @@ module Ddr::Utils
|
|
93
93
|
model = opts.fetch(:model, nil)
|
94
94
|
collection = opts.fetch(:collection, nil)
|
95
95
|
objs = []
|
96
|
-
ActiveFedora::Base.find_each( { Ddr::
|
96
|
+
ActiveFedora::Base.find_each( { Ddr::Index::Fields::IDENTIFIER_ALL => identifier }, { :cast => true } ) { |o| objs << o }
|
97
97
|
pids = []
|
98
98
|
objs.each { |obj| pids << obj.pid }
|
99
99
|
if model.present?
|
@@ -157,4 +157,16 @@ module Ddr::Utils
|
|
157
157
|
return klass
|
158
158
|
end
|
159
159
|
|
160
|
+
# Returns a string suitable to index as a Solr date
|
161
|
+
# @param dt [Date, DateTime, Time] the date/time
|
162
|
+
# @return [String]
|
163
|
+
def self.solr_date(dt)
|
164
|
+
return if dt.nil?
|
165
|
+
dt.to_time.utc.iso8601
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.solr_dates(dts)
|
169
|
+
dts.map { |dt| solr_date(dt) }
|
170
|
+
end
|
171
|
+
|
160
172
|
end
|
data/lib/ddr/vocab/roles.rb
CHANGED
@@ -2,8 +2,6 @@ module Ddr
|
|
2
2
|
module Vocab
|
3
3
|
class Roles < RDF::StrictVocabulary("http://repository.lib.duke.edu/vocab/roles/")
|
4
4
|
|
5
|
-
LEGACY_ROLES = [:administrator, :editor, :contributor, :downloader]
|
6
|
-
|
7
5
|
term :Role,
|
8
6
|
label: "Role",
|
9
7
|
comment: "An assertion of a role granted to an agent."
|
@@ -24,14 +22,6 @@ module Ddr
|
|
24
22
|
label: "Scope",
|
25
23
|
comment: "The scope within which the role applies."
|
26
24
|
|
27
|
-
#
|
28
|
-
# Deprecated terms
|
29
|
-
#
|
30
|
-
|
31
|
-
LEGACY_ROLES.each do |legacy_role|
|
32
|
-
term legacy_role, label: legacy_role.to_s.capitalize
|
33
|
-
end
|
34
|
-
|
35
25
|
end
|
36
26
|
end
|
37
27
|
end
|
@@ -14,9 +14,9 @@ RSpec.describe ApplicationController, type: :controller do
|
|
14
14
|
describe "#resource_role_filters" do
|
15
15
|
it "should include clauses for each agent for the current ability" do
|
16
16
|
expect(subject.resource_role_filters.split(" OR "))
|
17
|
-
.to contain_exactly("_query_:\"{!raw f=#{Ddr::
|
18
|
-
"_query_:\"{!raw f=#{Ddr::
|
19
|
-
"_query_:\"{!raw f=#{Ddr::
|
17
|
+
.to contain_exactly("_query_:\"{!raw f=#{Ddr::Index::Fields::RESOURCE_ROLE}}foo\"",
|
18
|
+
"_query_:\"{!raw f=#{Ddr::Index::Fields::RESOURCE_ROLE}}bar\"",
|
19
|
+
"_query_:\"{!raw f=#{Ddr::Index::Fields::RESOURCE_ROLE}}#{user.agent}\"")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -41,7 +41,7 @@ RSpec.describe ApplicationController, type: :controller do
|
|
41
41
|
allow(subject).to receive(:policy_role_policies) { ["info:fedora/test:13", "info:fedora/test:45"] }
|
42
42
|
end
|
43
43
|
it "should include clauses for is_governed_by relationships to the #policy_role_policies" do
|
44
|
-
expect(subject.policy_role_filters).to eq("_query_:\"{!raw f=#{Ddr::
|
44
|
+
expect(subject.policy_role_filters).to eq("_query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}info:fedora/test:13\" OR _query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}info:fedora/test:45\"")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Ddr::Datastreams
|
4
|
+
RSpec.describe FitsDatastream do
|
5
|
+
|
6
|
+
let(:fits_xml) do
|
7
|
+
<<-XML
|
8
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
+
<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="0.8.5" timestamp="7/3/15 8:29 PM">
|
10
|
+
<identification>
|
11
|
+
<identity format="Portable Document Format" mimetype="application/pdf" toolname="FITS" toolversion="0.8.5">
|
12
|
+
<tool toolname="Jhove" toolversion="1.5" />
|
13
|
+
<tool toolname="file utility" toolversion="5.04" />
|
14
|
+
<tool toolname="Exiftool" toolversion="9.13" />
|
15
|
+
<tool toolname="Droid" toolversion="6.1.3" />
|
16
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" />
|
17
|
+
<tool toolname="ffident" toolversion="0.2" />
|
18
|
+
<tool toolname="Tika" toolversion="1.3" />
|
19
|
+
<version toolname="Jhove" toolversion="1.5">1.6</version>
|
20
|
+
<externalIdentifier toolname="Droid" toolversion="6.1.3" type="puid">fmt/20</externalIdentifier>
|
21
|
+
</identity>
|
22
|
+
</identification>
|
23
|
+
<fileinfo>
|
24
|
+
<size toolname="Jhove" toolversion="1.5">3786205</size>
|
25
|
+
<creatingApplicationName toolname="Exiftool" toolversion="9.13" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/PREMIS Editorial Committee</creatingApplicationName>
|
26
|
+
<creatingApplicationName toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/Acrobat PDFMaker 11 for Word</creatingApplicationName>
|
27
|
+
<lastmodified toolname="Exiftool" toolversion="9.13" status="CONFLICT">2015:06:25 21:45:24-04:00</lastmodified>
|
28
|
+
<lastmodified toolname="Tika" toolversion="1.3" status="CONFLICT">2015-06-08T21:22:35Z</lastmodified>
|
29
|
+
<created toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2015:06:05 15:16:23-04:00</created>
|
30
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/premis-3-0-final.pdf</filepath>
|
31
|
+
<filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">premis-3-0-final.pdf</filename>
|
32
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">432ab76d650bfdc8f8d4a98cea9634bb</md5checksum>
|
33
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1435283124000</fslastmodified>
|
34
|
+
</fileinfo>
|
35
|
+
<filestatus>
|
36
|
+
<well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
|
37
|
+
<valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">false</valid>
|
38
|
+
<message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Invalid page tree node offset=390028</message>
|
39
|
+
<message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Outlines contain recursive references.</message>
|
40
|
+
</filestatus>
|
41
|
+
<metadata>
|
42
|
+
<document>
|
43
|
+
<title toolname="Jhove" toolversion="1.5" status="CONFLICT">CONTENTS</title>
|
44
|
+
<title toolname="Exiftool" toolversion="9.13" status="CONFLICT">PREMIS Data Dictionary for Preservation Metadata, Version 3.0</title>
|
45
|
+
<author toolname="Exiftool" toolversion="9.13">PREMIS Editorial Committee</author>
|
46
|
+
<language toolname="Jhove" toolversion="1.5">en</language>
|
47
|
+
<pageCount toolname="Exiftool" toolversion="9.13">282</pageCount>
|
48
|
+
<isTagged toolname="Jhove" toolversion="1.5" status="CONFLICT">no</isTagged>
|
49
|
+
<isTagged toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">yes</isTagged>
|
50
|
+
<hasOutline toolname="Jhove" toolversion="1.5">yes</hasOutline>
|
51
|
+
<hasAnnotations toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">no</hasAnnotations>
|
52
|
+
<isRightsManaged toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">no</isRightsManaged>
|
53
|
+
<isProtected toolname="Exiftool" toolversion="9.13">no</isProtected>
|
54
|
+
<hasForms toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="SINGLE_RESULT">yes</hasForms>
|
55
|
+
<subject toolname="Tika" toolversion="1.3" status="SINGLE_RESULT">PREMIS</subject>
|
56
|
+
</document>
|
57
|
+
</metadata>
|
58
|
+
<statistics fitsExecutionTime="2977">
|
59
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
60
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
61
|
+
<tool toolname="Jhove" toolversion="1.5" executionTime="1034" />
|
62
|
+
<tool toolname="file utility" toolversion="5.04" executionTime="912" />
|
63
|
+
<tool toolname="Exiftool" toolversion="9.13" executionTime="842" />
|
64
|
+
<tool toolname="Droid" toolversion="6.1.3" executionTime="336" />
|
65
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" executionTime="2192" />
|
66
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="351" />
|
67
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
68
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="410" />
|
69
|
+
<tool toolname="Tika" toolversion="1.3" executionTime="2911" />
|
70
|
+
</statistics>
|
71
|
+
</fits>
|
72
|
+
XML
|
73
|
+
end
|
74
|
+
|
75
|
+
before do
|
76
|
+
subject.content = fits_xml
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should exclude Exiftool from modified" do
|
80
|
+
expect(subject.modified).to eq(["2015-06-08T21:22:35Z"])
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,65 @@
|
|
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="0.8.5" timestamp="7/3/15 8:29 PM">
|
3
|
+
<identification>
|
4
|
+
<identity format="Portable Document Format" mimetype="application/pdf" toolname="FITS" toolversion="0.8.5">
|
5
|
+
<tool toolname="Jhove" toolversion="1.5" />
|
6
|
+
<tool toolname="file utility" toolversion="5.04" />
|
7
|
+
<tool toolname="Exiftool" toolversion="9.13" />
|
8
|
+
<tool toolname="Droid" toolversion="6.1.3" />
|
9
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" />
|
10
|
+
<tool toolname="ffident" toolversion="0.2" />
|
11
|
+
<tool toolname="Tika" toolversion="1.3" />
|
12
|
+
<version toolname="Jhove" toolversion="1.5">1.6</version>
|
13
|
+
<externalIdentifier toolname="Droid" toolversion="6.1.3" type="puid">fmt/20</externalIdentifier>
|
14
|
+
</identity>
|
15
|
+
</identification>
|
16
|
+
<fileinfo>
|
17
|
+
<size toolname="Jhove" toolversion="1.5">3786205</size>
|
18
|
+
<creatingApplicationName toolname="Exiftool" toolversion="9.13" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/PREMIS Editorial Committee</creatingApplicationName>
|
19
|
+
<creatingApplicationName toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">Adobe Acrobat Pro 11.0.3 Paper Capture Plug-in/Acrobat PDFMaker 11 for Word</creatingApplicationName>
|
20
|
+
<lastmodified toolname="Exiftool" toolversion="9.13" status="CONFLICT">2015:06:25 21:45:24-04:00</lastmodified>
|
21
|
+
<lastmodified toolname="Tika" toolversion="1.3" status="CONFLICT">2015-06-08T21:22:35Z</lastmodified>
|
22
|
+
<created toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2015:06:05 15:16:23-04:00</created>
|
23
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/premis-3-0-final.pdf</filepath>
|
24
|
+
<filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">premis-3-0-final.pdf</filename>
|
25
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">432ab76d650bfdc8f8d4a98cea9634bb</md5checksum>
|
26
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1435283124000</fslastmodified>
|
27
|
+
</fileinfo>
|
28
|
+
<filestatus>
|
29
|
+
<well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
|
30
|
+
<valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">false</valid>
|
31
|
+
<message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Invalid page tree node offset=390028</message>
|
32
|
+
<message toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">Outlines contain recursive references.</message>
|
33
|
+
</filestatus>
|
34
|
+
<metadata>
|
35
|
+
<document>
|
36
|
+
<title toolname="Jhove" toolversion="1.5" status="CONFLICT">CONTENTS</title>
|
37
|
+
<title toolname="Exiftool" toolversion="9.13" status="CONFLICT">PREMIS Data Dictionary for Preservation Metadata, Version 3.0</title>
|
38
|
+
<author toolname="Exiftool" toolversion="9.13">PREMIS Editorial Committee</author>
|
39
|
+
<language toolname="Jhove" toolversion="1.5">en</language>
|
40
|
+
<pageCount toolname="Exiftool" toolversion="9.13">282</pageCount>
|
41
|
+
<isTagged toolname="Jhove" toolversion="1.5" status="CONFLICT">no</isTagged>
|
42
|
+
<isTagged toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="CONFLICT">yes</isTagged>
|
43
|
+
<hasOutline toolname="Jhove" toolversion="1.5">yes</hasOutline>
|
44
|
+
<hasAnnotations toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">no</hasAnnotations>
|
45
|
+
<isRightsManaged toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">no</isRightsManaged>
|
46
|
+
<isProtected toolname="Exiftool" toolversion="9.13">no</isProtected>
|
47
|
+
<hasForms toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="SINGLE_RESULT">yes</hasForms>
|
48
|
+
<subject toolname="Tika" toolversion="1.3" status="SINGLE_RESULT">PREMIS</subject>
|
49
|
+
</document>
|
50
|
+
</metadata>
|
51
|
+
<statistics fitsExecutionTime="2977">
|
52
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
53
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
54
|
+
<tool toolname="Jhove" toolversion="1.5" executionTime="1034" />
|
55
|
+
<tool toolname="file utility" toolversion="5.04" executionTime="912" />
|
56
|
+
<tool toolname="Exiftool" toolversion="9.13" executionTime="842" />
|
57
|
+
<tool toolname="Droid" toolversion="6.1.3" executionTime="336" />
|
58
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" executionTime="2192" />
|
59
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="351" />
|
60
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
61
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="410" />
|
62
|
+
<tool toolname="Tika" toolversion="1.3" executionTime="2911" />
|
63
|
+
</statistics>
|
64
|
+
</fits>
|
65
|
+
|
@@ -0,0 +1,59 @@
|
|
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="0.8.5" timestamp="7/28/15 4:34 PM">
|
3
|
+
<identification>
|
4
|
+
<identity format="JPEG File Interchange Format" mimetype="image/jpeg" toolname="FITS" toolversion="0.8.5">
|
5
|
+
<tool toolname="Jhove" toolversion="1.5" />
|
6
|
+
<tool toolname="file utility" toolversion="5.04" />
|
7
|
+
<tool toolname="Exiftool" toolversion="9.13" />
|
8
|
+
<tool toolname="Droid" toolversion="6.1.3" />
|
9
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" />
|
10
|
+
<version toolname="Jhove" toolversion="1.5">1.01</version>
|
11
|
+
<externalIdentifier toolname="Droid" toolversion="6.1.3" type="puid">fmt/43</externalIdentifier>
|
12
|
+
</identity>
|
13
|
+
</identification>
|
14
|
+
<fileinfo>
|
15
|
+
<size toolname="Jhove" toolversion="1.5">94497</size>
|
16
|
+
<creatingApplicationName toolname="Jhove" toolversion="1.5">File source: https://commons.wikimedia.org/wiki/File:Dante_Gabriel_Rossetti_-_Joan_of_Arc_(1882).jpg</creatingApplicationName>
|
17
|
+
<lastmodified toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2015:07:28 10:19:55-04:00</lastmodified>
|
18
|
+
<filepath toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">/Users/dc/Downloads/Joan_of_Arc.jpg</filepath>
|
19
|
+
<filename toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">Joan_of_Arc.jpg</filename>
|
20
|
+
<md5checksum toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">bc575fbcbffff0248f5da3dddf8afd69</md5checksum>
|
21
|
+
<fslastmodified toolname="OIS File Information" toolversion="0.2" status="SINGLE_RESULT">1438093195000</fslastmodified>
|
22
|
+
</fileinfo>
|
23
|
+
<filestatus>
|
24
|
+
<well-formed toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</well-formed>
|
25
|
+
<valid toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">true</valid>
|
26
|
+
</filestatus>
|
27
|
+
<metadata>
|
28
|
+
<image>
|
29
|
+
<byteOrder toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">big endian</byteOrder>
|
30
|
+
<compressionScheme toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">JPEG (old-style)</compressionScheme>
|
31
|
+
<imageWidth toolname="Jhove" toolversion="1.5">500</imageWidth>
|
32
|
+
<imageHeight toolname="Jhove" toolversion="1.5">569</imageHeight>
|
33
|
+
<colorSpace toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">YCbCr</colorSpace>
|
34
|
+
<iccProfileName toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">c2</iccProfileName>
|
35
|
+
<YCbCrSubSampling toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">1 1</YCbCrSubSampling>
|
36
|
+
<samplingFrequencyUnit toolname="Jhove" toolversion="1.5">in.</samplingFrequencyUnit>
|
37
|
+
<xSamplingFrequency toolname="Jhove" toolversion="1.5">128</xSamplingFrequency>
|
38
|
+
<ySamplingFrequency toolname="Jhove" toolversion="1.5">128</ySamplingFrequency>
|
39
|
+
<bitsPerSample toolname="Jhove" toolversion="1.5">8 8 8</bitsPerSample>
|
40
|
+
<samplesPerPixel toolname="Jhove" toolversion="1.5" status="SINGLE_RESULT">3</samplesPerPixel>
|
41
|
+
<lightSource toolname="NLNZ Metadata Extractor" toolversion="3.4GA" status="SINGLE_RESULT">unknown</lightSource>
|
42
|
+
<iccProfileVersion toolname="Exiftool" toolversion="9.13" status="SINGLE_RESULT">2.1.0</iccProfileVersion>
|
43
|
+
</image>
|
44
|
+
</metadata>
|
45
|
+
<statistics fitsExecutionTime="897">
|
46
|
+
<tool toolname="OIS Audio Information" toolversion="0.1" status="did not run" />
|
47
|
+
<tool toolname="ADL Tool" toolversion="0.1" status="did not run" />
|
48
|
+
<tool toolname="Jhove" toolversion="1.5" executionTime="728" />
|
49
|
+
<tool toolname="file utility" toolversion="5.04" executionTime="662" />
|
50
|
+
<tool toolname="Exiftool" toolversion="9.13" executionTime="718" />
|
51
|
+
<tool toolname="Droid" toolversion="6.1.3" executionTime="85" />
|
52
|
+
<tool toolname="NLNZ Metadata Extractor" toolversion="3.4GA" executionTime="664" />
|
53
|
+
<tool toolname="OIS File Information" toolversion="0.2" executionTime="82" />
|
54
|
+
<tool toolname="OIS XML Metadata" toolversion="0.2" status="did not run" />
|
55
|
+
<tool toolname="ffident" toolversion="0.2" executionTime="315" />
|
56
|
+
<tool toolname="Tika" toolversion="1.3" executionTime="240" />
|
57
|
+
</statistics>
|
58
|
+
</fits>
|
59
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Ddr::Index
|
2
|
+
RSpec.describe Filter do
|
3
|
+
|
4
|
+
describe "#where(conditions)" do
|
5
|
+
it "should add raw query filters for the field, value hash of conditions" do
|
6
|
+
subject.where("foo"=>"bar", "spam"=>"eggs", "stuff"=>["dog", "cat", "bird"])
|
7
|
+
expect(subject.clauses).to eq(["{!term f=foo}bar", "{!term f=spam}eggs", "stuff:(dog OR cat OR bird)"])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#raw(*clauses)" do
|
12
|
+
it "should add the clauses w/o escaping" do
|
13
|
+
subject.raw("foo:bar", "spam:eggs")
|
14
|
+
expect(subject.clauses).to eq(["foo:bar", "spam:eggs"])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#present(field)" do
|
19
|
+
it "should add a \"field present\" clause" do
|
20
|
+
subject.present("foo")
|
21
|
+
expect(subject.clauses).to eq(["foo:[* TO *]"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#absent(field)" do
|
26
|
+
it "should add a \"field not present\" clause" do
|
27
|
+
subject.absent("foo")
|
28
|
+
expect(subject.clauses).to eq(["-foo:[* TO *]"])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#before_days(field, days)" do
|
33
|
+
it "should add a date range query clause" do
|
34
|
+
subject.before_days("foo", 60)
|
35
|
+
expect(subject.clauses).to eq(["foo:[* TO NOW-60DAYS]"])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#before(field, date_time)" do
|
40
|
+
it "should add a date range query clause" do
|
41
|
+
subject.before("foo", DateTime.parse("Thu, 27 Aug 2015 17:42:34 -0400"))
|
42
|
+
expect(subject.clauses).to eq(["foo:[* TO 2015-08-27T21:42:34Z]"])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|