ddr-models 3.0.0.beta.20 → 3.0.0.beta.21

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83e427c337952549de62787a1e38025b6a41153e
4
- data.tar.gz: 57656751812c73a3360e5122eddf22bc317f02f1
3
+ metadata.gz: a4e3d477eef945d6636d2efdfd19053988b54b7b
4
+ data.tar.gz: 9775e2a63e01749a0594c131803133e57e38156a
5
5
  SHA512:
6
- metadata.gz: f27a59cee19c3b97e19a36347ee37aabd216d0a566cbb0cf840a998e80053d29d0a088e753d08fd8f6a3107be4be714ca30e9ae8542ce2db81a110253dc89089
7
- data.tar.gz: cbe43fb12c173fc4c0eff9727d033ed60eea022b0a8d827cdae305a4a76995f7582e5fc61268ddcc2496b81f251526dcca482e625e3f25f4afd2dd74bb104a78
6
+ metadata.gz: d9180d73d0e6c23c52bba318e5cf823172531819fc16696ec885a342a2ffde4918fa97167bcd093d1a64f0c5f7a3d428c6dd83f4c494f72a8b757650541af58e
7
+ data.tar.gz: d04f18db69f8183c65d6eef39ccfe915a220b5b4914f9a20ecea5f5add682e78d9bb709d5d572c1ad5ce45a7281130a7197f2cf0ef44e1b4214af48ac33e1dda
@@ -38,6 +38,7 @@ module Ddr
38
38
  autoload :DatastreamAbilityDefinitions
39
39
  autoload :EventAbilityDefinitions
40
40
  autoload :ItemAbilityDefinitions
41
+ autoload :LockAbilityDefinitions
41
42
  autoload :PublicationAbilityDefinitions
42
43
  autoload :RoleBasedAbilityDefinitions
43
44
  autoload :SuperuserAbilityDefinitions
@@ -10,7 +10,8 @@ module Ddr
10
10
  RoleBasedAbilityDefinitions,
11
11
  DatastreamAbilityDefinitions,
12
12
  EventAbilityDefinitions,
13
- PublicationAbilityDefinitions ]
13
+ PublicationAbilityDefinitions,
14
+ LockAbilityDefinitions ]
14
15
 
15
16
  end
16
17
  end
@@ -0,0 +1,13 @@
1
+ module Ddr
2
+ module Auth
3
+ class LockAbilityDefinitions < AbilityDefinitions
4
+
5
+ DENIED_WHEN_LOCKED = [ :add_children, :update, :replace, :arrange, :grant ]
6
+
7
+ def call
8
+ cannot DENIED_WHEN_LOCKED, Ddr::Models::Base, :locked? => true
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -35,6 +35,7 @@ module Ddr::Index
35
35
  IS_ATTACHED_TO = Field.new :is_attached_to, solr_name: "isAttachedTo_ssim"
36
36
  IS_EXTERNAL_TARGET_FOR = Field.new :is_external_target_for, solr_name: "isExternalTargetFor_ssim"
37
37
  IS_GOVERNED_BY = Field.new :is_governed_by, solr_name: "isGovernedBy_ssim"
38
+ IS_LOCKED = Field.new :is_locked, :stored_sortable
38
39
  IS_MEMBER_OF_COLLECTION = Field.new :is_member_of_collection, solr_name: "isMemberOfCollection_ssim"
39
40
  IS_PART_OF = Field.new :is_part_of, solr_name: "isPartOf_ssim"
40
41
  LAST_FIXITY_CHECK_ON = Field.new :last_fixity_check_on, :stored_sortable, type: :date
@@ -5,6 +5,7 @@ module Ddr::Index
5
5
  class Query
6
6
  include Virtus.model
7
7
  extend Forwardable
8
+ extend Deprecation
8
9
 
9
10
  attribute :q, String
10
11
  attribute :fields, Array[FieldAttribute], default: [ ]
@@ -12,7 +13,7 @@ module Ddr::Index
12
13
  attribute :sort, Array[String], default: [ ]
13
14
  attribute :rows, Integer
14
15
 
15
- delegate [:count, :docs, :pids, :each_pid, :all] => :result
16
+ delegate [:count, :docs, :ids, :each_id, :all] => :result
16
17
  delegate :params => :query_params
17
18
 
18
19
  def initialize(**args, &block)
@@ -31,6 +32,16 @@ module Ddr::Index
31
32
  URI.encode_www_form(params)
32
33
  end
33
34
 
35
+ def pids
36
+ Deprecation.warn(QueryResult, "`pids` is deprecated; use `ids` instead.")
37
+ ids
38
+ end
39
+
40
+ def each_pid(&block)
41
+ Deprecation.warn(QueryResult, "`each_pid` is deprecated; use `each_id` instead.")
42
+ each_id(&block)
43
+ end
44
+
34
45
  def result
35
46
  QueryResult.new(self)
36
47
  end
