ddr-models 3.0.0.beta.3 → 3.0.0.beta.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/config/locales/ddr-models.en.yml +74 -0
- data/ddr-models.gemspec +3 -2
- data/lib/ddr/auth.rb +5 -2
- data/lib/ddr/auth/roles.rb +0 -2
- data/lib/ddr/auth/roles/role_set.rb +1 -0
- data/lib/ddr/derivatives/generators/png_generator.rb +1 -1
- data/lib/ddr/index.rb +6 -2
- data/lib/ddr/index/abstract_query_result.rb +1 -1
- data/lib/ddr/index/csv_options.rb +14 -0
- data/lib/ddr/index/csv_query_result.rb +39 -32
- data/lib/ddr/index/field.rb +11 -1
- data/lib/ddr/index/field_attribute.rb +22 -0
- data/lib/ddr/index/fields.rb +29 -20
- data/lib/ddr/index/filter.rb +81 -30
- data/lib/ddr/index/filters.rb +15 -10
- data/lib/ddr/index/query.rb +34 -13
- data/lib/ddr/index/query_builder.rb +150 -30
- data/lib/ddr/index/query_clause.rb +64 -19
- data/lib/ddr/index/query_params.rb +40 -0
- data/lib/ddr/index/solr_csv_options.rb +18 -0
- data/lib/ddr/index/sort_order.rb +28 -0
- data/lib/ddr/jobs.rb +5 -1
- data/lib/ddr/jobs/fits_file_characterization.rb +3 -41
- data/lib/ddr/jobs/fixity_check.rb +13 -0
- data/lib/ddr/jobs/job.rb +36 -0
- data/lib/ddr/jobs/queue.rb +27 -0
- data/lib/ddr/jobs/update_index.rb +13 -0
- data/lib/ddr/models.rb +20 -3
- data/lib/ddr/models/admin_set.rb +7 -3
- data/lib/ddr/models/contact.rb +19 -0
- data/lib/ddr/models/error.rb +3 -0
- data/lib/ddr/models/file_characterization.rb +37 -0
- data/lib/ddr/models/finding_aid.rb +35 -2
- data/lib/ddr/models/has_admin_metadata.rb +5 -1
- data/lib/ddr/models/has_content.rb +4 -2
- data/lib/ddr/models/indexing.rb +7 -0
- data/lib/ddr/models/licenses/license.rb +7 -3
- data/lib/ddr/models/solr_document.rb +2 -2
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/models/with_content_file.rb +37 -0
- data/lib/ddr/vocab/asset.rb +3 -0
- data/spec/derivatives/png_generator_spec.rb +8 -1
- data/spec/fixtures/arrow1rightred_e0.gif +0 -0
- data/spec/index/fields_spec.rb +197 -0
- data/spec/index/filter_spec.rb +155 -30
- data/spec/index/query_builder_spec.rb +116 -0
- data/spec/index/query_clause_spec.rb +58 -0
- data/spec/index/query_spec.rb +39 -10
- data/spec/jobs/fits_file_characterization_spec.rb +7 -43
- data/spec/jobs/fixity_check_spec.rb +22 -0
- data/spec/jobs/job_spec.rb +40 -0
- data/spec/jobs/update_index_spec.rb +22 -0
- data/spec/managers/derivatives_manager_spec.rb +15 -11
- data/spec/models/admin_set_spec.rb +28 -10
- data/spec/models/contact_spec.rb +42 -0
- data/spec/models/effective_license_spec.rb +17 -7
- data/spec/models/file_characterization_spec.rb +38 -0
- data/spec/models/finding_aid_spec.rb +31 -8
- data/spec/models/has_admin_metadata_spec.rb +8 -5
- data/spec/models/indexing_spec.rb +2 -0
- data/spec/models/license_spec.rb +31 -10
- data/spec/models/solr_document_spec.rb +23 -3
- data/spec/models/with_content_file_spec.rb +32 -0
- data/spec/spec_helper.rb +2 -0
- metadata +66 -28
- data/lib/ddr/contacts.rb +0 -25
- data/lib/ddr/index/query_value.rb +0 -18
- data/lib/ddr/models/access_controllable.rb +0 -12
- data/spec/auth/ldap_gateway_spec.rb +0 -9
- data/spec/contacts/contacts_spec.rb +0 -26
- data/spec/index/filters_spec.rb +0 -17
data/lib/ddr/models/admin_set.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
require "
|
1
|
+
require "active_resource"
|
2
2
|
|
3
3
|
module Ddr::Models
|
4
|
-
class AdminSet <
|
4
|
+
class AdminSet < ActiveResource::Base
|
5
|
+
|
6
|
+
self.site = ENV["DDR_AUX_API_URL"]
|
5
7
|
|
6
8
|
def self.call(obj)
|
7
9
|
if obj.admin_set
|
8
|
-
find
|
10
|
+
new get(:find, code: obj.admin_set)
|
9
11
|
end
|
12
|
+
rescue ActiveResource::ResourceNotFound => e
|
13
|
+
raise Ddr::Models::NotFoundError, e
|
10
14
|
end
|
11
15
|
|
12
16
|
def to_s
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "active_resource"
|
2
|
+
|
3
|
+
module Ddr::Models
|
4
|
+
class Contact < ActiveResource::Base
|
5
|
+
|
6
|
+
self.site = ENV["DDR_AUX_API_URL"]
|
7
|
+
|
8
|
+
def self.call(slug)
|
9
|
+
new get(:find, slug: slug)
|
10
|
+
rescue ActiveResource::ResourceNotFound => e
|
11
|
+
raise Ddr::Models::NotFoundError, e
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
name
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/ddr/models/error.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require "delegate"
|
2
|
+
require "shellwords"
|
3
|
+
|
4
|
+
module Ddr::Models
|
5
|
+
class FileCharacterization < SimpleDelegator
|
6
|
+
|
7
|
+
class FITSError < Error; end
|
8
|
+
|
9
|
+
def self.call(obj)
|
10
|
+
new(obj).call
|
11
|
+
end
|
12
|
+
|
13
|
+
def call
|
14
|
+
with_content_file do |path|
|
15
|
+
fits_output = run_fits(path)
|
16
|
+
reload
|
17
|
+
fits.content = fits_output
|
18
|
+
save!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def run_fits(path)
|
25
|
+
output = `#{fits_command} -i #{Shellwords.escape(path)}`
|
26
|
+
unless $?.success?
|
27
|
+
raise FITSError, output
|
28
|
+
end
|
29
|
+
output
|
30
|
+
end
|
31
|
+
|
32
|
+
def fits_command
|
33
|
+
File.join(Ddr::Models.fits_home, 'fits.sh')
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -1,22 +1,55 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
|
1
3
|
module Ddr::Models
|
2
4
|
class FindingAid
|
3
5
|
|
4
6
|
attr_reader :ead_id
|
5
7
|
|
8
|
+
EAD_XMLNS = "urn:isbn:1-931666-22-9"
|
9
|
+
|
6
10
|
def initialize(ead_id)
|
7
11
|
@ead_id = ead_id
|
8
12
|
end
|
9
13
|
|
10
14
|
def url
|
11
|
-
|
15
|
+
doc.css("eadid").attr("url").text
|
12
16
|
end
|
13
17
|
|
18
|
+
# The finding aid title
|
14
19
|
def title
|
15
|
-
|
20
|
+
doc.css("titleproper").children.first.text.strip
|
21
|
+
end
|
22
|
+
|
23
|
+
def repository
|
24
|
+
collection.xpath('ead:did/ead:repository/ead:corpname', ead: EAD_XMLNS).text
|
25
|
+
end
|
26
|
+
|
27
|
+
def collection_date_span
|
28
|
+
collection.xpath('ead:did/ead:unitdate[@type="inclusive"]', ead: EAD_XMLNS).text
|
29
|
+
end
|
30
|
+
|
31
|
+
def collection_number
|
32
|
+
collection.xpath('ead:did/ead:unitid', ead: EAD_XMLNS).text
|
33
|
+
end
|
34
|
+
|
35
|
+
def collection_title
|
36
|
+
collection.xpath('ead:did/ead:unittitle', ead: EAD_XMLNS).text
|
37
|
+
end
|
38
|
+
|
39
|
+
def extent
|
40
|
+
collection.xpath('ead:did/ead:physdesc/ead:extent', ead: EAD_XMLNS).map(&:text).join("; ")
|
41
|
+
end
|
42
|
+
|
43
|
+
def abstract
|
44
|
+
collection.xpath('ead:did/ead:abstract', ead: EAD_XMLNS).text
|
16
45
|
end
|
17
46
|
|
18
47
|
private
|
19
48
|
|
49
|
+
def collection
|
50
|
+
doc.xpath('//ead:archdesc[@level="collection"]', ead: EAD_XMLNS)
|
51
|
+
end
|
52
|
+
|
20
53
|
# @raise [OpenURI::HTTPError] if 404, etc.
|
21
54
|
def doc
|
22
55
|
@doc ||= Nokogiri::XML(open(ead_xml_url))
|
@@ -14,6 +14,10 @@ module Ddr::Models
|
|
14
14
|
predicate: Ddr::Vocab::Asset.adminSet,
|
15
15
|
multiple: false
|
16
16
|
|
17
|
+
property :aspace_id,
|
18
|
+
predicate: Ddr::Vocab::Asset.archivesSpaceId,
|
19
|
+
multiple: false
|
20
|
+
|
17
21
|
property :depositor,
|
18
22
|
predicate: RDF::Vocab::MARCRelators.dpt,
|
19
23
|
multiple: false
|
@@ -98,7 +102,7 @@ module Ddr::Models
|
|
98
102
|
end
|
99
103
|
|
100
104
|
def research_help
|
101
|
-
Ddr::
|
105
|
+
Ddr::Models::Contact.call(research_help_contact) if research_help_contact
|
102
106
|
end
|
103
107
|
|
104
108
|
def effective_license
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
|
3
1
|
module Ddr
|
4
2
|
module Models
|
5
3
|
module HasContent
|
@@ -107,6 +105,10 @@ module Ddr
|
|
107
105
|
!extractedText.empty?
|
108
106
|
end
|
109
107
|
|
108
|
+
def with_content_file(&block)
|
109
|
+
WithContentFile.new(self, &block)
|
110
|
+
end
|
111
|
+
|
110
112
|
protected
|
111
113
|
|
112
114
|
def update_derivatives
|
data/lib/ddr/models/indexing.rb
CHANGED
@@ -4,6 +4,10 @@ module Ddr
|
|
4
4
|
|
5
5
|
include Ddr::Index::Fields
|
6
6
|
|
7
|
+
def self.const_missing(name)
|
8
|
+
Ddr::Index::Fields.const_missing(name)
|
9
|
+
end
|
10
|
+
|
7
11
|
def to_solr(solr_doc=Hash.new, opts={})
|
8
12
|
solr_doc = super(solr_doc, opts)
|
9
13
|
solr_doc.merge index_fields
|
@@ -13,8 +17,10 @@ module Ddr
|
|
13
17
|
fields = {
|
14
18
|
ACCESS_ROLE => roles.to_json,
|
15
19
|
ADMIN_SET => admin_set,
|
20
|
+
ASPACE_ID => aspace_id,
|
16
21
|
ATTACHED_FILES => attached_files_profile.to_json,
|
17
22
|
BOX_NUMBER_FACET => desc_metadata_values('box_number'),
|
23
|
+
CONTRIBUTOR_FACET => desc_metadata_values('contributor'),
|
18
24
|
CREATOR_FACET => descMetadata.creator,
|
19
25
|
DATE_FACET => descMetadata.date,
|
20
26
|
DATE_SORT => date_sort,
|
@@ -34,6 +40,7 @@ module Ddr
|
|
34
40
|
RESOURCE_ROLE => roles.in_resource_scope.agents,
|
35
41
|
SERIES_FACET => desc_metadata_values('series'),
|
36
42
|
SPATIAL_FACET => desc_metadata_values('spatial'),
|
43
|
+
SUBJECT_FACET => desc_metadata_values('subject'),
|
37
44
|
TITLE => title_display,
|
38
45
|
TYPE_FACET => descMetadata.type,
|
39
46
|
WORKFLOW_STATE => workflow_state,
|
@@ -1,17 +1,21 @@
|
|
1
|
-
require "
|
1
|
+
require "active_resource"
|
2
2
|
|
3
3
|
module Ddr::Models
|
4
|
-
class License <
|
4
|
+
class License < ActiveResource::Base
|
5
5
|
extend Deprecation
|
6
6
|
|
7
|
+
self.site = ENV["DDR_AUX_API_URL"]
|
8
|
+
|
7
9
|
attr_accessor :object_id
|
8
10
|
|
9
11
|
def self.call(obj)
|
10
12
|
if obj.license
|
11
|
-
license = find
|
13
|
+
license = new get(:find, url: obj.license)
|
12
14
|
license.object_id = obj.id
|
13
15
|
license
|
14
16
|
end
|
17
|
+
rescue ActiveResource::ResourceNotFound => e
|
18
|
+
raise Ddr::Models::NotFoundError, e
|
15
19
|
end
|
16
20
|
|
17
21
|
def pid
|
@@ -90,7 +90,7 @@ module Ddr::Models
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def has_datastream?(dsID)
|
93
|
-
datastreams[dsID].present?
|
93
|
+
datastreams.key?(dsID) && datastreams[dsID]["size"].present?
|
94
94
|
end
|
95
95
|
|
96
96
|
def has_admin_policy?
|
@@ -200,7 +200,7 @@ module Ddr::Models
|
|
200
200
|
|
201
201
|
def research_help
|
202
202
|
research_help_contact = self[Ddr::Index::Fields::RESEARCH_HELP_CONTACT] || inherited_research_help_contact
|
203
|
-
Ddr::
|
203
|
+
Ddr::Models::Contact.call(research_help_contact) if research_help_contact
|
204
204
|
end
|
205
205
|
|
206
206
|
def parent_uri
|
data/lib/ddr/models/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require "tempfile"
|
2
|
+
require "delegate"
|
3
|
+
|
4
|
+
module Ddr::Models
|
5
|
+
class WithContentFile < SimpleDelegator
|
6
|
+
|
7
|
+
def initialize(obj, &block)
|
8
|
+
super(obj)
|
9
|
+
with_temp_file &block
|
10
|
+
end
|
11
|
+
|
12
|
+
# Yields path of tempfile containing content to block
|
13
|
+
# @yield [String] the path to the tempfile containing content
|
14
|
+
def with_temp_file
|
15
|
+
filename = original_filename || content.default_file_name
|
16
|
+
basename = [ File.basename(filename, ".*"), File.extname(filename) ]
|
17
|
+
infile = Tempfile.open(basename, Ddr::Models.tempdir, encoding: 'ascii-8bit')
|
18
|
+
begin
|
19
|
+
infile.write(content.content)
|
20
|
+
infile.close
|
21
|
+
verify_checksum!(infile)
|
22
|
+
yield infile.path
|
23
|
+
ensure
|
24
|
+
infile.close unless infile.closed?
|
25
|
+
File.unlink(infile)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def verify_checksum!(file)
|
30
|
+
digest = Ddr::Utils.digest(File.read(file), content.checksum.algorithm)
|
31
|
+
if digest != content.checksum.value
|
32
|
+
raise ChecksumInvalid, "The checksum of the downloaded file does not match the stored checksum of the content."
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
data/lib/ddr/vocab/asset.rb
CHANGED
@@ -16,7 +16,14 @@ module Ddr::Derivatives
|
|
16
16
|
expect(File.size(output_path)).to be > 0
|
17
17
|
end
|
18
18
|
end
|
19
|
+
context "animated gif source" do
|
20
|
+
let(:source_path) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "arrow1rightred_e0.gif") }
|
21
|
+
it "should generate a non-empty file" do
|
22
|
+
generator.generate(source_path, output_path)
|
23
|
+
expect(File.size(output_path)).to be > 0
|
24
|
+
end
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
28
|
end
|
22
|
-
end
|
29
|
+
end
|
Binary file
|
@@ -0,0 +1,197 @@
|
|
1
|
+
module Ddr::Index
|
2
|
+
RSpec.describe Fields do
|
3
|
+
|
4
|
+
describe "module methods" do
|
5
|
+
specify {
|
6
|
+
expect(Fields.techmd).to contain_exactly(
|
7
|
+
Fields::TECHMD_COLOR_SPACE,
|
8
|
+
Fields::TECHMD_CREATING_APPLICATION,
|
9
|
+
Fields::TECHMD_CREATION_TIME,
|
10
|
+
Fields::TECHMD_FILE_SIZE,
|
11
|
+
Fields::TECHMD_FITS_VERSION,
|
12
|
+
Fields::TECHMD_FITS_DATETIME,
|
13
|
+
Fields::TECHMD_FORMAT_LABEL,
|
14
|
+
Fields::TECHMD_FORMAT_VERSION,
|
15
|
+
Fields::TECHMD_IMAGE_HEIGHT,
|
16
|
+
Fields::TECHMD_IMAGE_WIDTH,
|
17
|
+
Fields::TECHMD_MEDIA_TYPE,
|
18
|
+
Fields::TECHMD_MODIFICATION_TIME,
|
19
|
+
Fields::TECHMD_PRONOM_IDENTIFIER,
|
20
|
+
Fields::TECHMD_VALID,
|
21
|
+
Fields::TECHMD_WELL_FORMED
|
22
|
+
)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "constants" do
|
27
|
+
describe "ID" do
|
28
|
+
subject { Fields::ID }
|
29
|
+
its(:label) { is_expected.to eq "Fedora PID" }
|
30
|
+
its(:heading) { is_expected.to eq "pid" }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "PID" do
|
34
|
+
subject { Fields::PID }
|
35
|
+
its(:label) { is_expected.to eq "Fedora PID" }
|
36
|
+
its(:heading) { is_expected.to eq "pid" }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "ACCESS_ROLE" do
|
40
|
+
subject { Fields::ACCESS_ROLE }
|
41
|
+
its(:label) { is_expected.to eq "Access Role" }
|
42
|
+
its(:heading) { is_expected.to eq "access_role" }
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "ACTIVE_FEDORA_MODEL" do
|
46
|
+
subject { Fields::ACTIVE_FEDORA_MODEL }
|
47
|
+
its(:label) { is_expected.to eq "Model" }
|
48
|
+
its(:heading) { is_expected.to eq "model" }
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "ADMIN_SET" do
|
52
|
+
subject { Fields::ADMIN_SET }
|
53
|
+
its(:label) { is_expected.to eq "Admin Set" }
|
54
|
+
its(:heading) { is_expected.to eq "admin_set" }
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "ASPACE_ID" do
|
58
|
+
subject { Fields::ASPACE_ID }
|
59
|
+
its(:label) { is_expected.to eq "ArchivesSpace ID" }
|
60
|
+
its(:heading) { is_expected.to eq "aspace_id" }
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "DOI" do
|
64
|
+
subject { Fields::DOI }
|
65
|
+
its(:label) { is_expected.to eq "DOI" }
|
66
|
+
its(:heading) { is_expected.to eq "doi" }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "EAD_ID" do
|
70
|
+
subject { Fields::EAD_ID }
|
71
|
+
its(:label) { is_expected.to eq "EAD ID" }
|
72
|
+
its(:heading) { is_expected.to eq "ead_id" }
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "LOCAL_ID" do
|
76
|
+
subject { Fields::LOCAL_ID }
|
77
|
+
its(:label) { is_expected.to eq "Local ID" }
|
78
|
+
its(:heading) { is_expected.to eq "local_id" }
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "OBJECT_CREATE_DATE" do
|
82
|
+
subject { Fields::OBJECT_CREATE_DATE }
|
83
|
+
its(:label) { is_expected.to eq "Creation Date" }
|
84
|
+
its(:heading) { is_expected.to eq "creation_date" }
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "OBJECT_MODIFIED_DATE" do
|
88
|
+
subject { Fields::OBJECT_MODIFIED_DATE }
|
89
|
+
its(:label) { is_expected.to eq "Modification Date" }
|
90
|
+
its(:heading) { is_expected.to eq "modification_date" }
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "PERMANENT_ID" do
|
94
|
+
subject { Fields::PERMANENT_ID }
|
95
|
+
its(:label) { is_expected.to eq "Permanent ID" }
|
96
|
+
its(:heading) { is_expected.to eq "permanent_id" }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "PERMANENT_URL" do
|
100
|
+
subject { Fields::PERMANENT_URL }
|
101
|
+
its(:label) { is_expected.to eq "Permanent URL" }
|
102
|
+
its(:heading) { is_expected.to eq "permanent_url" }
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "TECHMD_COLOR_SPACE" do
|
106
|
+
subject { Fields::TECHMD_COLOR_SPACE }
|
107
|
+
its(:label) { is_expected.to eq "Color Space" }
|
108
|
+
its(:heading) { is_expected.to eq "color_space" }
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "TECHMD_CREATING_APPLICATION" do
|
112
|
+
subject { Fields::TECHMD_CREATING_APPLICATION }
|
113
|
+
its(:label) { is_expected.to eq "Creating Application" }
|
114
|
+
its(:heading) { is_expected.to eq "creating_application" }
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "TECHMD_CREATION_TIME" do
|
118
|
+
subject { Fields::TECHMD_CREATION_TIME }
|
119
|
+
its(:label) { is_expected.to eq "Creation Time" }
|
120
|
+
its(:heading) { is_expected.to eq "creation_time" }
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "TECHMD_FILE_SIZE" do
|
124
|
+
subject { Fields::TECHMD_FILE_SIZE }
|
125
|
+
its(:label) { is_expected.to eq "File Size" }
|
126
|
+
its(:heading) { is_expected.to eq "file_size" }
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "TECHMD_FITS_VERSION" do
|
130
|
+
subject { Fields::TECHMD_FITS_VERSION }
|
131
|
+
its(:label) { is_expected.to eq "FITS Version" }
|
132
|
+
its(:heading) { is_expected.to eq "fits_version" }
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "TECHMD_FITS_DATETIME" do
|
136
|
+
subject { Fields::TECHMD_FITS_DATETIME }
|
137
|
+
its(:label) { is_expected.to eq "FITS Run At" }
|
138
|
+
its(:heading) { is_expected.to eq "fits_datetime" }
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "TECHMD_FORMAT_LABEL" do
|
142
|
+
subject { Fields::TECHMD_FORMAT_LABEL }
|
143
|
+
its(:label) { is_expected.to eq "Format Label" }
|
144
|
+
its(:heading) { is_expected.to eq "format_label" }
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "TECHMD_FORMAT_VERSION" do
|
148
|
+
subject { Fields::TECHMD_FORMAT_VERSION }
|
149
|
+
its(:label) { is_expected.to eq "Format Version" }
|
150
|
+
its(:heading) { is_expected.to eq "format_version" }
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "TECHMD_IMAGE_HEIGHT" do
|
154
|
+
subject { Fields::TECHMD_IMAGE_HEIGHT }
|
155
|
+
its(:label) { is_expected.to eq "Image Height" }
|
156
|
+
its(:heading) { is_expected.to eq "image_height" }
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "TECHMD_IMAGE_WIDTH" do
|
160
|
+
subject { Fields::TECHMD_IMAGE_WIDTH }
|
161
|
+
its(:label) { is_expected.to eq "Image Width" }
|
162
|
+
its(:heading) { is_expected.to eq "image_width" }
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "TECHMD_MEDIA_TYPE" do
|
166
|
+
subject { Fields::TECHMD_MEDIA_TYPE }
|
167
|
+
its(:label) { is_expected.to eq "Media Type" }
|
168
|
+
its(:heading) { is_expected.to eq "media_type" }
|
169
|
+
end
|
170
|
+
|
171
|
+
describe "TECHMD_MODIFICATION_TIME" do
|
172
|
+
subject { Fields::TECHMD_MODIFICATION_TIME }
|
173
|
+
its(:label) { is_expected.to eq "Modification Time" }
|
174
|
+
its(:heading) { is_expected.to eq "modification_time" }
|
175
|
+
end
|
176
|
+
|
177
|
+
describe "TECHMD_PRONOM_IDENTIFIER" do
|
178
|
+
subject { Fields::TECHMD_PRONOM_IDENTIFIER }
|
179
|
+
its(:label) { is_expected.to eq "PRONOM Unique ID" }
|
180
|
+
its(:heading) { is_expected.to eq "pronom_uid" }
|
181
|
+
end
|
182
|
+
|
183
|
+
describe "TECHMD_VALID" do
|
184
|
+
subject { Fields::TECHMD_VALID }
|
185
|
+
its(:label) { is_expected.to eq "Valid" }
|
186
|
+
its(:heading) { is_expected.to eq "valid" }
|
187
|
+
end
|
188
|
+
|
189
|
+
describe "TECHMD_WELL_FORMED" do
|
190
|
+
subject { Fields::TECHMD_WELL_FORMED }
|
191
|
+
its(:label) { is_expected.to eq "Well-formed" }
|
192
|
+
its(:heading) { is_expected.to eq "well_formed" }
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|