cancancan-neo4j 1.3.0 → 1.3.1

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
- SHA256:
3
- metadata.gz: 80f5ce945f4e2b8449a73be0c5d203c47899f2ce2d0332bfb9db82bff568e4c1
4
- data.tar.gz: 9ac02736ba3b4ae898f67c954c45dac7059d9e4c867795699b1bc64a7036d965
2
+ SHA1:
3
+ metadata.gz: 31ad75503b290ec41b885373893ff02eb50ddc61
4
+ data.tar.gz: c2eb9df523dc767271588050c63461e23dc8b202
5
5
  SHA512:
6
- metadata.gz: f1f6de129648660e99814b2e3a2869f35d62d105879bc2d2b4e75e58c9e1a4ed0db2a15a688df731c11717dbef9db1ae1ee984a3c3d6c5155b0655b13d533c46
7
- data.tar.gz: 26393b95bc052363bbc607e05ad740dead1bc8fc7829dd2705bdddcd21d491ae160084489b56c6520230d77ff5a26b8932dc95b4d63a6781d4c319d5da138b96
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
- rule = @rules.first
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
- .new(construct_cypher_options)
61
- .query
62
- .proxy_as(@model_class, var_name)
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 conditions.first if conditions.size == 1
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
 
@@ -5,3 +5,5 @@ require 'neo4j'
5
5
  require 'cancancan/neo4j/version'
6
6
  require 'cancancan/model_adapters/neo4j_adapter'
7
7
  require 'cancancan/neo4j/cypher_constructor_helper'
8
+ require 'cancancan/extensions/ability'
9
+ require 'cancancan/extensions/conditions_matcher'
@@ -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
- rule = rule_cypher.options[:rule]
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
- if @options[:rule].conditions.blank?
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
@@ -2,6 +2,6 @@ module CanCanCan
2
2
  end
3
3
  module CanCanCan
4
4
  module Neo4j
5
- VERSION = '1.3.0'.freeze
5
+ VERSION = '1.3.1'.freeze
6
6
  end
7
7
  end
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.0
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-05-29 00:00:00.000000000 Z
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
- type: :runtime
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
- type: :runtime
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
- type: :development
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.3.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
- type: :development
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
- type: :development
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
- type: :development
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
- type: :development
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.7.6
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: []