ddr-models 2.7.6 → 2.8.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/app/models/collection.rb +1 -1
- data/app/models/component.rb +22 -31
- data/config/initializers/active_fedora_base.rb +8 -0
- data/config/locales/ddr-models.en.yml +4 -0
- data/lib/ddr/datastreams.rb +12 -10
- data/lib/ddr/datastreams/administrative_metadata_datastream.rb +6 -0
- data/lib/ddr/datastreams/streamable_media_datastream.rb +5 -0
- data/lib/ddr/index/fields.rb +7 -5
- data/lib/ddr/managers/derivatives_manager.rb +12 -7
- data/lib/ddr/models.rb +19 -9
- data/lib/ddr/models/base.rb +10 -3
- data/lib/ddr/models/file_management.rb +1 -1
- data/lib/ddr/models/has_admin_metadata.rb +8 -9
- data/lib/ddr/models/indexing.rb +18 -3
- data/lib/ddr/models/language.rb +31 -0
- data/lib/ddr/models/media_type.rb +22 -0
- data/lib/ddr/models/{licenses/license.rb → rights_statement.rb} +3 -7
- data/lib/ddr/models/solr_document.rb +22 -2
- data/lib/ddr/models/streamable.rb +22 -0
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/utils.rb +4 -4
- data/lib/ddr/vocab/asset.rb +8 -0
- data/spec/factories/collection_factories.rb +1 -0
- data/spec/index/fields_spec.rb +18 -0
- data/spec/managers/derivatives_manager_spec.rb +2 -5
- data/spec/models/active_fedora_base_spec.rb +3 -0
- data/spec/models/admin_set_spec.rb +2 -1
- data/spec/models/attachment_spec.rb +1 -0
- data/spec/models/collection_spec.rb +4 -7
- data/spec/models/component_spec.rb +20 -5
- data/spec/models/has_struct_metadata_spec.rb +0 -1
- data/spec/models/indexing_spec.rb +91 -44
- data/spec/models/item_spec.rb +1 -0
- data/spec/models/language_spec.rb +59 -0
- data/spec/models/media_type_spec.rb +46 -0
- data/spec/models/{license_spec.rb → rights_statement_spec.rb} +9 -12
- data/spec/models/solr_document_spec.rb +57 -2
- data/spec/models/target_spec.rb +1 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/shared_examples_for_ddr_models.rb +12 -0
- data/spec/support/shared_examples_for_governables.rb +2 -1
- data/spec/support/shared_examples_for_streamable_media.rb +22 -0
- metadata +17 -13
- data/lib/ddr/models/licenses/admin_policy_license.rb +0 -11
- data/lib/ddr/models/licenses/effective_license.rb +0 -9
- data/lib/ddr/models/licenses/inherited_license.rb +0 -9
- data/lib/ddr/models/licenses/parent_license.rb +0 -11
- data/spec/models/effective_license_spec.rb +0 -74
@@ -0,0 +1,31 @@
|
|
1
|
+
require "active_resource"
|
2
|
+
|
3
|
+
module Ddr::Models
|
4
|
+
class Language < ActiveResource::Base
|
5
|
+
|
6
|
+
self.site = ENV["DDR_AUX_API_URL"]
|
7
|
+
|
8
|
+
def self.call(obj)
|
9
|
+
obj.language.map do |lang|
|
10
|
+
find_by_code(lang)
|
11
|
+
end
|
12
|
+
rescue ActiveResource::ResourceNotFound => e
|
13
|
+
raise Ddr::Models::NotFoundError, e
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find_by_code(code)
|
17
|
+
return unless code
|
18
|
+
new get(:find, code: code)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.codes
|
22
|
+
all.map(&:code)
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
label
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ddr::Models
|
2
|
+
class MediaType
|
3
|
+
|
4
|
+
def self.call(file_or_path)
|
5
|
+
path = file_or_path.respond_to?(:path) ? file_or_path.path : file_or_path
|
6
|
+
# Use preferred media type, if available
|
7
|
+
media_type = Ddr::Models.preferred_media_types[File.extname(path)]
|
8
|
+
if !media_type
|
9
|
+
if file_or_path.respond_to?(:content_type)
|
10
|
+
# Rails ActionDispatch::Http::UploadedFile
|
11
|
+
media_type = file_or_path.content_type
|
12
|
+
else
|
13
|
+
# Fall back to first MIME type or default
|
14
|
+
mime_types = MIME::Types.of(path)
|
15
|
+
media_type = mime_types.empty? ? Ddr::Models.default_mime_type : mime_types.first.content_type
|
16
|
+
end
|
17
|
+
end
|
18
|
+
media_type
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -1,17 +1,13 @@
|
|
1
1
|
require "active_resource"
|
2
2
|
|
3
3
|
module Ddr::Models
|
4
|
-
class
|
4
|
+
class RightsStatement < ActiveResource::Base
|
5
5
|
|
6
6
|
self.site = ENV["DDR_AUX_API_URL"]
|
7
7
|
|
8
|
-
attr_accessor :pid
|
9
|
-
|
10
8
|
def self.call(obj)
|
11
|
-
if obj.
|
12
|
-
|
13
|
-
license.pid = obj.pid
|
14
|
-
license
|
9
|
+
if obj.rights.present?
|
10
|
+
new get(:find, url: obj.rights.first)
|
15
11
|
end
|
16
12
|
rescue ActiveResource::ResourceNotFound => e
|
17
13
|
raise Ddr::Models::NotFoundError, e
|
@@ -3,6 +3,9 @@ require 'json'
|
|
3
3
|
module Ddr::Models
|
4
4
|
module SolrDocument
|
5
5
|
extend ActiveSupport::Concern
|
6
|
+
extend Deprecation
|
7
|
+
|
8
|
+
self.deprecation_horizon = 'ddr-models v3.0'
|
6
9
|
|
7
10
|
included do
|
8
11
|
alias_method :pid, :id
|
@@ -176,9 +179,11 @@ module Ddr::Models
|
|
176
179
|
active_fedora_model.tableize
|
177
180
|
end
|
178
181
|
|
179
|
-
def
|
180
|
-
@
|
182
|
+
def rights_statement
|
183
|
+
@rights_statement ||= RightsStatement.call(self)
|
181
184
|
end
|
185
|
+
alias_method :effective_license, :rights_statement
|
186
|
+
deprecation_deprecate :effective_license
|
182
187
|
|
183
188
|
def roles
|
184
189
|
@roles ||= Ddr::Auth::Roles::DetachedRoleSet.from_json(access_role)
|
@@ -228,6 +233,21 @@ module Ddr::Models
|
|
228
233
|
end
|
229
234
|
end
|
230
235
|
|
236
|
+
def streamable?
|
237
|
+
has_datastream?(Ddr::Datastreams::STREAMABLE_MEDIA)
|
238
|
+
end
|
239
|
+
|
240
|
+
def streamable_media_path
|
241
|
+
if streamable?
|
242
|
+
Ddr::Utils.path_from_uri(datastreams[Ddr::Datastreams::STREAMABLE_MEDIA]["dsLocation"])
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# FIXME - Probably need a more general solution mapping object reader methods to index field names.
|
247
|
+
def rights
|
248
|
+
self["rights_tesim"]
|
249
|
+
end
|
250
|
+
|
231
251
|
private
|
232
252
|
|
233
253
|
def targets_query
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ddr::Models
|
2
|
+
module Streamable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
has_file_datastream name: Ddr::Datastreams::STREAMABLE_MEDIA,
|
7
|
+
type: Ddr::Datastreams::StreamableMediaDatastream,
|
8
|
+
versionable: true,
|
9
|
+
label: "Streamable media file for this object",
|
10
|
+
control_group: "E"
|
11
|
+
end
|
12
|
+
|
13
|
+
def streamable_media_type
|
14
|
+
datastreams[Ddr::Datastreams::STREAMABLE_MEDIA].mimeType
|
15
|
+
end
|
16
|
+
|
17
|
+
def streamable_media_path
|
18
|
+
datastreams[Ddr::Datastreams::STREAMABLE_MEDIA].file_path
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/ddr/models/version.rb
CHANGED
data/lib/ddr/utils.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'openssl'
|
2
2
|
|
3
3
|
module Ddr::Utils
|
4
|
+
extend Deprecation
|
4
5
|
|
5
6
|
def self.digest content, algorithm
|
6
7
|
raise TypeError, "Algorithm must be a string: #{algorithm.inspect}" unless algorithm.is_a?(String)
|
@@ -14,10 +15,9 @@ module Ddr::Utils
|
|
14
15
|
# file can be a File object or file path (String)
|
15
16
|
# @return [String] the mime type or default
|
16
17
|
def self.mime_type_for(file, file_name=nil)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
mime_types.empty? ? Ddr::Models.default_mime_type : mime_types.first.content_type
|
18
|
+
Deprecation.warn(self, "`Ddr::Utils.mime_type_for` is deprecated and will be removed in ddr-models 3.0." \
|
19
|
+
" Use `Ddr::Models::MediaType.call(file)` instead. (called from #{caller.first})")
|
20
|
+
Ddr::Models::MediaType.call(file_name || file)
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.file_or_path?(file)
|
data/lib/ddr/vocab/asset.rb
CHANGED
@@ -35,5 +35,13 @@ module Ddr::Vocab
|
|
35
35
|
label: "Rights Note",
|
36
36
|
comment: "Free-text statement about the rights status of the resource."
|
37
37
|
|
38
|
+
property "alephId",
|
39
|
+
label: "Aleph ID",
|
40
|
+
comment: "The Aleph identifier for a catalog record corresponding to the object."
|
41
|
+
|
42
|
+
property "affiliation",
|
43
|
+
label: "Affiliation",
|
44
|
+
comment: "An organizational entity associated with the object content."
|
45
|
+
|
38
46
|
end
|
39
47
|
end
|
data/spec/index/fields_spec.rb
CHANGED
@@ -141,6 +141,18 @@ module Ddr::Index
|
|
141
141
|
its(:heading) { is_expected.to eq "interviewer_name_facet" }
|
142
142
|
end
|
143
143
|
|
144
|
+
describe "LANGUAGE_FACET" do
|
145
|
+
subject { Fields::LANGUAGE_FACET }
|
146
|
+
its(:label) { is_expected.to eq "Language Facet" }
|
147
|
+
its(:heading) { is_expected.to eq "language_facet" }
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "LANGUAGE_NAME" do
|
151
|
+
subject { Fields::LANGUAGE_NAME }
|
152
|
+
its(:label) { is_expected.to eq "Language Name" }
|
153
|
+
its(:heading) { is_expected.to eq "language_name" }
|
154
|
+
end
|
155
|
+
|
144
156
|
describe "LITHOGRAPHER_FACET" do
|
145
157
|
subject { Fields::LITHOGRAPHER_FACET }
|
146
158
|
its(:label) { is_expected.to eq "Lithographer Facet" }
|
@@ -225,6 +237,12 @@ module Ddr::Index
|
|
225
237
|
its(:heading) { is_expected.to eq "setting_facet" }
|
226
238
|
end
|
227
239
|
|
240
|
+
describe "STREAMABLE_MEDIA_TYPE" do
|
241
|
+
subject { Fields::STREAMABLE_MEDIA_TYPE }
|
242
|
+
its(:label) { is_expected.to eq "Streamable Media Type" }
|
243
|
+
its(:heading) { is_expected.to eq "streamable_media_type" }
|
244
|
+
end
|
245
|
+
|
228
246
|
describe "SUBSERIES_FACET" do
|
229
247
|
subject { Fields::SUBSERIES_FACET }
|
230
248
|
its(:label) { is_expected.to eq "Subseries Facet" }
|
@@ -101,15 +101,12 @@ module Ddr::Managers
|
|
101
101
|
object.reload
|
102
102
|
end
|
103
103
|
it "uses the intermediate file as the derivative source" do
|
104
|
-
expect(object.
|
105
|
-
expect(object.content).to_not receive(:content)
|
106
|
-
object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
|
104
|
+
expect(object.derivatives.source_datastream).to equal(object.datastreams[Ddr::Datastreams::INTERMEDIATE_FILE])
|
107
105
|
end
|
108
106
|
end
|
109
107
|
describe "object does not have intermediate file" do
|
110
108
|
it "uses the content file as the derivative source" do
|
111
|
-
expect(object.
|
112
|
-
object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
|
109
|
+
expect(object.derivatives.source_datastream).to equal(object.datastreams[Ddr::Datastreams::CONTENT])
|
113
110
|
end
|
114
111
|
end
|
115
112
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Ddr::Models
|
2
|
-
RSpec.describe AdminSet, ddr_aux: true do
|
2
|
+
RSpec.describe AdminSet, ddr_aux: true, admin_set: true do
|
3
3
|
|
4
4
|
describe ".call" do
|
5
5
|
let(:obj) { Item.new }
|
@@ -30,6 +30,7 @@ module Ddr::Models
|
|
30
30
|
|
31
31
|
describe "when the object does not have an admin set" do
|
32
32
|
it "returns nil" do
|
33
|
+
expect(described_class).to receive(:find_by_code).and_call_original
|
33
34
|
expect(described_class.call(obj)).to be_nil
|
34
35
|
end
|
35
36
|
end
|
@@ -5,5 +5,6 @@ RSpec.describe Attachment, type: :model, attachments: true do
|
|
5
5
|
it_behaves_like "it has an association", :belongs_to, :attached_to, :is_attached_to, "ActiveFedora::Base"
|
6
6
|
it_behaves_like "a non-collection model"
|
7
7
|
it_behaves_like "an unpublishable object"
|
8
|
+
it_behaves_like "an object that cannot be streamable"
|
8
9
|
|
9
10
|
end
|
@@ -1,22 +1,19 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Collection, type: :model do
|
4
2
|
|
5
|
-
subject { described_class.new(title: ["Test Collection"]) }
|
3
|
+
subject { described_class.new(title: ["Test Collection"], admin_set: "foo") }
|
6
4
|
|
7
5
|
it_behaves_like "a DDR model"
|
8
6
|
it_behaves_like "it has an association", :has_many, :children, :is_member_of_collection, "Item"
|
9
7
|
it_behaves_like "it has an association", :has_many, :targets, :is_external_target_for, "Target"
|
10
8
|
it_behaves_like "a publishable object"
|
9
|
+
it_behaves_like "an object that cannot be streamable"
|
11
10
|
|
12
11
|
describe "admin set" do
|
13
|
-
let(:admin_set) { Ddr::Models::AdminSet.new(code: "foobar", title: "FooBar") }
|
14
12
|
before do
|
15
|
-
|
16
|
-
subject.admin_set = "foobar"
|
13
|
+
subject.admin_set = "foo"
|
17
14
|
end
|
18
15
|
it "indexes the admin set title" do
|
19
|
-
expect(subject.to_solr[Ddr::Index::Fields::ADMIN_SET_TITLE]).to eq("
|
16
|
+
expect(subject.to_solr[Ddr::Index::Fields::ADMIN_SET_TITLE]).to eq("Foo Admin Set")
|
20
17
|
end
|
21
18
|
end
|
22
19
|
|
@@ -7,6 +7,7 @@ RSpec.describe Component, type: :model, components: true do
|
|
7
7
|
it_behaves_like "a non-collection model"
|
8
8
|
it_behaves_like "a potentially publishable object"
|
9
9
|
it_behaves_like "an object that can have an intermediate file"
|
10
|
+
it_behaves_like "an object that can be streamable"
|
10
11
|
|
11
12
|
describe "indexing" do
|
12
13
|
subject { FactoryGirl.build(:component) }
|
@@ -50,18 +51,32 @@ RSpec.describe Component, type: :model, components: true do
|
|
50
51
|
end
|
51
52
|
end
|
52
53
|
describe "service file" do
|
53
|
-
|
54
|
+
let(:service_files) { struct.uses[Ddr::Models::Structure::USE_SERVICE_FILE].map(&:href) }
|
55
|
+
describe "with multires image but not streamable media" do
|
56
|
+
before { allow(subject).to receive(:has_multires_image?) { true } }
|
57
|
+
it "has the correct structure file" do
|
58
|
+
expect(service_files).to contain_exactly(Ddr::Datastreams::MULTIRES_IMAGE)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
describe "with streamable media but not multires image" do
|
62
|
+
before { allow(subject).to receive(:streamable?) { true } }
|
63
|
+
it "has the correct structure file" do
|
64
|
+
expect(service_files).to contain_exactly(Ddr::Datastreams::STREAMABLE_MEDIA)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
describe "with both multires image and streamable media" do
|
54
68
|
before do
|
55
69
|
allow(subject).to receive(:has_multires_image?) { true }
|
70
|
+
allow(subject).to receive(:streamable?) { true }
|
56
71
|
end
|
57
72
|
it "has the correct structure file" do
|
58
|
-
expect(
|
59
|
-
|
73
|
+
expect(service_files).to contain_exactly(Ddr::Datastreams::MULTIRES_IMAGE,
|
74
|
+
Ddr::Datastreams::STREAMABLE_MEDIA)
|
60
75
|
end
|
61
76
|
end
|
62
|
-
describe "
|
77
|
+
describe "with neither multires image nor streamable media" do
|
63
78
|
it "has the correct structure file" do
|
64
|
-
expect(
|
79
|
+
expect(service_files).to contain_exactly(Ddr::Datastreams::CONTENT)
|
65
80
|
end
|
66
81
|
end
|
67
82
|
end
|
@@ -33,7 +33,6 @@ module Ddr::Models
|
|
33
33
|
end
|
34
34
|
it "should index the JSON representation of the structures" do
|
35
35
|
indexing = item.to_solr
|
36
|
-
expect(indexing[Ddr::Index::Fields::STRUCT]).to eq(expected_json)
|
37
36
|
expect(indexing[Ddr::Index::Fields::STRUCTURE]).to eq(expected_json)
|
38
37
|
end
|
39
38
|
describe "structure source" do
|
@@ -13,6 +13,8 @@ module Ddr::Models
|
|
13
13
|
|
14
14
|
before do
|
15
15
|
obj.adminMetadata.doi << "http://doi.org/10.1000/182"
|
16
|
+
obj.affiliation << "Talk to me in the back alley."
|
17
|
+
obj.aleph_id = "lkheajklfwbsef"
|
16
18
|
obj.aspace_id = "aspace_dccea43034e1b8261e14cf999e86449d"
|
17
19
|
obj.display_format = "Image"
|
18
20
|
obj.ingested_by = "foo@bar.com"
|
@@ -52,47 +54,53 @@ module Ddr::Models
|
|
52
54
|
obj.set_desc_metadata_values(:volume, "100")
|
53
55
|
end
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
57
|
+
specify {
|
58
|
+
expect(subject[Indexing::ACCESS_ROLE]).to eq(obj.roles.to_json)
|
59
|
+
expect(subject[Indexing::ADMIN_SET_TITLE]).to be_nil
|
60
|
+
expect(subject[Indexing::AFFILIATION]).to eq(["Talk to me in the back alley."])
|
61
|
+
expect(subject[Indexing::AFFILIATION_FACET]).to eq(["Talk to me in the back alley."])
|
62
|
+
expect(subject[Indexing::ALEPH_ID]).to eq "lkheajklfwbsef"
|
63
|
+
expect(subject[Indexing::ARRANGER_FACET]).to eq(["Arranger Value"])
|
64
|
+
expect(subject[Indexing::ASPACE_ID]).to eq("aspace_dccea43034e1b8261e14cf999e86449d")
|
65
|
+
expect(subject[Indexing::CATEGORY_FACET]).to eq(["Category Value"])
|
66
|
+
expect(subject[Indexing::COMPANY_FACET]).to eq(["Company Value"])
|
67
|
+
expect(subject[Indexing::COMPOSER_FACET]).to eq(["Composer Value"])
|
68
|
+
expect(subject[Indexing::DC_IS_PART_OF]).to eq(["RL10059CS1010"])
|
69
|
+
expect(subject[Indexing::DISPLAY_FORMAT]).to eq("Image")
|
70
|
+
expect(subject[Indexing::DOI]).to eq(["http://doi.org/10.1000/182"])
|
71
|
+
expect(subject[Indexing::ENGRAVER_FACET]).to eq(["Engraver Value"])
|
72
|
+
expect(subject[Indexing::FOLDER_FACET]).to eq(["Folder Value"])
|
73
|
+
expect(subject[Indexing::GENRE_FACET]).to eq(["Genre Value"])
|
74
|
+
expect(subject[Indexing::ILLUSTRATED_FACET]).to eq(["Illustrated Value"])
|
75
|
+
expect(subject[Indexing::ILLUSTRATOR_FACET]).to eq(["Illustrator Value"])
|
76
|
+
expect(subject[Indexing::INGESTED_BY]).to eq("foo@bar.com")
|
77
|
+
expect(subject[Indexing::INGESTION_DATE]).to eq("2017-01-13T18:55:29Z")
|
78
|
+
expect(subject[Indexing::INSTRUMENTATION_FACET]).to eq(["Instrumentation Value"])
|
79
|
+
expect(subject[Indexing::INTERVIEWER_NAME_FACET]).to eq(["Interviewer Name Value"])
|
80
|
+
expect(subject[Indexing::IS_FORMAT_OF]).to eq(["ark:/99999/fk4aaa"])
|
81
|
+
expect(subject[Indexing::LICENSE]).to eq("cc-by-nc-nd-40")
|
82
|
+
expect(subject[Indexing::LITHOGRAPHER_FACET]).to eq(["Lithographer Value"])
|
83
|
+
expect(subject[Indexing::LOCAL_ID]).to eq("foo")
|
84
|
+
expect(subject[Indexing::LYRICIST_FACET]).to eq(["Lyricist Value"])
|
85
|
+
expect(subject[Indexing::MEDIUM_FACET]).to eq(["Medium Value"])
|
86
|
+
expect(subject[Indexing::PERFORMER_FACET]).to eq(["Performer Value"])
|
87
|
+
expect(subject[Indexing::PERMANENT_ID]).to eq("ark:/99999/fk4zzz")
|
88
|
+
expect(subject[Indexing::PERMANENT_URL]).to eq("http://id.library.duke.edu/ark:/99999/fk4zzz")
|
89
|
+
expect(subject[Indexing::PLACEMENT_COMPANY_FACET]).to eq(["Placement Company Value"])
|
90
|
+
expect(subject[Indexing::POLICY_ROLE]).to contain_exactly(role2.agent.first, role3.agent.first, role4.agent.first)
|
91
|
+
expect(subject[Indexing::PRODUCER_FACET]).to eq(["Producer Value"])
|
92
|
+
expect(subject[Indexing::PRODUCT_FACET]).to eq(["Product Value"])
|
93
|
+
expect(subject[Indexing::PUBLICATION_FACET]).to eq(["Publication Value"])
|
94
|
+
expect(subject[Indexing::RESOURCE_ROLE]).to contain_exactly(role1.agent.first)
|
95
|
+
expect(subject[Indexing::RIGHTS_NOTE]).to eq(["Public domain"])
|
96
|
+
expect(subject[Indexing::ROLL_NUMBER_FACET]).to eq(["10"])
|
97
|
+
expect(subject[Indexing::SETTING_FACET]).to eq(["Setting Value"])
|
98
|
+
expect(subject[Indexing::STREAMABLE_MEDIA_TYPE]).to be_nil
|
99
|
+
expect(subject[Indexing::SUBSERIES_FACET]).to eq(["Subseries Value"])
|
100
|
+
expect(subject[Indexing::TEMPORAL_FACET]).to eq(["Temporal Value"])
|
101
|
+
expect(subject[Indexing::TONE_FACET]).to eq(["Tone Value"])
|
102
|
+
expect(subject[Indexing::VOLUME_FACET]).to eq(["100"])
|
103
|
+
}
|
96
104
|
end
|
97
105
|
|
98
106
|
describe "content-bearing object indexing" do
|
@@ -102,9 +110,48 @@ module Ddr::Models
|
|
102
110
|
allow(obj.content).to receive(:createDate) { create_date }
|
103
111
|
}
|
104
112
|
|
105
|
-
|
106
|
-
|
107
|
-
|
113
|
+
specify {
|
114
|
+
expect(subject[Indexing::CONTENT_CREATE_DATE]).to eq "2016-01-22T21:50:33Z"
|
115
|
+
expect(subject[Indexing::ATTACHED_FILES_HAVING_CONTENT]).to contain_exactly("content", "RELS-EXT", "descMetadata", "adminMetadata")
|
116
|
+
expect(subject[Indexing::CONTENT_SIZE]).to eq 230714
|
117
|
+
expect(subject[Indexing::CONTENT_SIZE_HUMAN]).to eq "225 KB"
|
118
|
+
expect(subject[Indexing::MEDIA_TYPE]).to eq "image/tiff"
|
119
|
+
expect(subject[Indexing::MEDIA_MAJOR_TYPE]).to eq "image"
|
120
|
+
expect(subject[Indexing::MEDIA_SUB_TYPE]).to eq "tiff"
|
121
|
+
}
|
122
|
+
|
123
|
+
describe "streamable object indexing" do
|
124
|
+
before {
|
125
|
+
obj.add_file(fixture_file_upload('bird.jpg', 'image/jpeg'), 'streamableMedia')
|
126
|
+
obj.save!
|
127
|
+
}
|
128
|
+
specify {
|
129
|
+
expect(subject[Indexing::STREAMABLE_MEDIA_TYPE]).to eq "image/jpeg"
|
130
|
+
}
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "admin set title" do
|
135
|
+
subject { FactoryGirl.build(:item) }
|
136
|
+
let(:coll) { FactoryGirl.create(:collection) }
|
137
|
+
before do
|
138
|
+
subject.parent = coll
|
139
|
+
subject.admin_policy = coll
|
140
|
+
end
|
141
|
+
specify {
|
142
|
+
expect(subject.index_fields[Indexing::ADMIN_SET_TITLE]).to eq "Foo Admin Set"
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "language name" do
|
147
|
+
subject { FactoryGirl.build(:item) }
|
148
|
+
before do
|
149
|
+
subject.language = ["cym", "Not a Code"]
|
150
|
+
subject.save!
|
151
|
+
end
|
152
|
+
specify {
|
153
|
+
expect(subject.index_fields[Indexing::LANGUAGE_FACET]).to eq ["Welsh", "Not a Code"]
|
154
|
+
expect(subject.index_fields[Indexing::LANGUAGE_NAME]).to eq ["Welsh", "Not a Code"]
|
108
155
|
}
|
109
156
|
end
|
110
157
|
|