rubocop-petal 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/Gemfile.lock +2 -2
- data/config/default.yml +19 -6
- data/lib/rubocop/cop/grape/prefer_namespace.rb +47 -0
- data/lib/rubocop/cop/migration/foreign_key_option.rb +46 -0
- data/lib/rubocop/cop/migration/schema_statements_methods.rb +46 -0
- data/lib/rubocop/petal/version.rb +1 -1
- metadata +5 -3
- data/lib/rubocop/cop/migration/use_change_table_bulk.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c488168be9965605cec779d3496901a44c339bfab481d46b6bfd5a766584aa
|
4
|
+
data.tar.gz: 4aa0a079fc001b2f42f8b7920a43353ae217dbc5c0dc6154c020604c3e9928ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcbdc1f68ee6438939a848094d048e44da32aec786622dfcee20579e961c85eaf0aea1d88782eee2d85f8c1cc2304977e497e7be0a67e59e5e62d9d12ad0707b
|
7
|
+
data.tar.gz: c512bcd9560851dfaa04dab391b6fb2e760247af631ab6cc73d5cb411c166c4cfb2bda90f83bb93c32c485357ba3f132ffbaba76806621accea024ae8b845cbb
|
data/CHANGELOG.md
CHANGED
@@ -2,9 +2,17 @@
|
|
2
2
|
|
3
3
|
# main
|
4
4
|
|
5
|
+
# v0.3.0
|
6
|
+
|
7
|
+
* Added cop `Added Migration/ForeignKeyOption` ([#11](https://github.com/petalmd/rubocop-petal/pull/11))
|
8
|
+
* Added cop `Added Grape/PreferNamespace` ([#6](https://github.com/petalmd/rubocop-petal/pull/6))
|
9
|
+
* Added cop `Added Migration/SchemaStatementsMethods` ([#14](https://github.com/petalmd/rubocop-petal/pull/14))
|
10
|
+
* Remove cop `Added Migration/UseChangeTableBulk` ([#15](https://github.com/petalmd/rubocop-petal/pull/15))
|
11
|
+
* Update cop `Grape/PreferNamespace` ([#16](https://github.com/petalmd/rubocop-petal/pull/16))
|
12
|
+
|
5
13
|
# v0.2.1
|
6
14
|
|
7
|
-
Update lock dependencies `rubocop-rails` ([#9](https://github.com/petalmd/rubocop-petal/pull/9))
|
15
|
+
* Update lock dependencies `rubocop-rails` ([#9](https://github.com/petalmd/rubocop-petal/pull/9))
|
8
16
|
|
9
17
|
# v0.2.0
|
10
18
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubocop-petal (0.
|
4
|
+
rubocop-petal (0.3.0)
|
5
5
|
rubocop (>= 1.7.0, < 2.0)
|
6
6
|
rubocop-rails (~> 2.10)
|
7
7
|
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
unicode-display_width (>= 1.4.0, < 3.0)
|
52
52
|
rubocop-ast (1.15.0)
|
53
53
|
parser (>= 3.0.1.1)
|
54
|
-
rubocop-rails (2.
|
54
|
+
rubocop-rails (2.13.2)
|
55
55
|
activesupport (>= 4.2.0)
|
56
56
|
rack (>= 1.1)
|
57
57
|
rubocop (>= 1.7.0, < 2.0)
|
data/config/default.yml
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
Grape/PreferNamespace:
|
2
|
+
Description: 'Prevent usage of namespace aliases.'
|
3
|
+
Enabled: true
|
4
|
+
StyleGuide: https://github.com/ruby-grape/grape#namespace-validation-and-coercion
|
5
|
+
Include:
|
6
|
+
- app/api/**/*
|
7
|
+
|
8
|
+
Migration/ForeignKeyOption:
|
9
|
+
Description: 'Specify the foreign key option to create the constraint.'
|
10
|
+
Enabled: true
|
11
|
+
Include:
|
12
|
+
- db/migrate/**
|
13
|
+
|
14
|
+
Migration/SchemaStatementsConnection:
|
15
|
+
Description: 'Suggest to use SchemaStatements methods already defined in a migration class.'
|
16
|
+
Enabled: true
|
17
|
+
Include:
|
18
|
+
- db/migrate/**
|
19
|
+
|
1
20
|
RSpec/AuthenticatedAs:
|
2
21
|
Description: 'Suggest to use authenticated_as instead of legacy api_key.'
|
3
22
|
Enabled: true
|
@@ -11,12 +30,6 @@ RSpec/CreateListMax:
|
|
11
30
|
Include:
|
12
31
|
- spec/**/*
|
13
32
|
|
14
|
-
Migration/UseChangeTableBulk:
|
15
|
-
Description: 'Enforces the use of option `bulk: true` with `change_table`'
|
16
|
-
Enabled: true
|
17
|
-
Include:
|
18
|
-
- db/migrate/**
|
19
|
-
|
20
33
|
Grape/HelpersIncludeModule:
|
21
34
|
Description: 'Prevent using helpers with block to include module'
|
22
35
|
Enabled: true
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Grape
|
6
|
+
# Prevent usage of `namespace` aliases
|
7
|
+
#
|
8
|
+
# # bad:
|
9
|
+
#
|
10
|
+
# group :my_group do ... end
|
11
|
+
# resource :my_resource do ... end
|
12
|
+
# resources :my_resources do ... end
|
13
|
+
# segment :my_segment do ... end
|
14
|
+
#
|
15
|
+
# # good:
|
16
|
+
#
|
17
|
+
# namespace :my_namespace do ... end
|
18
|
+
#
|
19
|
+
class PreferNamespace < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
22
|
+
MSG = 'Prefer using `namespace` over its aliases.'
|
23
|
+
|
24
|
+
NAMESPACE_ALIASES = %i[resource resources group segment].freeze
|
25
|
+
RESTRICT_ON_SEND = NAMESPACE_ALIASES
|
26
|
+
|
27
|
+
def_node_matcher :using_alias_on_api?, <<~PATTERN
|
28
|
+
(send nil? ...)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
def_node_matcher :namespace_alias, <<~PATTERN
|
32
|
+
(send nil? $_ ...)
|
33
|
+
PATTERN
|
34
|
+
|
35
|
+
def on_send(node)
|
36
|
+
return unless using_alias_on_api? node
|
37
|
+
# Check if use block
|
38
|
+
return unless node.block_node&.children&.last
|
39
|
+
|
40
|
+
add_offense(node) do |corrector|
|
41
|
+
corrector.replace(node, node.source.gsub(/^#{namespace_alias(node)}/, 'namespace'))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Migration
|
6
|
+
# Specify the foreign key option to create the constraint.
|
7
|
+
#
|
8
|
+
# # bad
|
9
|
+
# add_reference(:products, :user)
|
10
|
+
# add_reference(:products, :user, foreign_key: false)
|
11
|
+
# add_belongs_to(:products, :user)
|
12
|
+
# t.references(:user)
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# add_reference(:products, :user, foreign_key: true)
|
16
|
+
# add_reference(:products, :user, foreign_key: { to_table: users })
|
17
|
+
# add_belongs_to(:products, :user, foreign_key: true)
|
18
|
+
# t.references(:user, foreign_key: true)
|
19
|
+
#
|
20
|
+
class ForeignKeyOption < Base
|
21
|
+
MSG = 'Add `foreign_key: true` or `foreign_key: { to_table: :some_table }`'
|
22
|
+
|
23
|
+
ADDING_REFERENCES_METHODS = Set.new(%i[add_reference add_belongs_to references belongs_to]).freeze
|
24
|
+
|
25
|
+
def_node_matcher :adding_reference?, <<~PATTERN
|
26
|
+
(send _ ADDING_REFERENCES_METHODS ...)
|
27
|
+
PATTERN
|
28
|
+
|
29
|
+
def_node_matcher :foreign_key_option?, <<~PATTERN
|
30
|
+
(send _ ADDING_REFERENCES_METHODS ... (hash <(pair (sym :foreign_key) {true hash}) ...>))
|
31
|
+
PATTERN
|
32
|
+
|
33
|
+
def_node_matcher :polymorphic_reference?, <<~PATTERN
|
34
|
+
(... (hash <(pair (sym :polymorphic) true) ... >))
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def on_send(node)
|
38
|
+
return unless adding_reference?(node)
|
39
|
+
return if polymorphic_reference?(node)
|
40
|
+
|
41
|
+
add_offense(node) unless foreign_key_option?(node)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Migration
|
6
|
+
# Use SchemaStatements methods already defined in a migration class.
|
7
|
+
# Using already defined method is sorter and will be log during migration.
|
8
|
+
#
|
9
|
+
# # bad
|
10
|
+
# ActiveRecord::Base.connection.table_exists? 'users'
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# ActiveRecord::Base.connection.column_exists? 'users', 'first_name'
|
14
|
+
#
|
15
|
+
# # bad
|
16
|
+
# ApplicationRecord.connection.execute('SELECT COUNT(*) FROM `users`')
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# table_exists? 'users'
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# column_exists? 'users', 'first_name'
|
23
|
+
#
|
24
|
+
# # good
|
25
|
+
# execute('SELECT COUNT(*) FROM `users`')
|
26
|
+
#
|
27
|
+
class SchemaStatementsMethods < Base
|
28
|
+
extend AutoCorrector
|
29
|
+
|
30
|
+
MSG = 'Use already defined methods. Remove `ActiveRecord::Base.connection`.'
|
31
|
+
|
32
|
+
def_node_matcher :use_connection, <<~PATTERN
|
33
|
+
(:send (... (:const ...) :connection) ...)
|
34
|
+
PATTERN
|
35
|
+
|
36
|
+
def on_send(node)
|
37
|
+
return unless use_connection(node)
|
38
|
+
|
39
|
+
add_offense(node.children[0]) do |corrector|
|
40
|
+
corrector.replace(node, node.source.gsub("#{node.children[0].source}.", ''))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-petal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Francis Bastien
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -67,8 +67,10 @@ files:
|
|
67
67
|
- lib/rubocop-petal.rb
|
68
68
|
- lib/rubocop/cop/chewy/reset_on_type.rb
|
69
69
|
- lib/rubocop/cop/grape/helpers_include_module.rb
|
70
|
+
- lib/rubocop/cop/grape/prefer_namespace.rb
|
70
71
|
- lib/rubocop/cop/grape/unnecessary_namespace.rb
|
71
|
-
- lib/rubocop/cop/migration/
|
72
|
+
- lib/rubocop/cop/migration/foreign_key_option.rb
|
73
|
+
- lib/rubocop/cop/migration/schema_statements_methods.rb
|
72
74
|
- lib/rubocop/cop/petal_cops.rb
|
73
75
|
- lib/rubocop/cop/rails/enum_prefix.rb
|
74
76
|
- lib/rubocop/cop/rails/risky_activerecord_invocation.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module Migration
|
6
|
-
# Use `bulk: true` with `change_table`.
|
7
|
-
# # bad
|
8
|
-
#
|
9
|
-
# change_table :my_table
|
10
|
-
#
|
11
|
-
# # good
|
12
|
-
#
|
13
|
-
# change_table :my_table, bulk: true
|
14
|
-
class UseChangeTableBulk < Base
|
15
|
-
MSG = 'Use `change_table` with `bulk: true`.'
|
16
|
-
RESTRICT_ON_SEND = %i[change_table].freeze
|
17
|
-
|
18
|
-
def_node_matcher :use_bulk?, <<~PATTERN
|
19
|
-
(send nil? :change_table _ (hash <(pair (sym :bulk) true) ...>) ...)
|
20
|
-
PATTERN
|
21
|
-
|
22
|
-
def on_send(node)
|
23
|
-
return if use_bulk?(node)
|
24
|
-
|
25
|
-
add_offense(node)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|