sevencop 0.23.0 → 0.24.2

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
2
  SHA256:
3
- metadata.gz: 0f1682050c56b200417e16dfd5e9f90898838834b29609ef01548b40ab4d4700
4
- data.tar.gz: f44e1c9e38ee48b6719e7df278d7858d9f6dc846c3469a96d11975b5a0d572b9
3
+ metadata.gz: 47139f7d9fb3b1e73416958e9f2f87ccafa4145864e046a1539ffd33018bd603
4
+ data.tar.gz: f9c759a3adbbf7e25b327755c8d5fc0a00d5f6438f79b4df3e33d138ca296fb7
5
5
  SHA512:
6
- metadata.gz: 5c3fe3df83f0a4aef3503cfe39d8d82262c1dfd3bdd5b8745922a2649991d56c208d9a6ccc8a6b2f87757e7cdb1423e33f97869a39f4172984c15b4941797df9
7
- data.tar.gz: e9dc4ceaac5717391ba294a3995572e9cce89f3316104d2e2139af30fc994d60a9e13c0ee2eb864566b27b2e6d04ff634f0b714d1d93c0ce1f4d969294bf2da9
6
+ metadata.gz: e43613b26de17bca55c264a4892a3c20684fcc5c6e285c2407249c6369218d82650bdfb0e8963fd43c19c25a5fe24d885c4074894c8bc28fc105a0ba2dbfbb6e
7
+ data.tar.gz: 4697e89105ef1bcd388a72af2505d3b1d19ea5fa0f1c3867d3fca0313d0c470d38b92eb89fa477e6782fbd83dff3e32300cfd812b67dd06b472fd6747480b10a
data/.rubocop.yml CHANGED
@@ -3,7 +3,7 @@ require:
3
3
  - rubocop-performance
4
4
  - rubocop-rake
5
5
  - rubocop-rspec
6
- - sevencop
6
+ - ./lib/sevencop
7
7
 
8
8
  AllCops:
9
9
  NewCops: enable
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.23.0)
4
+ sevencop (0.24.2)
5
5
  activesupport
6
6
  rubocop
7
7
 
data/README.md CHANGED
@@ -36,6 +36,7 @@ Note that all cops are `Enabled: false` by default.
36
36
  - [Sevencop/MethodDefinitionInIncluded](lib/rubocop/cop/sevencop/method_definition_in_included.rb)
37
37
  - [Sevencop/MethodDefinitionKeywordArgumentOrdered](lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb)
38
38
  - [Sevencop/MethodDefinitionOrdered](lib/rubocop/cop/sevencop/method_definition_ordered.rb)
39
+ - [Sevencop/RailsActionName](lib/rubocop/cop/sevencop/rails_action_name.rb)
39
40
  - [Sevencop/RailsBelongsToOptional](lib/rubocop/cop/sevencop/rails_belongs_to_optional.rb)
40
41
  - [Sevencop/RailsInferredSpecType](lib/rubocop/cop/sevencop/rails_inferred_spec_type.rb)
41
42
  - [Sevencop/RailsOrderField](lib/rubocop/cop/sevencop/rails_order_field.rb)
@@ -44,3 +45,7 @@ Note that all cops are `Enabled: false` by default.
44
45
  - [Sevencop/RequireOrdered](lib/rubocop/cop/sevencop/require_ordered.rb)
45
46
  - [Sevencop/RSpecDescribeHttpEndpoint](lib/rubocop/cop/sevencop/rspec_describe_http_endpoint.rb)
46
47
  - [Sevencop/RSpecExamplesInSameGroup](lib/rubocop/cop/sevencop/rspec_examples_in_same_group.rb)