@@ -1,5 +1,6 @@
1
1
  module Ddr::Index
2
2
  class QueryResult < AbstractQueryResult
3
+ extend Deprecation
3
4
 
4
5
  PAGE_SIZE = 1000
5
6
 
@@ -22,6 +23,11 @@ module Ddr::Index
22
23
  end
23
24
 
24
25
  def pids
26
+ Deprecation.warn(QueryResult, "`pids` is deprecated; use `ids` instead.")
27
+ ids
28
+ end
29
+
30
+ def ids
25
31
  Enumerator.new do |e|
26
32
  each do |doc|
27
33
  e << doc[Fields::ID]
@@ -30,7 +36,12 @@ module Ddr::Index
30
36
  end
31
37
 
32
38
  def each_pid(&block)
33
- pids.each(&block)
39
+ Deprecation.warn(QueryResult, "`each_pid` is deprecated; use `each_id` instead.")
40
+ each_id(&block)
41
+ end
42
+
43
+ def each_id(&block)
44
+ ids.each(&block)
34
45
  end
35
46
 
36
47
  def docs
@@ -37,6 +37,10 @@ module Ddr::Models
37
37
  predicate: RDF::URI("info:fedora/fedora-system:def/model#PID"),
38
38
  multiple: false
39
39
 
40
+ property :is_locked,
41
+ predicate: Ddr::Vocab::Asset.isLocked,
42
+ multiple: false
43
+
40
44
  property :license,
41
45
  predicate: RDF::Vocab::DC.license,
42
46
  multiple: false
@@ -119,6 +123,28 @@ module Ddr::Models
119
123
  end
120
124
  end
121
125
 
126
+ def locked?
127
+ !!is_locked
128
+ end
129
+
130
+ def lock
131
+ self.is_locked = true
132
+ end
133
+
134
+ def unlock
135
+ self.is_locked = false
136
+ end
137
+
138
+ def lock!
139
+ lock
140
+ save
141
+ end
142
+
143
+ def unlock!
144
+ unlock
145
+ save
146
+ end
147
+
122
148
  private
123
149
 
124
150
  def update_permanent_id_on_destroy
@@ -34,6 +34,7 @@ module Ddr
34
34
  FCREPO3_PID => fcrepo3_pid,
35
35
  FORMAT_FACET => desc_metadata.format,
36
36
  IDENTIFIER_ALL => all_identifiers,
37
+ IS_LOCKED => is_locked,
37
38
  LICENSE => license,
38
39
  LOCAL_ID => local_id,
39
40
  PERMANENT_ID => permanent_id,
@@ -101,7 +102,7 @@ module Ddr
101
102
  end
102
103
 
103
104
  def all_identifiers
104
- desc_metadata.identifier + [local_id, permanent_id, id].compact
105
+ desc_metadata.identifier + [fcrepo3_pid, local_id, permanent_id, id].compact
105
106
  end
106
107
 
107
108
  def associated_collection
@@ -1,5 +1,5 @@
1
1
  module Ddr
2
2
  module Models
3
- VERSION = "3.0.0.beta.20"
3
+ VERSION = "3.0.0.beta.21"
4
4
  end
5
5
  end
@@ -24,6 +24,9 @@
24
24
  property "multiresImageFilePath",
25
25
  label: "Multires Image File Path"
26
26
 
27
+ property "isLocked",
28
+ label: "Is Locked?"
29
+
27
30
  end
28
31
  end
29
32
  end
@@ -210,6 +210,25 @@ module Ddr::Auth
210
210
 
211
211
  end
212
212
 
213
+ describe "locks" do
214
+ let(:obj) { Ddr::Models::Base.new }
215
+
216
+ describe "effects of locks on abilities" do
217
+ before do
218
+ allow(obj).to receive(:effective_permissions) { Permissions::ALL }
219
+ allow(obj).to receive(:locked?) { true }
220
+ end
221
+ it { should be_able_to(:read, obj) }
222
+ it { should be_able_to(:download, obj) }
223
+ it { should_not be_able_to(:add_children, obj) }
224
+ it { should_not be_able_to(:update, obj) }
225
+ it { should_not be_able_to(:replace, obj) }
226
+ it { should_not be_able_to(:arrange, obj) }
227
+ it { should be_able_to(:audit, obj) }
228
+ it { should_not be_able_to(:grant, obj) }
229
+ end
230
+ end
231
+
213
232
  describe "role based abilities" do
214
233
  shared_examples "it has role based abilities" do
215
234
  describe "when permissions are cached" do
@@ -198,23 +198,77 @@ module Ddr::Models
198
198
  end
199
199
  end
200
200
 
