@@ -4,9 +4,6 @@ module RuboCop
44 module Cop
55 # DobadoArchitectureに関するCop
66 module DobadoArchitecture
7- include VisibilityHelp
8- include DefNode
9-
107 # コントローラーのアクション名として、RESTfulなメソッド名
118 # (index, show, new, edit, create, update, destroy)を推奨するためのCop
129 #
@@ -21,18 +18,37 @@ module DobadoArchitecture
2118 # def index; end
2219 # end
2320 class ControllerRecommendRestfulMethods < Base
24- MSG = 'RESTful(index, show, new, edit, create, update, destroy)なメソッド名の使用を推奨します'
21+ include DefNode
22+
23+ MSG = 'RESTful(%<recommended_methods>s)なメソッド名の使用を推奨します'
2524
2625 # @!method action_declarations(node)
2726 def_node_search :action_declarations , <<~PATTERN
2827 (def ...)
2928 PATTERN
3029
3130 def on_class ( node )
32- node = action_declarations ( node ) . first
33- return if %i[ index show new edit create update destroy ] . include? ( node . method_name )
31+ non_restful_methods ( node ) . each do |action |
32+ register_offence ( action )
33+ end
34+ end
35+
36+ private
37+
38+ def non_restful_methods ( node )
39+ action_declarations ( node ) . filter do |action |
40+ next if non_public? ( action )
41+
42+ !recommended_methods . include? ( action . method_name )
43+ end
44+ end
45+
46+ def register_offence ( node )
47+ add_offense ( node . loc . name , message : format ( MSG , recommended_methods : recommended_methods . join ( ', ' ) ) )
48+ end
3449
35- add_offense ( node . loc . name )
50+ def recommended_methods
51+ cop_config [ 'RecommendedMethods' ] . map ( &:to_sym )
3652 end
3753 end
3854 end
0 commit comments