mongoid_ability 0.3.7 → 0.3.8
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/.travis.yml +1 -1
- data/lib/mongoid_ability/accessible_query_builder.rb +4 -8
- data/lib/mongoid_ability/resolve_default_locks.rb +3 -4
- data/lib/mongoid_ability/resolve_inherited_locks.rb +4 -6
- data/lib/mongoid_ability/resolve_locks.rb +4 -6
- data/lib/mongoid_ability/version.rb +1 -1
- data/mongoid_ability.gemspec +1 -1
- data/test/mongoid_ability/subject_test.rb +8 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 943814cee43339bf17cc8387496583fbbc797ddf
|
4
|
+
data.tar.gz: 714784b30fa8dad9f3e5aa32c8a25f62f034005a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05c965309b7d19f5afe52ed51f47189e4a06049a33af6ec640eb845a02137b9938762dd77e32d4b80c6f58037a5b5a7fc09999d71a1c36da5ccbcde021f347b0
|
7
|
+
data.tar.gz: e6d1dcf742c1c3dda15459b4dc1abdfbd7d08bbc419262033b72654df3c4e929a94d799027e42e4bc48c02f88b3d4d469287d7ed5ca5fc83208841150c9973e0
|
data/.travis.yml
CHANGED
@@ -17,18 +17,18 @@ module MongoidAbility
|
|
17
17
|
private # =============================================================
|
18
18
|
|
19
19
|
def closed_types_condition
|
20
|
-
{ _type: { '$nin' => values.closed_types } }
|
20
|
+
{ _type: { '$nin' => values.closed_types.uniq } }
|
21
21
|
end
|
22
22
|
|
23
23
|
def open_types_and_ids_condition
|
24
24
|
{
|
25
|
-
_type: { '$in' => values.open_types_and_ids.map(&:type) },
|
26
|
-
_id: { '$in' => values.open_types_and_ids.map(&:id) }
|
25
|
+
_type: { '$in' => values.open_types_and_ids.map(&:type).uniq },
|
26
|
+
_id: { '$in' => values.open_types_and_ids.map(&:id).uniq }
|
27
27
|
}
|
28
28
|
end
|
29
29
|
|
30
30
|
def closed_ids_condition
|
31
|
-
{ _id: { '$nin' => values.closed_ids } }
|
31
|
+
{ _id: { '$nin' => values.closed_ids.uniq } }
|
32
32
|
end
|
33
33
|
|
34
34
|
# ---------------------------------------------------------------------
|
@@ -42,9 +42,5 @@ module MongoidAbility
|
|
42
42
|
def base_class_superclass
|
43
43
|
@base_class_superclass ||= (base_class.ancestors_with_default_locks.last || base_class)
|
44
44
|
end
|
45
|
-
|
46
|
-
def default_lock(_cls, action)
|
47
|
-
base_class_superclass.default_locks.detect { |l| l.action.to_s == action.to_s }
|
48
|
-
end
|
49
45
|
end
|
50
46
|
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
module MongoidAbility
|
2
2
|
class ResolveDefaultLocks < ResolveLocks
|
3
|
-
|
4
3
|
def call
|
5
|
-
return false if default_locks.any?{ |l| l.closed?(options) }
|
6
|
-
return true if default_locks.any?{ |l| l.open?(options) }
|
4
|
+
return false if default_locks.any? { |l| l.closed?(options) }
|
5
|
+
return true if default_locks.any? { |l| l.open?(options) }
|
7
6
|
end
|
8
7
|
|
9
8
|
private # =============================================================
|
10
9
|
|
11
10
|
def default_locks
|
12
|
-
subject_class.default_locks.select{ |l| l.action.to_s == action.to_s }
|
11
|
+
subject_class.default_locks.select { |l| l.action.to_s == action.to_s }
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module MongoidAbility
|
2
2
|
class ResolveInheritedLocks < ResolveLocks
|
3
|
-
|
4
3
|
def call
|
5
4
|
uo = user_outcome
|
6
|
-
return uo
|
5
|
+
return uo unless uo.nil?
|
7
6
|
|
8
|
-
if owner.respond_to?(owner.class.inherit_from_relation_name) && owner.inherit_from_relation
|
7
|
+
if owner.respond_to?(owner.class.inherit_from_relation_name) && !owner.inherit_from_relation.nil?
|
9
8
|
io = owner.inherit_from_relation.collect { |inherited_owner| inherited_owner_outcome(inherited_owner) }.compact
|
10
|
-
return io.any?{ |o| o == true } unless io.empty?
|
9
|
+
return io.any? { |o| o == true } unless io.empty?
|
11
10
|
end
|
12
11
|
|
13
12
|
default_outcome
|
@@ -19,7 +18,7 @@ module MongoidAbility
|
|
19
18
|
@user_outcome ||= ResolveOwnerLocks.call(owner, action, subject_class, subject, options)
|
20
19
|
end
|
21
20
|
|
22
|
-
def inherited_owner_outcome
|
21
|
+
def inherited_owner_outcome(inherited_owner)
|
23
22
|
@inherited_owner_outcome ||= {}
|
24
23
|
@inherited_owner_outcome[inherited_owner] ||= ResolveOwnerLocks.call(inherited_owner, action, subject_class, subject, options)
|
25
24
|
end
|
@@ -27,6 +26,5 @@ module MongoidAbility
|
|
27
26
|
def default_outcome
|
28
27
|
@default_outcome ||= ResolveDefaultLocks.call(nil, action, subject_class, nil, options)
|
29
28
|
end
|
30
|
-
|
31
29
|
end
|
32
30
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module MongoidAbility
|
2
2
|
class ResolveLocks < Struct.new(:owner, :action, :subject_type, :subject, :options)
|
3
|
-
|
4
3
|
attr_reader(
|
5
4
|
:subject_class,
|
6
5
|
:subject_id
|
@@ -18,17 +17,16 @@ module MongoidAbility
|
|
18
17
|
@subject_class = subject_type.to_s.constantize
|
19
18
|
@subject_id = subject.id if subject.present?
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
cls.default_locks.any?{ |l| l.action == action }
|
20
|
+
fail StandardError, "#{subject_type} class does not have default locks" unless @subject_class.respond_to?(:default_locks)
|
21
|
+
fail StandardError, "#{subject_type} class does not have default lock for :#{action} action" unless @subject_class.self_and_ancestors_with_default_locks.any? do |cls|
|
22
|
+
cls.default_locks.any? { |l| l.action == action }
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
# =====================================================================
|
28
27
|
|
29
28
|
def call
|
30
|
-
|
29
|
+
fail NotImplementedError
|
31
30
|
end
|
32
|
-
|
33
31
|
end
|
34
32
|
end
|
data/mongoid_ability.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "cancancan", "~> 1.9"
|
22
|
-
spec.add_dependency "mongoid", "~> 5
|
22
|
+
spec.add_dependency "mongoid", "~> 5"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler"
|
25
25
|
spec.add_development_dependency "coveralls"
|
@@ -24,6 +24,9 @@ module MongoidAbility
|
|
24
24
|
MySubject.default_locks = []
|
25
25
|
MySubject.default_lock MyLock, :read, false
|
26
26
|
MySubject.default_lock MyLock1, :read, false
|
27
|
+
|
28
|
+
MySubject1.default_locks = []
|
29
|
+
MySubject1.default_lock MyLock, :read, true
|
27
30
|
end
|
28
31
|
|
29
32
|
it 'does not allow multiple locks for same action' do
|
@@ -37,6 +40,11 @@ module MongoidAbility
|
|
37
40
|
it 'replaces existing locks with new one' do
|
38
41
|
MySubject.default_locks.detect { |l| l.action == :read }.class.must_equal MyLock1
|
39
42
|
end
|
43
|
+
|
44
|
+
it 'replaces superclass locks' do
|
45
|
+
MySubject1.default_locks.count.must_equal 1
|
46
|
+
MySubject1.default_locks.detect { |l| l.action == :read }.outcome.must_equal true
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
50
|
describe '.is_root_class?' do
|
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.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomáš Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cancancan
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5
|
33
|
+
version: '5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '5
|
40
|
+
version: '5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
204
|
version: '0'
|
205
205
|
requirements: []
|
206
206
|
rubyforge_project:
|
207
|
-
rubygems_version: 2.4.
|
207
|
+
rubygems_version: 2.4.8
|
208
208
|
signing_key:
|
209
209
|
specification_version: 4
|
210
210
|
summary: Custom Ability class that allows CanCanCan authorization library store permissions
|