ddr-models 3.0.0.beta.1 → 3.0.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ddr/auth/roles/role_set_manager.rb +1 -1
- data/lib/ddr/index/fields.rb +1 -0
- data/lib/ddr/models/base.rb +0 -45
- data/lib/ddr/models/has_admin_metadata.rb +4 -0
- data/lib/ddr/models/has_children.rb +6 -2
- data/lib/ddr/models/has_struct_metadata.rb +3 -3
- data/lib/ddr/models/indexing.rb +1 -0
- data/lib/ddr/models/struct_div.rb +1 -1
- data/lib/ddr/models/structure.rb +8 -0
- data/lib/ddr/models/version.rb +1 -1
- data/spec/auth/roles/role_set_manager_spec.rb +4 -0
- data/spec/models/has_children_spec.rb +39 -8
- data/spec/models/has_struct_metadata_spec.rb +4 -4
- data/spec/models/indexing_spec.rb +2 -1
- data/spec/models/struct_div_spec.rb +14 -14
- data/spec/models/structure_spec.rb +98 -3
- data/spec/support/shared_examples_for_ddr_models.rb +0 -97
- data/spec/support/structural_metadata_helper.rb +22 -22
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75efc0f919210a7a3c4f77818f3d48191485bd5c
|
4
|
+
data.tar.gz: a831671103f6e4d9e3b2c0d5ff60ecd217292836
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 311a0413074b9c8b82cad7f373d56f1a8dc12c0177183e587f4c571463b3f04abce3f142036fb99fcaf2a7b88977caa4a6df3d6d950426266e73e37cfa172c33
|
7
|
+
data.tar.gz: 85ee619d6263ebe046185b267d695804635e3defb72bf58749909317d0089f60344e9cc9fba0e044be4f71866eca03c32c1864ccc69d3f67a3e3f6e38a673ca7
|
data/lib/ddr/index/fields.rb
CHANGED
@@ -40,6 +40,7 @@ module Ddr::Index
|
|
40
40
|
DOI = Field.new :doi, :symbol
|
41
41
|
EAD_ID = Field.new :ead_id, :stored_sortable
|
42
42
|
EXTRACTED_TEXT = Field.new :extracted_text, :searchable, type: :text
|
43
|
+
FCREPO3_PID = Field.new :fcrepo3_pid, :stored_sortable
|
43
44
|
HAS_MODEL = Field.new :has_model, :symbol
|
44
45
|
IDENTIFIER_ALL = Field.new :identifier_all, :symbol
|
45
46
|
IS_ATTACHED_TO = Field.new :is_attached_to, :symbol
|
data/lib/ddr/models/base.rb
CHANGED
@@ -119,50 +119,5 @@ module Ddr::Models
|
|
119
119
|
self
|
120
120
|
end
|
121
121
|
|
122
|
-
# Moves the first (descriptive metadata) identifier into
|
123
|
-
# (administrative metadata) local_id according to the following
|
124
|
-
# rubric:
|
125
|
-
#
|
126
|
-
# No existing local_id:
|
127
|
-
# - Set local_id to first identifier value
|
128
|
-
# - Remove first identifier value
|
129
|
-
#
|
130
|
-
# Existing local_id:
|
131
|
-
# Same as first identifier value
|
132
|
-
# - Remove first identifier value
|
133
|
-
# Not same as first identifier value
|
134
|
-
# :replace option is true
|
135
|
-
# - Set local_id to first identifier value
|
136
|
-
# - Remove first identifier value
|
137
|
-
# :replace option is false
|
138
|
-
# - Do nothing
|
139
|
-
#
|
140
|
-
# Returns true or false depending on whether the object was
|
141
|
-
# changed by this method
|
142
|
-
def move_first_identifier_to_local_id(replace: true)
|
143
|
-
moved = false
|
144
|
-
identifiers = descMetadata.identifier.to_a
|
145
|
-
first_id = identifiers.shift
|
146
|
-
if first_id
|
147
|
-
if local_id.blank?
|
148
|
-
self.local_id = first_id
|
149
|
-
self.descMetadata.identifier = identifiers
|
150
|
-
moved = true
|
151
|
-
else
|
152
|
-
if local_id == first_id
|
153
|
-
self.descMetadata.identifier = identifiers
|
154
|
-
moved = true
|
155
|
-
else
|
156
|
-
if replace
|
157
|
-
self.local_id = first_id
|
158
|
-
self.descMetadata.identifier = identifiers
|
159
|
-
moved = true
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
moved
|
165
|
-
end
|
166
|
-
|
167
122
|
end
|
168
123
|
end
|
@@ -29,6 +29,10 @@ module Ddr::Models
|
|
29
29
|
predicate: Ddr::Vocab::Asset.eadId,
|
30
30
|
multiple: false
|
31
31
|
|
32
|
+
property :fcrepo3_pid,
|
33
|
+
predicate: RDF::URI("info:fedora/fedora-system:def/model#PID"),
|
34
|
+
multiple: false
|
35
|
+
|
32
36
|
property :license,
|
33
37
|
predicate: RDF::DC.license,
|
34
38
|
multiple: false
|
@@ -4,8 +4,12 @@ module Ddr
|
|
4
4
|
|
5
5
|
def first_child
|
6
6
|
child_class = self.class.reflect_on_association(:children).klass
|
7
|
-
|
8
|
-
|
7
|
+
if has_struct_metadata?
|
8
|
+
child_class.find(structure.default_struct_map_ids.first)
|
9
|
+
else
|
10
|
+
solr_field = child_class.reflect_on_association(:parent).solr_key
|
11
|
+
child_class.where(solr_field => id).order("#{Ddr::Index::Fields::LOCAL_ID} ASC").first
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
end
|
@@ -32,7 +32,7 @@ module Ddr
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def find_children
|
35
|
-
query =
|
35
|
+
query = ActiveFedora::SolrService.construct_query_for_rel([[ self.class.reflect_on_association(:children), self.id ]])
|
36
36
|
sort = "#{Ddr::Index::Fields::LOCAL_ID} ASC, #{Ddr::Index::Fields::OBJECT_CREATE_DATE} ASC"
|
37
37
|
ActiveFedora::SolrService.query(query, sort: sort, rows: 999999)
|
38
38
|
end
|
@@ -50,9 +50,9 @@ module Ddr
|
|
50
50
|
div
|
51
51
|
end
|
52
52
|
|
53
|
-
def create_fptr(stru, div,
|
53
|
+
def create_fptr(stru, div, id)
|
54
54
|
fptr = Nokogiri::XML::Node.new('fptr', stru.as_xml_document)
|
55
|
-
fptr['CONTENTIDS'] =
|
55
|
+
fptr['CONTENTIDS'] = id
|
56
56
|
div.add_child(fptr)
|
57
57
|
end
|
58
58
|
|
data/lib/ddr/models/indexing.rb
CHANGED
@@ -43,7 +43,7 @@ module Ddr
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def fptr_pids(div_node)
|
46
|
-
div_node.xpath('xmlns:fptr').map { |fptr_node| fptr_node["CONTENTIDS"]
|
46
|
+
div_node.xpath('xmlns:fptr').map { |fptr_node| fptr_node["CONTENTIDS"] }
|
47
47
|
end
|
48
48
|
|
49
49
|
def subdivs(structmap_or_div_node)
|
data/lib/ddr/models/structure.rb
CHANGED
@@ -13,6 +13,14 @@ module Ddr
|
|
13
13
|
@struct_maps ||= build_struct_maps(structMap_nodes)
|
14
14
|
end
|
15
15
|
|
16
|
+
def default_struct_map
|
17
|
+
struct_maps['default'] || struct_maps[struct_maps.keys.first]
|
18
|
+
end
|
19
|
+
|
20
|
+
def default_struct_map_ids
|
21
|
+
default_struct_map.pids
|
22
|
+
end
|
23
|
+
|
16
24
|
def structMap_node(type='default')
|
17
25
|
xpath("//xmlns:structMap[@TYPE='#{type}']").first
|
18
26
|
end
|
data/lib/ddr/models/version.rb
CHANGED
@@ -79,6 +79,10 @@ module Ddr::Auth
|
|
79
79
|
expect(subject.granted?(role1.to_h)).to be true
|
80
80
|
expect(subject.granted?(role2.to_h)).to be false
|
81
81
|
end
|
82
|
+
it "coerces argument to Role" do
|
83
|
+
expect(subject.granted?(role_type: Roles::EDITOR, agent: role1.agent, scope: "resource"))
|
84
|
+
.to be true
|
85
|
+
end
|
82
86
|
end
|
83
87
|
|
84
88
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ddr::Models
|
2
2
|
RSpec.describe HasChildren do
|
3
3
|
|
4
|
-
subject { FactoryGirl.create(:
|
4
|
+
subject { FactoryGirl.create(:item) }
|
5
5
|
|
6
6
|
describe "#first_child" do
|
7
7
|
describe "when the object has no children" do
|
@@ -10,19 +10,50 @@ module Ddr::Models
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
describe "when the object has children" do
|
13
|
-
let(:child1) { FactoryGirl.create(:
|
14
|
-
let(:child2) { FactoryGirl.create(:
|
13
|
+
let(:child1) { FactoryGirl.create(:component) }
|
14
|
+
let(:child2) { FactoryGirl.create(:component) }
|
15
|
+
let(:child3) { FactoryGirl.create(:component) }
|
15
16
|
before do
|
16
17
|
child1.local_id = "test002"
|
17
|
-
child1.save
|
18
|
+
child1.save!
|
18
19
|
child2.local_id = "test001"
|
19
|
-
child2.save
|
20
|
+
child2.save!
|
21
|
+
child3.local_id = "test003"
|
22
|
+
child3.save!
|
20
23
|
subject.children << child1
|
21
24
|
subject.children << child2
|
22
|
-
subject.
|
25
|
+
subject.children << child3
|
26
|
+
subject.save!
|
23
27
|
end
|
24
|
-
|
25
|
-
|
28
|
+
describe "when the object has structural metadata" do
|
29
|
+
before do
|
30
|
+
struct_map = <<-EOS
|
31
|
+
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
32
|
+
<structMap TYPE="default">
|
33
|
+
<div ORDER="1">
|
34
|
+
<fptr CONTENTIDS="#{child3.id}" />
|
35
|
+
</div>
|
36
|
+
<div ORDER="2">
|
37
|
+
<fptr CONTENTIDS="#{child2.id}" />
|
38
|
+
</div>
|
39
|
+
<div ORDER="3">
|
40
|
+
<fptr CONTENTIDS="#{child1.id}" />
|
41
|
+
</div>
|
42
|
+
</structMap>
|
43
|
+
</mets>
|
44
|
+
EOS
|
45
|
+
subject.structMetadata.content = struct_map
|
46
|
+
subject.save!
|
47
|
+
end
|
48
|
+
it "should return the first child based on structural metadata order" do
|
49
|
+
expect(subject.first_child).to eq(child3)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
describe "when the object does not have structural metadata" do
|
53
|
+
|
54
|
+
it "should return the first child as sorted by local ID" do
|
55
|
+
expect(subject.first_child).to eq(child2)
|
56
|
+
end
|
26
57
|
end
|
27
58
|
end
|
28
59
|
end
|
@@ -4,7 +4,7 @@ module Ddr
|
|
4
4
|
module Models
|
5
5
|
RSpec.describe HasStructMetadata, type: :model, structural_metadata: true do
|
6
6
|
|
7
|
-
let(:item) { Item.new(
|
7
|
+
let(:item) { Item.new(id: 'test_2') }
|
8
8
|
|
9
9
|
describe "#structure" do
|
10
10
|
context "no existing structural metadata" do
|
@@ -21,9 +21,9 @@ module Ddr
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "#build_default_structure" do
|
24
|
-
let(:components) { [ Component.new(
|
25
|
-
Component.new(
|
26
|
-
Component.new(
|
24
|
+
let(:components) { [ Component.new(id: 'test_5', identifier: [ 'abc002' ]),
|
25
|
+
Component.new(id: 'test_6', identifier: [ 'abc001' ]),
|
26
|
+
Component.new(id: 'test_7', identifier: [ 'abc003' ])
|
27
27
|
] }
|
28
28
|
let(:expected) { FactoryGirl.build(:simple_structure) }
|
29
29
|
before { allow(item).to receive(:find_children) { simple_structure_query_response } }
|
@@ -18,6 +18,7 @@ module Ddr::Models
|
|
18
18
|
obj.permanent_url = "http://id.library.duke.edu/ark:/99999/fk4zzz"
|
19
19
|
obj.display_format = "Image"
|
20
20
|
obj.roles.grant role1, role2, role3, role4
|
21
|
+
obj.fcrepo3_pid = "duke:1"
|
21
22
|
end
|
22
23
|
|
23
24
|
its([Indexing::LICENSE]) { is_expected.to eq("cc-by-nc-nd-40") }
|
@@ -29,6 +30,6 @@ module Ddr::Models
|
|
29
30
|
its([Indexing::ACCESS_ROLE]) { is_expected.to eq(obj.roles.to_json) }
|
30
31
|
its([Indexing::POLICY_ROLE]) { is_expected.to contain_exactly(role2.agent, role3.agent, role4.agent) }
|
31
32
|
its([Indexing::RESOURCE_ROLE]) { is_expected.to contain_exactly(role1.agent) }
|
32
|
-
|
33
|
+
its([Indexing::FCREPO3_PID]) { is_expected.to eq("duke:1") }
|
33
34
|
end
|
34
35
|
end
|
@@ -13,35 +13,35 @@ module Ddr
|
|
13
13
|
expect(struct_div.divs.size).to eq(2)
|
14
14
|
expect(struct_div.divs.first.label).to eq("Front")
|
15
15
|
expect(struct_div.divs.first.divs).to be_empty
|
16
|
-
expect(struct_div.divs.first.fptrs).to eq([ "
|
16
|
+
expect(struct_div.divs.first.fptrs).to eq([ "test_5" ])
|
17
17
|
expect(struct_div.divs.last.label).to eq("Back")
|
18
18
|
expect(struct_div.divs.last.divs.size).to eq(2)
|
19
19
|
expect(struct_div.divs.last.fptrs).to be_empty
|
20
20
|
expect(struct_div.divs.last.divs.first.label).to eq("Top")
|
21
21
|
expect(struct_div.divs.last.divs.first.divs).to be_empty
|
22
|
-
expect(struct_div.divs.last.divs.first.fptrs).to eq([ "
|
22
|
+
expect(struct_div.divs.last.divs.first.fptrs).to eq([ "test_7" ])
|
23
23
|
expect(struct_div.divs.last.divs.last.label).to eq("Bottom")
|
24
24
|
expect(struct_div.divs.last.divs.last.divs).to be_empty
|
25
|
-
expect(struct_div.divs.last.divs.last.fptrs).to eq([ "
|
25
|
+
expect(struct_div.divs.last.divs.last.fptrs).to eq([ "test_6" ])
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "#pids" do
|
30
30
|
context "top level" do
|
31
31
|
it "should return all pids in the structMap" do
|
32
|
-
expect(struct_div.pids).to match_array([ '
|
32
|
+
expect(struct_div.pids).to match_array([ 'test_5', 'test_6', 'test_7' ])
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "#docs" do
|
38
|
-
let(:solr_response) { [ { 'id'=>'
|
38
|
+
let(:solr_response) { [ { 'id'=>'test_5' }, { 'id'=>'test_6' }, { 'id'=>'test_7'} ] }
|
39
39
|
before do
|
40
40
|
allow(ActiveFedora::SolrService).to receive(:query) { solr_response }
|
41
41
|
end
|
42
42
|
it "should return a hash of Solr documents" do
|
43
43
|
results = struct_div.docs
|
44
|
-
expect(results.keys).to match_array([ '
|
44
|
+
expect(results.keys).to match_array([ 'test_5', 'test_6', 'test_7' ])
|
45
45
|
results.keys.each do |key|
|
46
46
|
expect(results[key]).to be_a(SolrDocument)
|
47
47
|
expect(results[key].id).to eq(key)
|
@@ -50,18 +50,18 @@ module Ddr
|
|
50
50
|
end
|
51
51
|
|
52
52
|
describe "#objects" do
|
53
|
-
let(:repo_objects) { [ Component.new(
|
53
|
+
let(:repo_objects) { [ Component.new(id: 'test_5'), Component.new(id: 'test_6'), Component.new(id: 'test_7') ] }
|
54
54
|
before do
|
55
|
-
allow(ActiveFedora::Base).to receive(:find).with('
|
56
|
-
allow(ActiveFedora::Base).to receive(:find).with('
|
57
|
-
allow(ActiveFedora::Base).to receive(:find).with('
|
55
|
+
allow(ActiveFedora::Base).to receive(:find).with('test_5') { repo_objects[0] }
|
56
|
+
allow(ActiveFedora::Base).to receive(:find).with('test_6') { repo_objects[1] }
|
57
|
+
allow(ActiveFedora::Base).to receive(:find).with('test_7') { repo_objects[2] }
|
58
58
|
end
|
59
59
|
it "should return a hash of Active Fedora objects" do
|
60
60
|
results = struct_div.objects
|
61
|
-
expect(results.keys).to match_array([ '
|
62
|
-
expect(results['
|
63
|
-
expect(results['
|
64
|
-
expect(results['
|
61
|
+
expect(results.keys).to match_array([ 'test_5', 'test_6', 'test_7' ])
|
62
|
+
expect(results['test_5']).to eq(repo_objects[0])
|
63
|
+
expect(results['test_6']).to eq(repo_objects[1])
|
64
|
+
expect(results['test_7']).to eq(repo_objects[2])
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -5,9 +5,8 @@ module Ddr
|
|
5
5
|
module Models
|
6
6
|
RSpec.describe Structure, type: :model, structural_metadata: true do
|
7
7
|
|
8
|
-
let(:structure) { FactoryGirl.build(:multiple_struct_maps_structure) }
|
9
|
-
|
10
8
|
describe "#struct_maps" do
|
9
|
+
let(:structure) { FactoryGirl.build(:multiple_struct_maps_structure) }
|
11
10
|
let(:struct_maps) { structure.struct_maps }
|
12
11
|
it "should include struct divs for each struct map" do
|
13
12
|
expect(struct_maps.keys).to match_array([ 'default', 'reverse' ])
|
@@ -16,6 +15,102 @@ module Ddr
|
|
16
15
|
end
|
17
16
|
end
|
18
17
|
|
18
|
+
describe "#default_struct_map" do
|
19
|
+
context "struct map with type 'default'" do
|
20
|
+
let(:struct_map_xml) do
|
21
|
+
<<-eos
|
22
|
+
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
23
|
+
<structMap TYPE="reverse">
|
24
|
+
<div ORDER="1" LABEL="Back">
|
25
|
+
<div ORDER="1" LABEL="Bottom">
|
26
|
+
<fptr CONTENTIDS="test_6" />
|
27
|
+
</div>
|
28
|
+
<div ORDER="2" LABEL="Top">
|
29
|
+
<fptr CONTENTIDS="test_7" />
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
<div ORDER="2" LABEL="Front">
|
33
|
+
<fptr CONTENTIDS="test_5" />
|
34
|
+
</div>
|
35
|
+
</structMap>
|
36
|
+
<structMap TYPE="default">
|
37
|
+
<div ORDER="1" LABEL="Front">
|
38
|
+
<fptr CONTENTIDS="test_5" />
|
39
|
+
</div>
|
40
|
+
<div ORDER="2" LABEL="Back">
|
41
|
+
<div ORDER="1" LABEL="Top">
|
42
|
+
<fptr CONTENTIDS="test_7" />
|
43
|
+
</div>
|
44
|
+
<div ORDER="2" LABEL="Bottom">
|
45
|
+
<fptr CONTENTIDS="test_6" />
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</structMap>
|
49
|
+
</mets>
|
50
|
+
eos
|
51
|
+
end
|
52
|
+
let(:struct_map_doc) do
|
53
|
+
Nokogiri::XML(struct_map_xml) do |config|
|
54
|
+
config.noblanks
|
55
|
+
end
|
56
|
+
end
|
57
|
+
let(:structure) { Structure.new(struct_map_doc) }
|
58
|
+
it "should return the struct map with type :default" do
|
59
|
+
expect(structure.default_struct_map).to eq(structure.struct_maps['default'])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
context "no struct map with type 'default'" do
|
63
|
+
let(:struct_map_xml) do
|
64
|
+
<<-eos
|
65
|
+
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
66
|
+
<structMap TYPE="reverse">
|
67
|
+
<div ORDER="1" LABEL="Back">
|
68
|
+
<div ORDER="1" LABEL="Bottom">
|
69
|
+
<fptr CONTENTIDS="test_6" />
|
70
|
+
</div>
|
71
|
+
<div ORDER="2" LABEL="Top">
|
72
|
+
<fptr CONTENTIDS="test_7" />
|
73
|
+
</div>
|
74
|
+
</div>
|
75
|
+
<div ORDER="2" LABEL="Front">
|
76
|
+
<fptr CONTENTIDS="test_5" />
|
77
|
+
</div>
|
78
|
+
</structMap>
|
79
|
+
<structMap TYPE="other">
|
80
|
+
<div ORDER="1" LABEL="Front">
|
81
|
+
<fptr CONTENTIDS="test_5" />
|
82
|
+
</div>
|
83
|
+
<div ORDER="2" LABEL="Back">
|
84
|
+
<div ORDER="1" LABEL="Top">
|
85
|
+
<fptr CONTENTIDS="test_7" />
|
86
|
+
</div>
|
87
|
+
<div ORDER="2" LABEL="Bottom">
|
88
|
+
<fptr CONTENTIDS="test_6" />
|
89
|
+
</div>
|
90
|
+
</div>
|
91
|
+
</structMap>
|
92
|
+
</mets>
|
93
|
+
eos
|
94
|
+
end
|
95
|
+
let(:struct_map_doc) do
|
96
|
+
Nokogiri::XML(struct_map_xml) do |config|
|
97
|
+
config.noblanks
|
98
|
+
end
|
99
|
+
end
|
100
|
+
let(:structure) { Structure.new(struct_map_doc) }
|
101
|
+
it "should return the first struct map" do
|
102
|
+
expect(structure.default_struct_map).to eq(structure.struct_maps['reverse'])
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "#default_struct_map_ids" do
|
108
|
+
let(:structure) { FactoryGirl.build(:simple_structure) }
|
109
|
+
it "should return the ids in order" do
|
110
|
+
expect(structure.default_struct_map_ids).to match_array([ 'test_6', 'test_5', 'test_7' ])
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
19
114
|
end
|
20
115
|
end
|
21
|
-
end
|
116
|
+
end
|
@@ -22,101 +22,4 @@ RSpec.shared_examples "a DDR model" do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe "move first desc metadata identifier to local id" do
|
26
|
-
let(:local_id) { 'locl001' }
|
27
|
-
let(:identifiers) { [ 'id001', 'id002' ] }
|
28
|
-
context "no desc metadata identifiers" do
|
29
|
-
context "local id present" do
|
30
|
-
before { subject.local_id = local_id }
|
31
|
-
it "should not change the local id" do
|
32
|
-
result = subject.move_first_identifier_to_local_id
|
33
|
-
expect(result).to be false
|
34
|
-
expect(subject.local_id).to eq(local_id)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
context "one desc metadata identifier" do
|
39
|
-
before { subject.descMetadata.identifier = Array(identifiers.first) }
|
40
|
-
context "local id not present" do
|
41
|
-
it "should set the local id and remove the identifier" do
|
42
|
-
result = subject.move_first_identifier_to_local_id
|
43
|
-
expect(result).to be true
|
44
|
-
expect(subject.local_id).to eq(identifiers.first)
|
45
|
-
expect(subject.descMetadata.identifier).to be_empty
|
46
|
-
end
|
47
|
-
end
|
48
|
-
context "local id present" do
|
49
|
-
before { subject.local_id = local_id }
|
50
|
-
context "replace option is true" do
|
51
|
-
it "should set the local id and remove the identifier" do
|
52
|
-
result = subject.move_first_identifier_to_local_id
|
53
|
-
expect(result).to be true
|
54
|
-
expect(subject.local_id).to eq(identifiers.first)
|
55
|
-
expect(subject.descMetadata.identifier).to be_empty
|
56
|
-
end
|
57
|
-
end
|
58
|
-
context "replace option is false" do
|
59
|
-
context "local id matches first identifier" do
|
60
|
-
before { subject.descMetadata.identifier = Array(local_id) }
|
61
|
-
it "should remove the identifier" do
|
62
|
-
result = subject.move_first_identifier_to_local_id(replace: false)
|
63
|
-
expect(result).to be true
|
64
|
-
expect(subject.local_id).to eq(local_id)
|
65
|
-
expect(subject.descMetadata.identifier).to be_empty
|
66
|
-
end
|
67
|
-
end
|
68
|
-
context "local id does not match first identifier" do
|
69
|
-
it "should not change the local id and not remove the identifier" do
|
70
|
-
result = subject.move_first_identifier_to_local_id(replace: false)
|
71
|
-
expect(result).to be false
|
72
|
-
expect(subject.local_id).to eq(local_id)
|
73
|
-
expect(subject.descMetadata.identifier).to eq(Array(identifiers.first))
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
context "more than one desc metadata identifer" do
|
80
|
-
before { subject.descMetadata.identifier = identifiers }
|
81
|
-
context "local id not present" do
|
82
|
-
it "should set the local id and remove the identifier" do
|
83
|
-
result = subject.move_first_identifier_to_local_id
|
84
|
-
expect(result).to be true
|
85
|
-
expect(subject.local_id).to eq(identifiers.first)
|
86
|
-
expect(subject.descMetadata.identifier).to eq(Array(identifiers.last))
|
87
|
-
end
|
88
|
-
end
|
89
|
-
context "local id present" do
|
90
|
-
before { subject.local_id = local_id }
|
91
|
-
context "replace option is true" do
|
92
|
-
it "should set the local id and remove the identifier" do
|
93
|
-
result = subject.move_first_identifier_to_local_id
|
94
|
-
expect(result).to be true
|
95
|
-
expect(subject.local_id).to eq(identifiers.first)
|
96
|
-
expect(subject.descMetadata.identifier).to eq(Array(identifiers.last))
|
97
|
-
end
|
98
|
-
end
|
99
|
-
context "replace option is false" do
|
100
|
-
context "local id matches first identifier" do
|
101
|
-
before { subject.descMetadata.identifier = [ local_id, identifiers.last ] }
|
102
|
-
it "should remove the identifier" do
|
103
|
-
result = subject.move_first_identifier_to_local_id(replace: false)
|
104
|
-
expect(result).to be true
|
105
|
-
expect(subject.local_id).to eq(local_id)
|
106
|
-
expect(subject.descMetadata.identifier).to eq(Array(identifiers.last))
|
107
|
-
end
|
108
|
-
end
|
109
|
-
context "local id does not match first identifier" do
|
110
|
-
it "should not change the local id and not remove the identifier" do
|
111
|
-
result = subject.move_first_identifier_to_local_id(replace: false)
|
112
|
-
expect(result).to be false
|
113
|
-
expect(subject.local_id).to eq(local_id)
|
114
|
-
expect(subject.descMetadata.identifier).to eq(identifiers)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
25
|
end
|
@@ -23,13 +23,13 @@ def simple_structure
|
|
23
23
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
24
24
|
<structMap TYPE="default">
|
25
25
|
<div ORDER="1">
|
26
|
-
<fptr CONTENTIDS="
|
26
|
+
<fptr CONTENTIDS="test_6" />
|
27
27
|
</div>
|
28
28
|
<div ORDER="2">
|
29
|
-
<fptr CONTENTIDS="
|
29
|
+
<fptr CONTENTIDS="test_5" />
|
30
30
|
</div>
|
31
31
|
<div ORDER="3">
|
32
|
-
<fptr CONTENTIDS="
|
32
|
+
<fptr CONTENTIDS="test_7" />
|
33
33
|
</div>
|
34
34
|
</structMap>
|
35
35
|
</mets>
|
@@ -41,14 +41,14 @@ def nested_structure
|
|
41
41
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
42
42
|
<structMap TYPE="default">
|
43
43
|
<div ORDER="1" LABEL="Front">
|
44
|
-
<fptr CONTENTIDS="
|
44
|
+
<fptr CONTENTIDS="test_5" />
|
45
45
|
</div>
|
46
46
|
<div ORDER="2" LABEL="Back">
|
47
47
|
<div ORDER="1" LABEL="Top">
|
48
|
-
<fptr CONTENTIDS="
|
48
|
+
<fptr CONTENTIDS="test_7" />
|
49
49
|
</div>
|
50
50
|
<div ORDER="2" LABEL="Bottom">
|
51
|
-
<fptr CONTENTIDS="
|
51
|
+
<fptr CONTENTIDS="test_6" />
|
52
52
|
</div>
|
53
53
|
</div>
|
54
54
|
</structMap>
|
@@ -61,28 +61,28 @@ def multiple_struct_maps_structure
|
|
61
61
|
<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
|
62
62
|
<structMap TYPE="default">
|
63
63
|
<div ORDER="1" LABEL="Front">
|
64
|
-
<fptr CONTENTIDS="
|
64
|
+
<fptr CONTENTIDS="test_5" />
|
65
65
|
</div>
|
66
66
|
<div ORDER="2" LABEL="Back">
|
67
67
|
<div ORDER="1" LABEL="Top">
|
68
|
-
<fptr CONTENTIDS="
|
68
|
+
<fptr CONTENTIDS="test_7" />
|
69
69
|
</div>
|
70
70
|
<div ORDER="2" LABEL="Bottom">
|
71
|
-
<fptr CONTENTIDS="
|
71
|
+
<fptr CONTENTIDS="test_6" />
|
72
72
|
</div>
|
73
73
|
</div>
|
74
74
|
</structMap>
|
75
75
|
<structMap TYPE="reverse">
|
76
76
|
<div ORDER="1" LABEL="Back">
|
77
77
|
<div ORDER="1" LABEL="Bottom">
|
78
|
-
<fptr CONTENTIDS="
|
78
|
+
<fptr CONTENTIDS="test_6" />
|
79
79
|
</div>
|
80
80
|
<div ORDER="2" LABEL="Top">
|
81
|
-
<fptr CONTENTIDS="
|
81
|
+
<fptr CONTENTIDS="test_7" />
|
82
82
|
</div>
|
83
83
|
</div>
|
84
84
|
<div ORDER="2" LABEL="Front">
|
85
|
-
<fptr CONTENTIDS="
|
85
|
+
<fptr CONTENTIDS="test_5" />
|
86
86
|
</div>
|
87
87
|
</structMap>
|
88
88
|
</mets>
|
@@ -90,16 +90,16 @@ def multiple_struct_maps_structure
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def simple_structure_query_response
|
93
|
-
[{
|
93
|
+
[ { "id"=>"test_6", "local_id_ssi"=>"abc001" }, { "id"=>"test_5", "local_id_ssi"=>"abc002" }, { "id"=>"test_7", "local_id_ssi"=>"abc003" } ]
|
94
94
|
end
|
95
95
|
|
96
96
|
def simple_structure_to_json
|
97
97
|
j = <<-eos
|
98
98
|
{\"default\":
|
99
99
|
{\"type\":\"default\",
|
100
|
-
\"divs\":[{\"order\":\"1\",\"fptrs\":[\"
|
101
|
-
{\"order\":\"2\",\"fptrs\":[\"
|
102
|
-
{\"order\":\"3\",\"fptrs\":[\"
|
100
|
+
\"divs\":[{\"order\":\"1\",\"fptrs\":[\"test_6\"],\"divs\":[]},
|
101
|
+
{\"order\":\"2\",\"fptrs\":[\"test_5\"],\"divs\":[]},
|
102
|
+
{\"order\":\"3\",\"fptrs\":[\"test_7\"],\"divs\":[]}
|
103
103
|
]
|
104
104
|
}
|
105
105
|
}
|
@@ -111,10 +111,10 @@ def multiple_struct_maps_structure_to_json
|
|
111
111
|
j = <<-eos
|
112
112
|
{\"default\":
|
113
113
|
{\"type\":\"default\",
|
114
|
-
\"divs\":[{\"label\":\"Front\",\"order\":\"1\",\"fptrs\":[\"
|
114
|
+
\"divs\":[{\"label\":\"Front\",\"order\":\"1\",\"fptrs\":[\"test_5\"],\"divs\":[]},
|
115
115
|
{\"label\":\"Back\",\"order\":\"2\",\"fptrs\":[],
|
116
|
-
\"divs\":[{\"label\":\"Top\",\"order\":\"1\",\"fptrs\":[\"
|
117
|
-
{\"label\":\"Bottom\",\"order\":\"2\",\"fptrs\":[\"
|
116
|
+
\"divs\":[{\"label\":\"Top\",\"order\":\"1\",\"fptrs\":[\"test_7\"],\"divs\":[]},
|
117
|
+
{\"label\":\"Bottom\",\"order\":\"2\",\"fptrs\":[\"test_6\"],\"divs\":[]}
|
118
118
|
]
|
119
119
|
}
|
120
120
|
]
|
@@ -122,11 +122,11 @@ def multiple_struct_maps_structure_to_json
|
|
122
122
|
\"reverse\":
|
123
123
|
{\"type\":\"reverse\",
|
124
124
|
\"divs\":[{\"label\":\"Back\",\"order\":\"1\",\"fptrs\":[],
|
125
|
-
\"divs\":[{\"label\":\"Bottom\",\"order\":\"1\",\"fptrs\":[\"
|
126
|
-
{\"label\":\"Top\",\"order\":\"2\",\"fptrs\":[\"
|
125
|
+
\"divs\":[{\"label\":\"Bottom\",\"order\":\"1\",\"fptrs\":[\"test_6\"],\"divs\":[]},
|
126
|
+
{\"label\":\"Top\",\"order\":\"2\",\"fptrs\":[\"test_7\"],\"divs\":[]}
|
127
127
|
]
|
128
128
|
},
|
129
|
-
{\"label\":\"Front\",\"order\":\"2\",\"fptrs\":[\"
|
129
|
+
{\"label\":\"Front\",\"order\":\"2\",\"fptrs\":[\"test_5\"],\"divs\":[]}
|
130
130
|
]
|
131
131
|
}
|
132
132
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddr-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.beta.
|
4
|
+
version: 3.0.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Coble
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|