mongoid_ability 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74b05128ad1b7880b1082fbeddf304463a86bb60
4
- data.tar.gz: a14d2b70096be646ed72fb2f20b87cb4bd351236
3
+ metadata.gz: dd50f6141566a2e2c5d2814db0a66d5bd7f8a419
4
+ data.tar.gz: 4410f6d3f4991cdb145c1f68ca8d80c1c8943562
5
5
  SHA512:
6
- metadata.gz: 29c3b53f72217a2aa8489a338370da1925c4155b9a4dd4d251eb5f3720da8c7d0535532f0d38e251d6bf24d6f363b2742b8ea1ab59ba131252534cd5f22506af
7
- data.tar.gz: 29932436d700cb14e9967a0e345b20a2919c93b31bf4747076043508686672ac42b06fa071c23bbee4235e9e938d5e9a78a7cbbbce3ca9904eaf2b0c6285c1c8
6
+ metadata.gz: 27e701a3f9991f7d03aa13e669e9764c85f4f233d5d15b759c044ccc10b2574dc474d62728dcf88de7cc25bb7e064cd8f04851f87780359673a6124490059df5
7
+ data.tar.gz: bbaeeaa89f8166741eb5c8f90d16bd00bcaede8c116099bea982446dc39b0824234acf1ada6c1eaaa978abc6bc9c7559102656c8580a7e263e71d33f862f8bc6
@@ -8,16 +8,17 @@ module MongoidAbility
8
8
  field :outcome, type: Boolean, default: false
9
9
 
10
10
  # ---------------------------------------------------------------------
11
-
11
+
12
12
  belongs_to :subject, polymorphic: true, touch: true
13
13
 
14
14
  # ---------------------------------------------------------------------
15
-
15
+
16
+ # TODO: validate that action is defined on subject or its superclasses
16
17
  validates :action, presence: true, uniqueness: { scope: [ :subject_type, :subject_id, :outcome ] }
17
18
  validates :outcome, presence: true
18
19
 
19
20
  # ---------------------------------------------------------------------
20
-
21
+
21
22
  scope :for_action, -> action { where(action: action.to_sym) }
22
23
 
23
24
  scope :for_subject_type, -> subject_type { where(subject_type: subject_type.to_s) }
@@ -30,18 +31,18 @@ module MongoidAbility
30
31
  end
31
32
 
32
33
  # =====================================================================
33
-
34
+
34
35
  module ClassMethods
35
36
  end
36
37
 
37
38
  # =====================================================================
38
-
39
+
39
40
  def calculated_outcome
40
41
  self.outcome
41
42
  end
42
43
 
43
44
  # ---------------------------------------------------------------------
44
-
45
+
45
46
  def open?
46
47
  self.calculated_outcome == true
47
48
  end
@@ -51,7 +52,7 @@ module MongoidAbility
51
52
  end
52
53
 
53
54
  # ---------------------------------------------------------------------
54
-
55
+
55
56
  def class_lock?
56
57
  !id_lock?
57
58
  end
@@ -61,7 +62,7 @@ module MongoidAbility
61
62
  end
62
63
 
63
64
  # ---------------------------------------------------------------------
64
-
65
+
65
66
  def conditions
66
67
  res = { _type: subject_type }
67
68
  res = res.merge(_id: subject_id) if subject_id.present?
@@ -24,7 +24,11 @@ module MongoidAbility
24
24
  end
25
25
 
26
26
  def default_lock action, outcome
27
- default_locks << lock_class_name.constantize.new(subject_type: self, action: action, outcome: outcome)
27
+ if existing_lock = default_locks.detect{ |l| l.action.to_s == action.to_s }
28
+ existing_lock.outcome = outcome
29
+ else
30
+ default_locks << lock_class_name.constantize.new(subject_type: self, action: action, outcome: outcome)
31
+ end
28
32
  end
29
33
 
30
34
  # ---------------------------------------------------------------------
@@ -1,3 +1,3 @@
1
1
  module MongoidAbility
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -52,6 +52,19 @@ module MongoidAbility
52
52
  lock.subject_id.must_be_nil
53
53
  lock.action.must_equal :read
54
54
  end
55
+
56
+ describe 'when trying to insert another lock for same action' do
57
+ before do
58
+ subject.class.default_lock :read, false
59
+ end
60
+
61
+ it 'does not create duplicate' do
62
+ subject.class.default_locks.select{ |l| l.action == :read }.length.must_equal 1
63
+ end
64
+ it 'sets the new outcome' do
65
+ subject.class.default_locks.select{ |l| l.action == :read }.first.outcome.must_equal false
66
+ end
67
+ end
55
68
  end
56
69
 
57
70
  # =====================================================================
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_ability
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Celizna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-28 00:00:00.000000000 Z
11
+ date: 2015-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cancancan