cancancan-neo4j 1.3.0 → 1.3.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 +5 -5
- data/lib/cancancan/extensions/ability.rb +24 -0
- data/lib/cancancan/extensions/conditions_matcher.rb +15 -0
- data/lib/cancancan/model_adapters/neo4j_adapter.rb +8 -7
- data/lib/cancancan/neo4j.rb +2 -0
- data/lib/cancancan/neo4j/cypher_constructor.rb +17 -8
- data/lib/cancancan/neo4j/rule_cypher.rb +5 -1
- data/lib/cancancan/neo4j/version.rb +1 -1
- metadata +39 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 31ad75503b290ec41b885373893ff02eb50ddc61
|
4
|
+
data.tar.gz: c2eb9df523dc767271588050c63461e23dc8b202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0fc036c41b50ae5fb1db57fe1cbadaccb108e62f785f81aac1e3bba3fb217625708bae18192c312173a5ed8dbd4f038199e82e9e9ca6f4c5816fc8c43bbd90c
|
7
|
+
data.tar.gz: 31fa5bc228d7b4855cf5da294aaa39cd625a1fcd12169334c947c2e42d2e71a638fcf825269cd82f17da9b4f11dc1ee27e8c86e154230996067cae4e5e7d9683
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module CanCanCan
|
2
|
+
module Extensions
|
3
|
+
# orverwriting .relevant_rules_for_match method from CanCan::Ability module
|
4
|
+
module Ability
|
5
|
+
# original method, to want to make scope work with rule like
|
6
|
+
# "can :read, Article, Article.where(secret: true)",
|
7
|
+
# we are skipping raising of error in case of rule being raw query
|
8
|
+
# def relevant_rules_for_match(action, subject)
|
9
|
+
# relevant_rules(action, subject).each do |rule|
|
10
|
+
# next unless rule.only_raw_sql?
|
11
|
+
# raise Error,
|
12
|
+
# "The can? and cannot? call cannot be used with a raw sql."
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
def relevant_rules_for_match(action, subject)
|
16
|
+
relevant_rules(action, subject)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
CanCan::Ability.module_eval do
|
23
|
+
include CanCanCan::Extensions::Ability
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
CanCan::ConditionsMatcher.module_eval do
|
2
|
+
private
|
3
|
+
|
4
|
+
def matches_non_block_conditions(subject)
|
5
|
+
if @conditions.is_a?(Hash)
|
6
|
+
return nested_subject_matches_conditions?(subject) if subject.class == Hash
|
7
|
+
return matches_conditions_hash?(subject) unless subject_class?(subject)
|
8
|
+
end
|
9
|
+
if @conditions.is_a?(::Neo4j::ActiveNode::Query::QueryProxy)
|
10
|
+
return @conditions.where(id: subject.id).exists? unless subject_class?(subject)
|
11
|
+
end
|
12
|
+
# Don't stop at "cannot" definitions when there are conditions.
|
13
|
+
conditions_empty? ? true : @base_behavior
|
14
|
+
end
|
15
|
+
end
|
@@ -8,8 +8,7 @@ module CanCan
|
|
8
8
|
class Neo4jAdapter < AbstractAdapter
|
9
9
|
def database_records
|
10
10
|
return @model_class.where('false') if @rules.empty?
|
11
|
-
|
12
|
-
return rule.conditions if override_scope
|
11
|
+
override_scope
|
13
12
|
records_for_multiple_rules.distinct
|
14
13
|
end
|
15
14
|
|
@@ -56,10 +55,11 @@ module CanCan
|
|
56
55
|
private
|
57
56
|
|
58
57
|
def records_for_multiple_rules
|
59
|
-
CanCanCan::Neo4j::CypherConstructor
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
con = CanCanCan::Neo4j::CypherConstructor.new(construct_cypher_options)
|
59
|
+
if (scope = con.scope)
|
60
|
+
return scope
|
61
|
+
end
|
62
|
+
con.query.proxy_as(@model_class, var_name)
|
63
63
|
end
|
64
64
|
|
65
65
|
def construct_cypher_options
|
@@ -74,7 +74,8 @@ module CanCan
|
|
74
74
|
return unless conditions.any? do |condition|
|
75
75
|
condition.is_a?(Neo4j::ActiveNode::Query::QueryProxy)
|
76
76
|
end
|
77
|
-
return
|
77
|
+
return if conditions.size == 1
|
78
|
+
return if conditions.select { |cn| cn.is_a?(Hash) && !cn.empty? }.empty?
|
78
79
|
raise_override_scope_error
|
79
80
|
end
|
80
81
|
|
data/lib/cancancan/neo4j.rb
CHANGED
@@ -4,7 +4,7 @@ module CanCanCan
|
|
4
4
|
module Neo4j
|
5
5
|
# Constructs cypher query from rule cypher options
|
6
6
|
class CypherConstructor
|
7
|
-
attr_reader :query
|
7
|
+
attr_reader :query, :scope
|
8
8
|
|
9
9
|
def initialize(rule_cyphers)
|
10
10
|
@model_class = rule_cyphers.first.options[:model_class]
|
@@ -19,17 +19,26 @@ module CanCanCan
|
|
19
19
|
|
20
20
|
def construct_cypher(rule_cyphers)
|
21
21
|
rule_cyphers.each do |rule_cypher|
|
22
|
-
|
23
|
-
reset_variables if rule.conditions.blank?
|
24
|
-
if rule.base_behavior
|
25
|
-
construct_can_cypher(rule_cypher)
|
26
|
-
else
|
27
|
-
construct_cannot_cypher(rule_cypher)
|
28
|
-
end
|
22
|
+
construct_cypher_for_rule(rule_cypher)
|
29
23
|
end
|
30
24
|
unwind_query_with_distinct
|
31
25
|
end
|
32
26
|
|
27
|
+
def construct_cypher_for_rule(rule_cypher)
|
28
|
+
rule = rule_cypher.options[:rule]
|
29
|
+
return if update_scope(rule_cypher)
|
30
|
+
reset_variables if rule.conditions.blank?
|
31
|
+
if rule.base_behavior
|
32
|
+
construct_can_cypher(rule_cypher)
|
33
|
+
else
|
34
|
+
construct_cannot_cypher(rule_cypher)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def update_scope(rule_cypher)
|
39
|
+
@scope = rule_cypher.options[:scope]
|
40
|
+
end
|
41
|
+
|
33
42
|
def unwind_query_with_distinct
|
34
43
|
var = CanCanCan::Neo4j::CypherConstructorHelper.var_name(@model_class)
|
35
44
|
@query = unwind_qeury("#{var}_can")
|
@@ -22,7 +22,11 @@ module CanCanCan
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def construct_cypher_conditions
|
25
|
-
|
25
|
+
conditions = @options[:rule].conditions
|
26
|
+
if conditions.is_a?(::Neo4j::ActiveNode::Query::QueryProxy)
|
27
|
+
return @options[:scope] = conditions
|
28
|
+
end
|
29
|
+
if conditions.blank?
|
26
30
|
condition_for_rule_without_conditions
|
27
31
|
else
|
28
32
|
construct_cypher_options
|
metadata
CHANGED
@@ -1,122 +1,136 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cancancan-neo4j
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amit Suryavanshi
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: cancancan
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
18
|
version: '0'
|
20
|
-
|
19
|
+
name: cancancan
|
21
20
|
prerelease: false
|
21
|
+
type: :runtime
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: neo4j
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
30
|
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: 9.0.0
|
34
|
-
|
33
|
+
name: neo4j
|
35
34
|
prerelease: false
|
35
|
+
type: :runtime
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 9.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: bundler
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - ">="
|
46
45
|
- !ruby/object:Gem::Version
|
47
46
|
version: '1.3'
|
48
|
-
|
47
|
+
name: bundler
|
49
48
|
prerelease: false
|
49
|
+
type: :development
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: neo4j-rake_tasks
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - ">="
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
60
|
+
version: '0'
|
61
|
+
name: neo4j-community
|
62
|
+
prerelease: false
|
62
63
|
type: :development
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.3.0
|
75
|
+
name: neo4j-rake_tasks
|
63
76
|
prerelease: false
|
77
|
+
type: :development
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: 0.3.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
71
84
|
requirement: !ruby/object:Gem::Requirement
|
72
85
|
requirements:
|
73
86
|
- - ">="
|
74
87
|
- !ruby/object:Gem::Version
|
75
88
|
version: 0.11.3
|
76
|
-
|
89
|
+
name: pry
|
77
90
|
prerelease: false
|
91
|
+
type: :development
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 0.11.3
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
98
|
requirement: !ruby/object:Gem::Requirement
|
86
99
|
requirements:
|
87
100
|
- - ">="
|
88
101
|
- !ruby/object:Gem::Version
|
89
102
|
version: '10.1'
|
90
|
-
|
103
|
+
name: rake
|
91
104
|
prerelease: false
|
105
|
+
type: :development
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '10.1'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
100
113
|
requirements:
|
101
114
|
- - ">="
|
102
115
|
- !ruby/object:Gem::Version
|
103
116
|
version: '3.2'
|
104
|
-
|
117
|
+
name: rspec
|
105
118
|
prerelease: false
|
119
|
+
type: :development
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '3.2'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop
|
113
126
|
requirement: !ruby/object:Gem::Requirement
|
114
127
|
requirements:
|
115
128
|
- - ">="
|
116
129
|
- !ruby/object:Gem::Version
|
117
130
|
version: 0.48.1
|
118
|
-
|
131
|
+
name: rubocop
|
119
132
|
prerelease: false
|
133
|
+
type: :development
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - ">="
|
@@ -130,6 +144,8 @@ extensions: []
|
|
130
144
|
extra_rdoc_files: []
|
131
145
|
files:
|
132
146
|
- cancancan-neo4j.gemspec
|
147
|
+
- lib/cancancan/extensions/ability.rb
|
148
|
+
- lib/cancancan/extensions/conditions_matcher.rb
|
133
149
|
- lib/cancancan/model_adapters/neo4j_adapter.rb
|
134
150
|
- lib/cancancan/neo4j.rb
|
135
151
|
- lib/cancancan/neo4j/active_record_disabler.rb
|
@@ -141,7 +157,7 @@ homepage: https://github.com/CanCanCommunity/cancancan-neo4j
|
|
141
157
|
licenses:
|
142
158
|
- MIT
|
143
159
|
metadata: {}
|
144
|
-
post_install_message:
|
160
|
+
post_install_message:
|
145
161
|
rdoc_options: []
|
146
162
|
require_paths:
|
147
163
|
- lib
|
@@ -156,9 +172,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
172
|
- !ruby/object:Gem::Version
|
157
173
|
version: '0'
|
158
174
|
requirements: []
|
159
|
-
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
161
|
-
signing_key:
|
175
|
+
rubyforge_project:
|
176
|
+
rubygems_version: 2.6.14
|
177
|
+
signing_key:
|
162
178
|
specification_version: 4
|
163
179
|
summary: neo4j database adapter for CanCanCan.
|
164
180
|
test_files: []
|