48
+
49
+ ## Notes
50
+
51
+ All migration related cops are moved to [r7kamura/rubocop-migration](https://github.com/r7kamura/rubocop-migration).
data/config/default.yml CHANGED
@@ -68,6 +68,22 @@ Sevencop/MethodDefinitionKeywordArgumentOrdered:
68
68
  Safe: false
69
69
  VersionAdded: '0.13'
70
70
 
71
+ Sevencop/RailsActionName:
72
+ Description: |
73
+ Use only specific action names.
74
+ Enabled: false
75
+ VersionAdded: '0.24'
76
+ ActionNames:
77
+ - create
78
+ - destroy
79
+ - edit
80
+ - index
81
+ - new
82
+ - show
83
+ - update
84
+ Include:
85
+ - app/controllers/**/*.rb
86
+
71
87
  Sevencop/RailsBelongsToOptional:
72
88
  Description: |
73
89
  Force `belongs_to` with `optional: true` option.
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Use only specific action names.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # class UsersController < ApplicationController
11
+ # def articles
12
+ # end
13
+ # end
14
+ #
15
+ # # good
16
+ # class UserArticlesController < ApplicationController
17
+ # def index
18
+ # end
19
+ # end
20
+ class RailsActionName < Base
21
+ include VisibilityHelp
22
+
23
+ MSG = 'Use only specific action names.'
24
+
25
+ # @param node [RuboCop::AST::DefNode]
26
+ # @return [void]
27
+ def on_def(node)
28
+ return unless bad?(node)
29
+
30
+ add_offense(node.location.name)
31
+ end
32
+
33
+ private
34
+
35
+ # @param node [RuboCop::AST::DefNode]
36
+ # @return [Boolean]
37
+ def action?(node)
38
+ node_visibility(node) == :public
39
+ end
40
+
41
+ # @param node [RuboCop::AST::DefNode]
42
+ # @return [Boolean]
43
+ def bad?(node)
44
+ action?(node) &&
45
+ !configured_action_name?(node)
46
+ end
47
+
48
+ # @param node [RuboCop::AST::DefNode]
49
+ # @return [Boolean]
50
+ def configured_action_name?(node)
51
+ configured_action_names.include?(node.method_name.to_s)
52
+ end
53
+
54
+ # @return [Array<String>]
55
+ def configured_action_names
56
+ cop_config['ActionNames']
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -33,30 +33,43 @@ module RuboCop
33
33
  # @param node [RuboCop::AST::SendNode]
34
34
  # @return [void]
35
35
  def on_send(node)
36
- return unless top_level_describe?(node)
37
- return unless node.first_argument
38
- return if http_endpoint_identifier?(node.first_argument)
36
+ return unless bad?(node)
39
37
 
40
38
  add_offense(node.first_argument)
41
39
  end
42
40
 
43
41
  private
44
42
 
45
- # @!method top_level_describe?(node)
43
+ # @!method describing_http_endpoint_identifier?(node)
46
44
  # @param node [RuboCop::AST::SendNode]
47
45
  # @return [Boolean]
48
- def_node_matcher :top_level_describe?, <<~PATTERN
46
+ def_node_matcher :describing_http_endpoint_identifier?, <<~PATTERN
49
47
  (send
50
- (const nil? :RSpec)
48
+ _
51
49
  :describe
50
+ (str DESCRIPTION_PATTERN)
52
51
  ...
53
52
  )
54
53
  PATTERN
55
54
 
56
- # @param node [RuboCop::AST::Node, nil]
57
- # @return [Boolean]
58
- def http_endpoint_identifier?(node)
59
- node&.str_type? && node.value.match?(DESCRIPTION_PATTERN)
55
+ # @!method describing_at_top_level?(node)
56
+ # @param node [RuboCop::AST::SendNode]
57
+ # @return [Boolean]
58
+ def_node_matcher :describing_at_top_level?, <<~PATTERN
59
+ (send
60
+ (const
61
+ {nil? cbase}
62
+ :RSpec
63
+ )
64
+ :describe
65
+ ...
66
+ )
67
+ PATTERN
68
+
69
+ # @param node [RuboCop::AST::SendNode]
70
+ def bad?(node)
71
+ describing_at_top_level?(node) &&
72
+ !describing_http_endpoint_identifier?(node)
60
73
  end
61
74
  end
62
75
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.23.0'
4
+ VERSION = '0.24.2'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -12,6 +12,7 @@ require_relative 'rubocop/cop/sevencop/method_definition_arguments_multiline'
12
12
  require_relative 'rubocop/cop/sevencop/method_definition_in_included'
13
13
  require_relative 'rubocop/cop/sevencop/method_definition_keyword_argument_ordered'
14
14
  require_relative 'rubocop/cop/sevencop/method_definition_ordered'
15
+ require_relative 'rubocop/cop/sevencop/rails_action_name'
15
16
  require_relative 'rubocop/cop/sevencop/rails_belongs_to_optional'
16
17
  require_relative 'rubocop/cop/sevencop/rails_inferred_spec_type'
17
18
  require_relative 'rubocop/cop/sevencop/rails_order_field'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sevencop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-19 00:00:00.000000000 Z
11
+ date: 2022-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -64,6 +64,7 @@ files:
64
64
  - lib/rubocop/cop/sevencop/method_definition_in_included.rb
65
65
  - lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb
66
66
  - lib/rubocop/cop/sevencop/method_definition_ordered.rb
67
+ - lib/rubocop/cop/sevencop/rails_action_name.rb
67
68
  - lib/rubocop/cop/sevencop/rails_belongs_to_optional.rb
68
69
  - lib/rubocop/cop/sevencop/rails_inferred_spec_type.rb
69
70
  - lib/rubocop/cop/sevencop/rails_order_field.rb