rails_best_practices 1.19.1 → 1.19.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Guardfile +1 -1
- data/README.md +1 -0
- data/Rakefile +2 -2
- data/bin/rails_best_practices +2 -1
- data/lib/rails_best_practices.rb +2 -1
- data/lib/rails_best_practices/analyzer.rb +13 -12
- data/lib/rails_best_practices/colorize.rb +2 -0
- data/lib/rails_best_practices/command.rb +6 -5
- data/lib/rails_best_practices/core.rb +2 -1
- data/lib/rails_best_practices/core/check.rb +19 -17
- data/lib/rails_best_practices/core/checks_loader.rb +3 -2
- data/lib/rails_best_practices/core/configs.rb +2 -1
- data/lib/rails_best_practices/core/controllers.rb +4 -1
- data/lib/rails_best_practices/core/error.rb +3 -2
- data/lib/rails_best_practices/core/gems.rb +4 -3
- data/lib/rails_best_practices/core/helpers.rb +4 -1
- data/lib/rails_best_practices/core/klasses.rb +3 -2
- data/lib/rails_best_practices/core/mailers.rb +2 -1
- data/lib/rails_best_practices/core/methods.rb +9 -10
- data/lib/rails_best_practices/core/model_associations.rb +6 -5
- data/lib/rails_best_practices/core/model_attributes.rb +2 -1
- data/lib/rails_best_practices/core/models.rb +2 -1
- data/lib/rails_best_practices/core/modules.rb +2 -1
- data/lib/rails_best_practices/core/routes.rb +2 -1
- data/lib/rails_best_practices/core/runner.rb +7 -6
- data/lib/rails_best_practices/core_ext/erubis.rb +4 -5
- data/lib/rails_best_practices/lexicals.rb +2 -1
- data/lib/rails_best_practices/lexicals/long_line_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -1
- data/lib/rails_best_practices/prepares.rb +2 -1
- data/lib/rails_best_practices/prepares/config_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/controller_prepare.rb +9 -8
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/helper_prepare.rb +4 -3
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
- data/lib/rails_best_practices/prepares/route_prepare.rb +8 -7
- data/lib/rails_best_practices/prepares/schema_prepare.rb +3 -2
- data/lib/rails_best_practices/reviews.rb +2 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +7 -4
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +8 -7
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +4 -3
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +5 -4
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -1
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +2 -1
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +3 -2
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -1
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +5 -4
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -2
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +11 -10
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +6 -5
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +2 -2
- data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -1
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +8 -8
- data/lib/rails_best_practices/reviews/review.rb +4 -3
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +5 -4
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +5 -5
- data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
- data/lib/rails_best_practices/version.rb +3 -2
- data/rails_best_practices.gemspec +11 -10
- data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +3 -2
- data/spec/rails_best_practices/analyzer_spec.rb +6 -8
- data/spec/rails_best_practices/core/check_spec.rb +2 -0
- data/spec/rails_best_practices/core/checks_loader_spec.rb +2 -0
- data/spec/rails_best_practices/core/configs_spec.rb +2 -0
- data/spec/rails_best_practices/core/controllers_spec.rb +2 -0
- data/spec/rails_best_practices/core/error_spec.rb +2 -0
- data/spec/rails_best_practices/core/except_methods_spec.rb +2 -0
- data/spec/rails_best_practices/core/gems_spec.rb +2 -0
- data/spec/rails_best_practices/core/helpers_spec.rb +2 -0
- data/spec/rails_best_practices/core/klasses_spec.rb +2 -0
- data/spec/rails_best_practices/core/mailers_spec.rb +2 -0
- data/spec/rails_best_practices/core/methods_spec.rb +6 -4
- data/spec/rails_best_practices/core/model_associations_spec.rb +4 -2
- data/spec/rails_best_practices/core/model_attributes_spec.rb +2 -0
- data/spec/rails_best_practices/core/models_spec.rb +2 -0
- data/spec/rails_best_practices/core/modules_spec.rb +2 -0
- data/spec/rails_best_practices/core/routes_spec.rb +4 -2
- data/spec/rails_best_practices/core/runner_spec.rb +2 -0
- data/spec/rails_best_practices/core_ext/erubis_spec.rb +3 -1
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +8 -7
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +8 -6
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +9 -7
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +23 -21
- data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +7 -5
- data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +4 -2
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +56 -54
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +39 -37
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +12 -10
- data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +20 -18
- data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +11 -9
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +21 -19
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -4
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +33 -31
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +65 -63
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +24 -22
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- metadata +26 -26
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
# Method container.
|
@@ -14,7 +15,7 @@ module RailsBestPractices
|
|
14
15
|
# @param [String] method name
|
15
16
|
# @param [Hash] method meta, file and line, {"file" => "app/models/post.rb", "line_number" => 5}
|
16
17
|
# @param [String] access control, public, protected or private
|
17
|
-
def add_method(class_name, method_name, meta={}, access_control='public')
|
18
|
+
def add_method(class_name, method_name, meta = {}, access_control = 'public')
|
18
19
|
return if class_name == ''
|
19
20
|
return if has_method?(class_name, method_name)
|
20
21
|
methods(class_name) << Method.new(class_name, method_name, access_control, meta)
|
@@ -28,7 +29,7 @@ module RailsBestPractices
|
|
28
29
|
# @param [String] class name
|
29
30
|
# @param [String] access control
|
30
31
|
# @return [Array] all methods of a class for such access control, if access control is nil, return all public/protected/private methods
|
31
|
-
def get_methods(class_name, access_control=nil)
|
32
|
+
def get_methods(class_name, access_control = nil)
|
32
33
|
if access_control
|
33
34
|
methods(class_name).select { |method| method.access_control == access_control }
|
34
35
|
else
|
@@ -42,7 +43,7 @@ module RailsBestPractices
|
|
42
43
|
# @param [String] method name
|
43
44
|
# @param [String] access control
|
44
45
|
# @return [Boolean] has a method or not
|
45
|
-
def has_method?(class_name, method_name, access_control=nil)
|
46
|
+
def has_method?(class_name, method_name, access_control = nil)
|
46
47
|
if access_control
|
47
48
|
!!methods(class_name).find { |method| method.method_name == method_name && method.access_control == access_control }
|
48
49
|
else
|
@@ -109,7 +110,7 @@ module RailsBestPractices
|
|
109
110
|
# @param [String] method name
|
110
111
|
# @param [String] access control
|
111
112
|
# @return [Method] Method object
|
112
|
-
def get_method(class_name, method_name, access_control=nil)
|
113
|
+
def get_method(class_name, method_name, access_control = nil)
|
113
114
|
if access_control
|
114
115
|
methods(class_name).find { |method| method.method_name == method_name && method.access_control == access_control }
|
115
116
|
else
|
@@ -121,12 +122,12 @@ module RailsBestPractices
|
|
121
122
|
#
|
122
123
|
# @param [String] access control
|
123
124
|
# @return [Array] array of Method
|
124
|
-
def get_all_unused_methods(access_control=nil)
|
125
|
-
@methods.inject([]) { |unused_methods, (
|
125
|
+
def get_all_unused_methods(access_control = nil)
|
126
|
+
@methods.inject([]) { |unused_methods, (_class_name, methods)|
|
126
127
|
unused_methods += if access_control
|
127
128
|
methods.select { |method| method.access_control == access_control && !method.used }
|
128
129
|
else
|
129
|
-
methods.
|
130
|
+
methods.reject { |method| method.used }
|
130
131
|
end
|
131
132
|
}.reject { |method| method.access_control == 'public' && @possible_methods[method.method_name] }
|
132
133
|
end
|
@@ -164,8 +165,6 @@ module RailsBestPractices
|
|
164
165
|
def publicize
|
165
166
|
@access_control = 'public'
|
166
167
|
end
|
167
|
-
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
171
|
-
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
# Model associations container.
|
@@ -12,9 +13,9 @@ module RailsBestPractices
|
|
12
13
|
# @param [String] association name
|
13
14
|
# @param [String] association meta, has_many, has_one, belongs_to and has_and_belongs_to_many
|
14
15
|
# @param [String] association class name
|
15
|
-
def add_association(model_name, association_name, association_meta, association_class=nil)
|
16
|
+
def add_association(model_name, association_name, association_meta, association_class = nil)
|
16
17
|
@associations[model_name] ||= {}
|
17
|
-
@associations[model_name][association_name] = {'meta' => association_meta, 'class_name' => association_class || association_name.classify}
|
18
|
+
@associations[model_name][association_name] = { 'meta' => association_meta, 'class_name' => association_class || association_name.classify }
|
18
19
|
end
|
19
20
|
|
20
21
|
# Get a model association.
|
@@ -48,8 +49,8 @@ module RailsBestPractices
|
|
48
49
|
# @param [String] association_name
|
49
50
|
# @return [String] association's class name
|
50
51
|
def get_association_class_name(table_name, association_name)
|
51
|
-
associations = @associations.select { |model,
|
52
|
-
association_meta = associations.select { |name,
|
52
|
+
associations = @associations.select { |model, _model_associations| model.gsub('::', '').tableize == table_name }.values.first and
|
53
|
+
association_meta = associations.select { |name, _meta| name == association_name }.values.first and
|
53
54
|
association_meta['class_name']
|
54
55
|
end
|
55
56
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'yaml'
|
3
4
|
require 'active_support/core_ext/object/blank'
|
4
5
|
begin
|
@@ -45,13 +46,13 @@ module RailsBestPractices
|
|
45
46
|
# @return [String] the config path
|
46
47
|
def self.config_path
|
47
48
|
custom_config = @config_path || File.join(Runner.base_path, 'config/rails_best_practices.yml')
|
48
|
-
File.
|
49
|
+
File.exist?(custom_config) ? custom_config : RailsBestPractices::Analyzer::DEFAULT_CONFIG
|
49
50
|
end
|
50
51
|
|
51
52
|
# initialize the runner.
|
52
53
|
#
|
53
54
|
# @param [Hash] options pass the prepares and reviews.
|
54
|
-
def initialize(options={})
|
55
|
+
def initialize(options = {})
|
55
56
|
@config = self.class.config_path
|
56
57
|
|
57
58
|
lexicals = Array(options[:lexicals])
|
@@ -66,7 +67,7 @@ module RailsBestPractices
|
|
66
67
|
|
67
68
|
@lexical_checker ||= CodeAnalyzer::CheckingVisitor::Plain.new(checkers: @lexicals)
|
68
69
|
@plain_prepare_checker ||= CodeAnalyzer::CheckingVisitor::Plain.new(checkers: @prepares.select { |checker| checker.is_a? Prepares::GemfilePrepare })
|
69
|
-
@default_prepare_checker ||= CodeAnalyzer::CheckingVisitor::Default.new(checkers: @prepares.
|
70
|
+
@default_prepare_checker ||= CodeAnalyzer::CheckingVisitor::Default.new(checkers: @prepares.reject { |checker| checker.is_a? Prepares::GemfilePrepare })
|
70
71
|
@review_checker ||= CodeAnalyzer::CheckingVisitor::Default.new(checkers: @reviews)
|
71
72
|
end
|
72
73
|
|
@@ -156,7 +157,7 @@ module RailsBestPractices
|
|
156
157
|
|
157
158
|
# load all plugin reviews.
|
158
159
|
def load_plugin_reviews
|
159
|
-
|
160
|
+
|
160
161
|
plugins = File.join(Runner.base_path, 'lib', 'rails_best_practices', 'plugins', 'reviews')
|
161
162
|
if File.directory?(plugins)
|
162
163
|
Dir[File.expand_path(File.join(plugins, '*.rb'))].each do |review|
|
@@ -168,7 +169,7 @@ module RailsBestPractices
|
|
168
169
|
end
|
169
170
|
end
|
170
171
|
end
|
171
|
-
|
172
|
+
|
172
173
|
end
|
173
174
|
end
|
174
175
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'erubis'
|
3
4
|
|
4
5
|
module Erubis
|
5
6
|
class OnlyRuby < Eruby
|
6
|
-
def add_preamble(src)
|
7
|
-
end
|
7
|
+
def add_preamble(src); end
|
8
8
|
|
9
9
|
def add_text(src, text)
|
10
10
|
src << text.gsub(/[^\s;]/, '')
|
@@ -30,7 +30,6 @@ module Erubis
|
|
30
30
|
src << ';'
|
31
31
|
end
|
32
32
|
|
33
|
-
def add_postamble(src)
|
34
|
-
end
|
33
|
+
def add_postamble(src); end
|
35
34
|
end
|
36
35
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Prepares
|
4
5
|
# Remember all configs
|
@@ -12,7 +13,7 @@ module RailsBestPractices
|
|
12
13
|
|
13
14
|
# check assignments to config
|
14
15
|
add_callback :start_assign do |node|
|
15
|
-
if node.left_value.grep_node(sexp_type: [
|
16
|
+
if node.left_value.grep_node(sexp_type: %i[vcall var_ref], to_s: 'config').present?
|
16
17
|
@configs[node.left_value.to_s] = node.right_value.to_s
|
17
18
|
end
|
18
19
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Prepares
|
4
5
|
# Remember controllers and controller methods
|
@@ -10,7 +11,7 @@ module RailsBestPractices
|
|
10
11
|
interesting_nodes :class, :var_ref, :vcall, :command, :def
|
11
12
|
interesting_files CONTROLLER_FILES
|
12
13
|
|
13
|
-
DEFAULT_ACTIONS = %w
|
14
|
+
DEFAULT_ACTIONS = %w[index show new create edit update destroy].freeze
|
14
15
|
|
15
16
|
def initialize
|
16
17
|
@controllers = Prepares.controllers
|
@@ -21,7 +22,7 @@ module RailsBestPractices
|
|
21
22
|
|
22
23
|
# check class node to remember the class name.
|
23
24
|
# also check if the controller is inherit from InheritedResources::Base.
|
24
|
-
add_callback :start_class do |
|
25
|
+
add_callback :start_class do |_node|
|
25
26
|
@controllers << @klass
|
26
27
|
if @inherited_resources
|
27
28
|
@actions = DEFAULT_ACTIONS
|
@@ -32,20 +33,20 @@ module RailsBestPractices
|
|
32
33
|
add_callback :end_class do |node|
|
33
34
|
if @inherited_resources && 'ApplicationController' != current_class_name
|
34
35
|
@actions.each do |action|
|
35
|
-
@methods.add_method(current_class_name, action,
|
36
|
+
@methods.add_method(current_class_name, action, 'file' => node.file, 'line_number' => node.line_number)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
41
|
# check if there is a DSL call inherit_resources.
|
41
|
-
add_callback :start_var_ref do |
|
42
|
+
add_callback :start_var_ref do |_node|
|
42
43
|
if @inherited_resources
|
43
44
|
@actions = DEFAULT_ACTIONS
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
48
|
# check if there is a DSL call inherit_resources.
|
48
|
-
add_callback :start_vcall do |
|
49
|
+
add_callback :start_vcall do |_node|
|
49
50
|
if @inherited_resources
|
50
51
|
@actions = DEFAULT_ACTIONS
|
51
52
|
end
|
@@ -82,14 +83,14 @@ module RailsBestPractices
|
|
82
83
|
# }
|
83
84
|
add_callback :start_def do |node|
|
84
85
|
method_name = node.method_name.to_s
|
85
|
-
@methods.add_method(current_class_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
86
|
+
@methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
86
87
|
end
|
87
88
|
|
88
89
|
# ask Reviews::RemoveUnusedMoethodsInHelperReview to check the controllers who include helpers.
|
89
90
|
add_callback :after_check do
|
90
91
|
descendants = @helpers.map(&:descendants).flatten
|
91
92
|
if descendants.present?
|
92
|
-
Reviews::RemoveUnusedMethodsInHelpersReview.interesting_files *descendants.map { |descendant|
|
93
|
+
Reviews::RemoveUnusedMethodsInHelpersReview.interesting_files *descendants.map { |descendant| /#{descendant.underscore}/ }
|
93
94
|
end
|
94
95
|
end
|
95
96
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Prepares
|
4
5
|
# Remember helper methods.
|
@@ -15,7 +16,7 @@ module RailsBestPractices
|
|
15
16
|
end
|
16
17
|
|
17
18
|
# check module node to remember the module name.
|
18
|
-
add_callback :start_module do |
|
19
|
+
add_callback :start_module do |_node|
|
19
20
|
@helpers << Core::Mod.new(current_module_name, [])
|
20
21
|
end
|
21
22
|
|
@@ -31,7 +32,7 @@ module RailsBestPractices
|
|
31
32
|
add_callback :start_def do |node|
|
32
33
|
if node.file =~ HELPER_FILES
|
33
34
|
method_name = node.method_name.to_s
|
34
|
-
@methods.add_method(current_module_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
35
|
+
@methods.add_method(current_module_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Prepares
|
4
5
|
# Remember the mailer names.
|
@@ -16,7 +17,7 @@ module RailsBestPractices
|
|
16
17
|
#
|
17
18
|
# if it is a subclass of ActionMailer::Base,
|
18
19
|
# then remember its class name.
|
19
|
-
add_callback :start_class do |
|
20
|
+
add_callback :start_class do |_node|
|
20
21
|
if 'ActionMailer::Base' == current_extend_class_name
|
21
22
|
@mailers << @klass
|
22
23
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Prepares
|
4
5
|
# Remember models and model associations.
|
@@ -9,7 +10,7 @@ module RailsBestPractices
|
|
9
10
|
interesting_nodes :class, :def, :defs, :command, :alias
|
10
11
|
interesting_files MODEL_FILES
|
11
12
|
|
12
|
-
ASSOCIATION_METHODS = %w
|
13
|
+
ASSOCIATION_METHODS = %w[belongs_to has_one has_many has_and_belongs_to_many embeds_many embeds_one embedded_in many one].freeze
|
13
14
|
|
14
15
|
def initialize
|
15
16
|
@models = Prepares.models
|
@@ -19,7 +20,7 @@ module RailsBestPractices
|
|
19
20
|
end
|
20
21
|
|
21
22
|
# remember the class name.
|
22
|
-
add_callback :start_class do |
|
23
|
+
add_callback :start_class do |_node|
|
23
24
|
if 'ActionMailer::Base' != current_extend_class_name
|
24
25
|
@models << @klass
|
25
26
|
end
|
@@ -42,7 +43,7 @@ module RailsBestPractices
|
|
42
43
|
'ActionMailer::Base' != current_extend_class_name &&
|
43
44
|
(classable_modules.empty? || klasses.any?)
|
44
45
|
method_name = node.method_name.to_s
|
45
|
-
@methods.add_method(current_class_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
46
|
+
@methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -61,7 +62,7 @@ module RailsBestPractices
|
|
61
62
|
add_callback :start_defs do |node|
|
62
63
|
if @klass && 'ActionMailer::Base' != current_extend_class_name
|
63
64
|
method_name = node.method_name.to_s
|
64
|
-
@methods.add_method(current_class_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
65
|
+
@methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
@@ -78,13 +79,13 @@ module RailsBestPractices
|
|
78
79
|
# }
|
79
80
|
add_callback :start_command do |node|
|
80
81
|
case node.message.to_s
|
81
|
-
when
|
82
|
+
when 'named_scope', 'scope', 'alias_method'
|
82
83
|
method_name = node.arguments.all.first.to_s
|
83
|
-
@methods.add_method(current_class_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
84
|
+
@methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
84
85
|
when 'alias_method_chain'
|
85
86
|
method, feature = *node.arguments.all.map(&:to_s)
|
86
|
-
@methods.add_method(current_class_name, "#{method}_with_#{feature}", {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
87
|
-
@methods.add_method(current_class_name,
|
87
|
+
@methods.add_method(current_class_name, "#{method}_with_#{feature}", { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
88
|
+
@methods.add_method(current_class_name, method.to_s, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
88
89
|
when 'field'
|
89
90
|
arguments = node.arguments.all
|
90
91
|
attribute_name = arguments.first.to_s
|
@@ -95,20 +96,19 @@ module RailsBestPractices
|
|
95
96
|
@model_attributes.add_attribute(current_class_name, attribute_name, attribute_type)
|
96
97
|
when *ASSOCIATION_METHODS
|
97
98
|
remember_association(node)
|
98
|
-
else
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
102
|
# check alias node to remembr the alias methods.
|
103
103
|
add_callback :start_alias do |node|
|
104
104
|
method_name = node.new_method.to_s
|
105
|
-
@methods.add_method(current_class_name, method_name, {'file' => node.file, 'line_number' => node.line_number}, current_access_control)
|
105
|
+
@methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
|
106
106
|
end
|
107
107
|
|
108
108
|
# after prepare process, fix incorrect associations' class_name.
|
109
109
|
add_callback :after_check do
|
110
110
|
@model_associations.each do |model, model_associations|
|
111
|
-
model_associations.each do |
|
111
|
+
model_associations.each do |_association_name, association_meta|
|
112
112
|
unless @models.include?(association_meta['class_name'])
|
113
113
|
if @models.include?("#{model}::#{association_meta['class_name']}")
|
114
114
|
association_meta['class_name'] = "#{model}::#{association_meta['class_name']}"
|