201
- describe "contacts" do
202
- before do
203
- allow(Ddr::Models::Contact).to receive(:get).with(:find, slug: 'xa') do
204
- {'id'=>1, 'slug'=>'xa', 'name'=>'Contact A', 'short_name'=>'A'}
205
- end
206
- allow(Ddr::Models::Contact).to receive(:get).with(:find, slug: 'yb') do
207
- {'id'=>1, 'slug'=>'yb', 'name'=>'Contact B', 'short_name'=>'B'}
201
+ end
202
+
203
+ describe "contacts" do
204
+
205
+ subject { FactoryGirl.build(:item) }
206
+
207
+ before do
208
+ allow(Ddr::Models::Contact).to receive(:get).with(:find, slug: 'xa') do
209
+ {'id'=>1, 'slug'=>'xa', 'name'=>'Contact A', 'short_name'=>'A'}
210
+ end
211
+ allow(Ddr::Models::Contact).to receive(:get).with(:find, slug: 'yb') do
212
+ {'id'=>1, 'slug'=>'yb', 'name'=>'Contact B', 'short_name'=>'B'}
213
+ end
214
+ end
215
+ describe "#research_help" do
216
+ before { subject.research_help_contact = 'yb' }
217
+ it "should return the appropriate contact" do
218
+ expect(subject.research_help.slug).to eq('yb')
219
+ end
220
+ end
221
+ end
222
+
223
+ describe "locking" do
224
+
225
+ subject { FactoryGirl.build(:item) }
226
+
227
+ describe "#locked?" do
228
+ context "object is locked" do
229
+ before { subject.is_locked = true }
230
+ it "should be true" do
231
+ expect(subject.locked?).to be true
208
232
  end
209
233
  end
210
- describe "#research_help" do
211
- before { subject.research_help_contact = 'yb' }
212
- it "should return the appropriate contact" do
213
- expect(subject.research_help.slug).to eq('yb')
234
+ context "object is not locked" do
235
+ it "should be false" do
236
+ expect(subject.locked?).to be false
214
237
  end
215
238
  end
216
239
  end
217
240
 
241
+ describe "lock" do
242
+ it "should lock the object" do
243
+ expect { subject.lock }.to change(subject, :locked?).from(false).to(true)
244
+ end
245
+ end
246
+
247
+ describe "unlock" do
248
+ before { subject.lock }
249
+ it "should unlock the object" do
250
+ expect { subject.unlock }.to change(subject, :locked?).from(true).to(false)
251
+ end
252
+ end
253
+
254
+ describe "lock!" do
255
+ it "should lock and save the object" do
256
+ subject.lock!
257
+ subject.reload
258
+ expect(subject.locked?).to be true
259
+ end
260
+ end
261
+
262
+ describe "unlock!" do
263
+ before { subject.lock! }
264
+ it "should unlock and save the object" do
265
+ subject.unlock!
266
+ subject.reload
267
+ expect(subject.locked?).to be false
268
+ end
269
+ end
270
+
218
271
  end
272
+
219
273
  end
220
274
  end
@@ -101,17 +101,18 @@ RSpec.shared_examples "a DDR model" do
101
101
 
102
102
  describe "#all_identifiers" do
103
103
  subject { described_class.new(id: 'test-3') }
104
- context "when it has descriptive identifiers, local ID, permanent ID, and id" do
104
+ context "when it has descriptive identifiers, Fedora 3 PID, local ID, permanent ID, and id" do
105
105
  before do
106
106
  subject.desc_metadata.identifier = [ 'ID001', 'ID002' ]
107
+ subject.fcrepo3_pid = 'test:92'
107
108
  subject.local_id = 'LOCAL_ID_A'
108
109
  subject.permanent_id = 'ark:/999999/cd3'
109
110
  end
110
111
  its(:all_identifiers) {
111
- is_expected.to match_array([ 'ID001', 'ID002', 'LOCAL_ID_A', 'ark:/999999/cd3', 'test-3' ])
112
+ is_expected.to match_array([ 'ID001', 'ID002', 'test:92', 'LOCAL_ID_A', 'ark:/999999/cd3', 'test-3' ])
112
113
  }
113
114
  end
114
- context "when it has no descriptive identifiers or local ID" do
115
+ context "when it has no descriptive identifiers, Fedora 3 PID, or local ID" do
115
116
  before { subject.permanent_id = 'ark:/999999/cd3' }
116
117
  its(:all_identifiers) {
117
118
  is_expected.to match_array([ 'ark:/999999/cd3', 'test-3' ])
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.20
4
+ version: 3.0.0.beta.21
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: 2016-03-29 00:00:00.000000000 Z
12
+ date: 2016-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -424,6 +424,7 @@ files:
424
424
  - lib/ddr/auth/ability_definitions/datastream_ability_definitions.rb
425
425
  - lib/ddr/auth/ability_definitions/event_ability_definitions.rb
426
426
  - lib/ddr/auth/ability_definitions/item_ability_definitions.rb
427
+ - lib/ddr/auth/ability_definitions/lock_ability_definitions.rb
427
428
  - lib/ddr/auth/ability_definitions/publication_ability_definitions.rb
428
429
  - lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
429
430
  - lib/ddr/auth/ability_definitions/superuser_ability_definitions.rb