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 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: []