ddr-models 3.0.0.beta.1 → 3.0.0.beta.2
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/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
|