hydra-access-controls 9.2.0 → 9.2.1

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: 253a587f6be8c789190ce4652d72a76c96192c1b
4
- data.tar.gz: b8b48f8969ffac5925ad5a1f80c0a82de1e92c9c
3
+ metadata.gz: 4e86f8618f5fea8b5b0ebb586211a5a24e69af62
4
+ data.tar.gz: ade8ed9c17682b50360720acc0e676dbb06a2da4
5
5
  SHA512:
6
- metadata.gz: 48166e2c463853f451ca6526a160c50c458f9bcb7b0d18703c8f85db33a48160ebdd7e0a474b228c3d3304927892a82613474ddaa37d0eaa2c52288f74dbedd8
7
- data.tar.gz: 1948d7ec0915657d4458ba332c751e554df761f72dbcd04320a1cb26c067e66ffd572b42b16c4e9e032a3b44eaed2da0cef38fcd40ce7a152c16dda813af1cff
6
+ metadata.gz: 38c71a8bea0eba274948914728e8b482e2be8ea17017d1e7a185ccc9507c2cd4a38ed2b2800aba272a4b04219b913bac0093c32ca369e539270195b987011e91
7
+ data.tar.gz: 22f264780da8a0add489f00ea65ef86fa20ee5201d0b0c9dc0a8e9aba0213fbed13b716b51b574e3fcca664ed7b02bf07c90f0874a97f4a6afd736958284a909
@@ -5,7 +5,8 @@ module Hydra
5
5
  include Hydra::AccessControls::WithAccessRight
6
6
 
7
7
  included do
8
- validates :embargo_release_date, :lease_expiration_date, :'hydra/future_date' => true
8
+ validates :lease_expiration_date, :'hydra/future_date' => true, if: :lease
9
+ validates :embargo_release_date, :'hydra/future_date' => true, if: :embargo
9
10
 
10
11
  belongs_to :embargo, predicate: Hydra::ACL.hasEmbargo, class_name: 'Hydra::AccessControls::Embargo'
11
12
  belongs_to :lease, predicate: Hydra::ACL.hasLease, class_name: 'Hydra::AccessControls::Lease'
@@ -44,12 +45,8 @@ module Hydra
44
45
  # The lease_visibility! and embargo_visibility! methods rely on this to deactivate the lease when applicable.
45
46
  def visibility=(value)
46
47
  # If changing from embargo or lease, deactivate the lease/embargo and wipe out the associated metadata before proceeding
47
- if !embargo_release_date.nil?
48
- deactivate_embargo! unless value == visibility_during_embargo
49
- end
50
- if !lease_expiration_date.nil?
51
- deactivate_lease! unless value == visibility_during_lease
52
- end
48
+ deactivate_embargo! if deactivate_embargo?(value)
49
+ deactivate_lease! if deactivate_lease?(value)
53
50
  super
54
51
  end
55
52
 
@@ -149,6 +146,19 @@ module Hydra
149
146
  end
150
147
  end
151
148
  end
149
+
150
+ private
151
+
152
+ # @return [true, false] true if there is an embargo set up and the visibility will change
153
+ def deactivate_embargo?(value)
154
+ embargo && embargo.embargo_release_date && value != embargo.visibility_during_embargo
155
+ end
156
+
157
+ # @return [true, false] true if there is a lease set up and the visibility will change
158
+ def deactivate_lease?(value)
159
+ lease && lease.lease_expiration_date && value != lease.visibility_during_lease
160
+ end
161
+
152
162
  end
153
163
  end
154
164
  end
@@ -39,7 +39,7 @@ module Hydra
39
39
 
40
40
  def public_visibility!
41
41
  visibility_will_change! unless visibility == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
42
- set_read_groups([Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC], [])
42
+ set_read_groups([Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC], [Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED])
43
43
  end
44
44
 
45
45
  def registered_visibility!
@@ -18,25 +18,58 @@ describe Hydra::AccessControls::Embargoable do
18
18
  let(:past_date) { Date.today-2 }
19
19
  subject { TestModel.new }
20
20
 
