rubocop-graphql 1.3.0 → 1.4.0
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/lib/rubocop/cop/graphql/argument_description.rb +1 -0
- data/lib/rubocop/cop/graphql/argument_name.rb +1 -0
- data/lib/rubocop/cop/graphql/field_definitions.rb +2 -0
- data/lib/rubocop/cop/graphql/field_description.rb +1 -0
- data/lib/rubocop/cop/graphql/field_hash_key.rb +1 -0
- data/lib/rubocop/cop/graphql/field_method.rb +1 -0
- data/lib/rubocop/cop/graphql/field_name.rb +1 -0
- data/lib/rubocop/cop/graphql/legacy_dsl.rb +1 -0
- data/lib/rubocop/cop/graphql/multiple_field_definitions.rb +2 -0
- data/lib/rubocop/cop/graphql/not_authorized_node_type.rb +57 -11
- data/lib/rubocop/cop/graphql/unnecessary_argument_camelize.rb +1 -0
- data/lib/rubocop/cop/graphql/unnecessary_field_alias.rb +1 -0
- data/lib/rubocop/cop/graphql/unnecessary_field_camelize.rb +1 -0
- data/lib/rubocop/graphql/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dc015328dbeffe70db24816b19cc9252244e5311ce2957ceb970a08a6812132
|
4
|
+
data.tar.gz: 5763888eb52a54c529d02e2f7f01560002c5172cace12ea440b85e64e7a0898d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5e22e52e4b9e4c090dcec11933bb2fa8e22134c49963088828c9352190e0f4b834ede4e4f280402e904ad8c099db987645b689107860571172898c52e1c61b0
|
7
|
+
data.tar.gz: 284ef533642cdaf70e75dda615e77406eba375d607827f40c59bbdc47e714d5b0be724bfc710189ccc211a9f3a5cf558eb38ee161bc81c559285db88a12df0d8
|
@@ -10,6 +10,9 @@ module RuboCop
|
|
10
10
|
# If `.authorized?` is defined in a parent class, you can add parent to the "SafeBaseClasses"
|
11
11
|
# to avoid offenses in children.
|
12
12
|
#
|
13
|
+
# This cop also checks the `can_can_action` or `pundit_role` methods that
|
14
|
+
# can be used as part of the Ruby GraphQL Pro.
|
15
|
+
#
|
13
16
|
# @example
|
14
17
|
# # good
|
15
18
|
#
|
@@ -37,6 +40,26 @@ module RuboCop
|
|
37
40
|
# end
|
38
41
|
# end
|
39
42
|
#
|
43
|
+
# # good
|
44
|
+
#
|
45
|
+
# class UserType < BaseType
|
46
|
+
# implements GraphQL::Types::Relay::Node
|
47
|
+
#
|
48
|
+
# pundit_role :staff
|
49
|
+
#
|
50
|
+
# field :uuid, ID, null: false
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# # good
|
54
|
+
#
|
55
|
+
# class UserType < BaseType
|
56
|
+
# implements GraphQL::Types::Relay::Node
|
57
|
+
#
|
58
|
+
# can_can_action :staff
|
59
|
+
#
|
60
|
+
# field :uuid, ID, null: false
|
61
|
+
# end
|
62
|
+
#
|
40
63
|
# # bad
|
41
64
|
#
|
42
65
|
# class UserType < BaseType
|
@@ -48,11 +71,6 @@ module RuboCop
|
|
48
71
|
class NotAuthorizedNodeType < Base
|
49
72
|
MSG = ".authorized? should be defined for types implementing Node interface."
|
50
73
|
|
51
|
-
# @!method class_name(node)
|
52
|
-
def_node_matcher :class_name, <<~PATTERN
|
53
|
-
(const nil? $_)
|
54
|
-
PATTERN
|
55
|
-
|
56
74
|
# @!method implements_node_type?(node)
|
57
75
|
def_node_matcher :implements_node_type?, <<~PATTERN
|
58
76
|
`(send nil? :implements
|
@@ -62,25 +80,53 @@ module RuboCop
|
|
62
80
|
(const nil? :GraphQL) :Types) :Relay) :Node))
|
63
81
|
PATTERN
|
64
82
|
|
83
|
+
# @!method has_can_can_action?(node)
|
84
|
+
def_node_matcher :has_can_can_action?, <<~PATTERN
|
85
|
+
`(send nil? :can_can_action {nil_type? sym_type?})
|
86
|
+
PATTERN
|
87
|
+
|
88
|
+
# @!method has_pundit_role?(node)
|
89
|
+
def_node_matcher :has_pundit_role?, <<~PATTERN
|
90
|
+
`(send nil? :pundit_role {nil_type? sym_type?})
|
91
|
+
PATTERN
|
92
|
+
|
65
93
|
# @!method has_authorized_method?(node)
|
66
94
|
def_node_matcher :has_authorized_method?, <<~PATTERN
|
67
95
|
{`(:defs (:self) :authorized? ...) | `(:sclass (:self) `(:def :authorized? ...))}
|
68
96
|
PATTERN
|
69
97
|
|
98
|
+
def on_module(node)
|
99
|
+
@parent_modules ||= []
|
100
|
+
@parent_modules << node.child_nodes[0].const_name
|
101
|
+
end
|
102
|
+
|
70
103
|
def on_class(node)
|
71
|
-
|
104
|
+
@parent_modules ||= []
|
105
|
+
return if possible_parent_classes(node).any? { |klass| ignored_class?(klass) }
|
106
|
+
|
107
|
+
@parent_modules << node.child_nodes[0].const_name
|
72
108
|
|
73
|
-
add_offense(node) if implements_node_type?(node) && !
|
109
|
+
add_offense(node) if implements_node_type?(node) && !implements_authorization?(node)
|
74
110
|
end
|
75
111
|
|
76
112
|
private
|
77
113
|
|
78
|
-
def
|
79
|
-
node
|
114
|
+
def implements_authorization?(node)
|
115
|
+
has_authorized_method?(node) || has_can_can_action?(node) || has_pundit_role?(node)
|
116
|
+
end
|
117
|
+
|
118
|
+
def possible_parent_classes(node)
|
119
|
+
klass = node.child_nodes[1].const_name
|
120
|
+
|
121
|
+
return [] if klass.nil?
|
122
|
+
return [klass] if node.child_nodes[1].absolute?
|
123
|
+
|
124
|
+
parent_module = "#{@parent_modules.join('::')}::"
|
125
|
+
[klass, parent_module + klass]
|
80
126
|
end
|
81
127
|
|
82
|
-
def ignored_class?(
|
83
|
-
cop_config["SafeBaseClasses"].include?(
|
128
|
+
def ignored_class?(klass)
|
129
|
+
cop_config["SafeBaseClasses"].include?(klass)
|
84
130
|
end
|
85
131
|
end
|
86
132
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Tsepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.90'
|
62
62
|
- - "<"
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '2'
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
requirements:
|
69
69
|
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '0.
|
71
|
+
version: '0.90'
|
72
72
|
- - "<"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '2'
|