21
- context 'validations' do
22
- subject { ModsAsset.new(lease_expiration_date: past_date, embargo_release_date: past_date) }
23
- it "validates embargo_release_date and lease_expiration_date" do
24
- expect(subject).to_not be_valid
25
- expect(subject.errors[:lease_expiration_date]).to eq ['Must be a future date']
26
- expect(subject.errors[:embargo_release_date]).to eq ['Must be a future date']
21
+ describe 'validations' do
22
+ context "with dates" do
23
+ subject { ModsAsset.new(lease_expiration_date: past_date, embargo_release_date: past_date) }
24
+ it "validates embargo_release_date and lease_expiration_date" do
25
+ expect(subject).to_not be_valid
26
+ expect(subject.errors[:lease_expiration_date]).to eq ['Must be a future date']
27
+ expect(subject.errors[:embargo_release_date]).to eq ['Must be a future date']
28
+ end
29
+ end
30
+
31
+ context "without an embargo" do
32
+ subject { ModsAsset.new }
33
+
34
+ before { subject.valid? }
35
+
36
+ it "doesn't create a new embargo" do
37
+ expect(subject.embargo).to be_nil
38
+ end
39
+
40
+ it "doesn't create a new lease" do
41
+ expect(subject.lease).to be_nil
42
+ end
27
43
  end
28
44
  end
29
45
 
30
46
  context 'visibility=' do
31
- it "when changing from embargo, wipes out associated embargo metadata" do
32
- subject.embargo_release_date = future_date.to_s
33
- expect(subject).to receive(:deactivate_embargo!)
34
- subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
47
+ context "when the object is not under embargo or lease" do
48
+ before do
49
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
50
+ end
51
+ it "doesn't create embargo or lease" do
52
+ expect(subject.embargo).to be_nil
53
+ expect(subject.lease).to be_nil
54
+ end
55
+ end
56
+
57
+ context "when changing from embargo" do
58
+ before do
59
+ subject.embargo_release_date = future_date.to_s
60
+ end
61
+ it "wipes out associated embargo metadata" do
62
+ expect(subject).to receive(:deactivate_embargo!)
63
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
64
+ end
35
65
  end
36
66
 
37
67
  context "when changing from lease" do
38
- it "wipes out associated lease metadata and marks visibility as changed" do
68
+ before do
39
69
  subject.apply_lease(future_date.to_s, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE)
70
+ end
71
+
72
+ it "wipes out associated lease metadata and marks visibility as changed" do
40
73
  expect(subject).to receive(:deactivate_lease!)
41
74
  subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
42
75
  expect(subject).to be_visibility_changed
@@ -11,6 +11,67 @@ describe Hydra::AccessControls::Visibility do
11
11
  include VisibilityOverride
12
12
  end
13
13
 
14
+ describe "setting visibility" do
15
+ before do
16
+ class Foo < ActiveFedora::Base
17
+ include Hydra::AccessControls::Permissions
18
+ end
19
+ end
20
+
21
+ after { Object.send(:remove_const, :Foo) }
22
+
23
+ subject { Foo.new }
24
+
25
+ [ Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE,
26
+ Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED,
27
+ Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC ]
28
+ .each do |vis|
29
+
30
+ describe "to #{vis}" do
31
+
32
+ before { subject.visibility=vis }
33
+
34
+ it "should be set to #{vis}" do
35
+ expect(subject.visibility).to eql vis
36
+ end
37
+
38
+ describe "and then to private" do
39
+ before { subject.visibility=Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE }
40
+ it "should be set to private" do
41
+ expect(subject.visibility).to eql Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
42
+ end
43
+ it "should have no permissions" do
44
+ expect(subject.permissions.map(&:to_hash)).to be_empty
45
+ end
46
+ end
47
+
48
+ describe "and then to authenticated" do
49
+ before { subject.visibility=Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED }
50
+ it "should be set to authenticated" do
51
+ expect(subject.visibility).to eql Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
52
+ end
53
+ it "should have authenticated permissions only" do
54
+ expect(subject.permissions.map(&:to_hash)).to match_array [
55
+ {type: "group", access: "read", name: Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_AUTHENTICATED } ]
56
+ end
57
+ end
58
+
59
+ describe "and then to public" do
60
+ before { subject.visibility=Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC }
61
+ it "should be set to public" do
62
+ expect(subject.visibility).to eql Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
63
+ end
64
+ it "should have public permissions only" do
65
+ expect(subject.permissions.map(&:to_hash)).to match_array [
66
+ {type: "group", access: "read", name: Hydra::AccessControls::AccessRight::PERMISSION_TEXT_VALUE_PUBLIC } ]
67
+ end
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
14
75
  it 'allows for overrides of visibility' do
15
76
  expect{
16
77
  MockParent.new(visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-access-controls
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.2.0
4
+ version: 9.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-08 00:00:00.000000000 Z
13
+ date: 2015-07-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -218,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  version: '0'
219
219
  requirements: []
220
220
  rubyforge_project:
221
- rubygems_version: 2.4.8
221
+ rubygems_version: 2.4.5
222
222
  signing_key:
223
223
  specification_version: 4
224
224
  summary: Access controls for project hydra