rails_best_practices 1.19.1 → 1.19.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Guardfile +1 -1
  4. data/README.md +1 -0
  5. data/Rakefile +2 -2
  6. data/bin/rails_best_practices +2 -1
  7. data/lib/rails_best_practices.rb +2 -1
  8. data/lib/rails_best_practices/analyzer.rb +13 -12
  9. data/lib/rails_best_practices/colorize.rb +2 -0
  10. data/lib/rails_best_practices/command.rb +6 -5
  11. data/lib/rails_best_practices/core.rb +2 -1
  12. data/lib/rails_best_practices/core/check.rb +19 -17
  13. data/lib/rails_best_practices/core/checks_loader.rb +3 -2
  14. data/lib/rails_best_practices/core/configs.rb +2 -1
  15. data/lib/rails_best_practices/core/controllers.rb +4 -1
  16. data/lib/rails_best_practices/core/error.rb +3 -2
  17. data/lib/rails_best_practices/core/gems.rb +4 -3
  18. data/lib/rails_best_practices/core/helpers.rb +4 -1
  19. data/lib/rails_best_practices/core/klasses.rb +3 -2
  20. data/lib/rails_best_practices/core/mailers.rb +2 -1
  21. data/lib/rails_best_practices/core/methods.rb +9 -10
  22. data/lib/rails_best_practices/core/model_associations.rb +6 -5
  23. data/lib/rails_best_practices/core/model_attributes.rb +2 -1
  24. data/lib/rails_best_practices/core/models.rb +2 -1
  25. data/lib/rails_best_practices/core/modules.rb +2 -1
  26. data/lib/rails_best_practices/core/routes.rb +2 -1
  27. data/lib/rails_best_practices/core/runner.rb +7 -6
  28. data/lib/rails_best_practices/core_ext/erubis.rb +4 -5
  29. data/lib/rails_best_practices/lexicals.rb +2 -1
  30. data/lib/rails_best_practices/lexicals/long_line_check.rb +2 -1
  31. data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -1
  32. data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -1
  33. data/lib/rails_best_practices/prepares.rb +2 -1
  34. data/lib/rails_best_practices/prepares/config_prepare.rb +3 -2
  35. data/lib/rails_best_practices/prepares/controller_prepare.rb +9 -8
  36. data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -1
  37. data/lib/rails_best_practices/prepares/helper_prepare.rb +4 -3
  38. data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -1
  39. data/lib/rails_best_practices/prepares/mailer_prepare.rb +3 -2
  40. data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
  41. data/lib/rails_best_practices/prepares/route_prepare.rb +8 -7
  42. data/lib/rails_best_practices/prepares/schema_prepare.rb +3 -2
  43. data/lib/rails_best_practices/reviews.rb +2 -1
  44. data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +7 -4
  45. data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +8 -7
  46. data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +4 -3
  47. data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +5 -4
  48. data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -1
  49. data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -1
  50. data/lib/rails_best_practices/reviews/hash_syntax_review.rb +2 -1
  51. data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +3 -2
  52. data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +3 -2
  53. data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +3 -2
  54. data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -2
  55. data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -1
  56. data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +3 -2
  57. data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +3 -2
  58. data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +3 -2
  59. data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +5 -4
  60. data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -1
  61. data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -1
  62. data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -1
  63. data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -2
  64. data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +4 -3
  65. data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -1
  66. data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +11 -10
  67. data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +4 -3
  68. data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +6 -5
  69. data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +2 -2
  70. data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -1
  71. data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +8 -8
  72. data/lib/rails_best_practices/reviews/review.rb +4 -3
  73. data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -1
  74. data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -2
  75. data/lib/rails_best_practices/reviews/use_before_filter_review.rb +5 -4
  76. data/lib/rails_best_practices/reviews/use_model_association_review.rb +2 -2
  77. data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +5 -5
  78. data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -1
  79. data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +2 -1
  80. data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +4 -3
  81. data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +4 -3
  82. data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -1
  83. data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
  84. data/lib/rails_best_practices/version.rb +3 -2
  85. data/rails_best_practices.gemspec +11 -10
  86. data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +3 -2
  87. data/spec/rails_best_practices/analyzer_spec.rb +6 -8
  88. data/spec/rails_best_practices/core/check_spec.rb +2 -0
  89. data/spec/rails_best_practices/core/checks_loader_spec.rb +2 -0
  90. data/spec/rails_best_practices/core/configs_spec.rb +2 -0
  91. data/spec/rails_best_practices/core/controllers_spec.rb +2 -0
  92. data/spec/rails_best_practices/core/error_spec.rb +2 -0
  93. data/spec/rails_best_practices/core/except_methods_spec.rb +2 -0
  94. data/spec/rails_best_practices/core/gems_spec.rb +2 -0
  95. data/spec/rails_best_practices/core/helpers_spec.rb +2 -0
  96. data/spec/rails_best_practices/core/klasses_spec.rb +2 -0
  97. data/spec/rails_best_practices/core/mailers_spec.rb +2 -0
  98. data/spec/rails_best_practices/core/methods_spec.rb +6 -4
  99. data/spec/rails_best_practices/core/model_associations_spec.rb +4 -2
  100. data/spec/rails_best_practices/core/model_attributes_spec.rb +2 -0
  101. data/spec/rails_best_practices/core/models_spec.rb +2 -0
  102. data/spec/rails_best_practices/core/modules_spec.rb +2 -0
  103. data/spec/rails_best_practices/core/routes_spec.rb +4 -2
  104. data/spec/rails_best_practices/core/runner_spec.rb +2 -0
  105. data/spec/rails_best_practices/core_ext/erubis_spec.rb +3 -1
  106. data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +8 -7
  107. data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +8 -6
  108. data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +9 -7
  109. data/spec/rails_best_practices/prepares/config_prepare_spec.rb +3 -1
  110. data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +23 -21
  111. data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +3 -1
  112. data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +7 -5
  113. data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +4 -2
  114. data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +3 -1
  115. data/spec/rails_best_practices/prepares/model_prepare_spec.rb +56 -54
  116. data/spec/rails_best_practices/prepares/route_prepare_spec.rb +39 -37
  117. data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +3 -1
  118. data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +2 -0
  119. data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +7 -5
  120. data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +12 -10
  121. data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +20 -18
  122. data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +2 -0
  123. data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +2 -0
  124. data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -7
  125. data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +2 -0
  126. data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +2 -0
  127. data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +2 -0
  128. data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +2 -0
  129. data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +2 -0
  130. data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +11 -9
  131. data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +2 -0
  132. data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -0
  133. data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +2 -0
  134. data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -7
  135. data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +2 -0
  136. data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -5
  137. data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +2 -0
  138. data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +21 -19
  139. data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -4
  140. data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +33 -31
  141. data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +13 -11
  142. data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +65 -63
  143. data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +2 -0
  144. data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +2 -0
  145. data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +24 -22
  146. data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -7
  147. data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -11
  148. data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -1
  149. data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +2 -0
  150. data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +2 -0
  151. data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +7 -5
  152. data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +2 -0
  153. data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -1
  154. data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +9 -7
  155. data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +2 -0
  156. data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +2 -0
  157. data/spec/spec_helper.rb +2 -0
  158. metadata +26 -26
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a helper file to make sure it is not an empty moduel.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Find out unused methods in controllers.
@@ -20,9 +21,9 @@ module RailsBestPractices
20
21
  interesting_nodes :class, :command, :method_add_arg, :assign
21
22
  interesting_files CONTROLLER_FILES, VIEW_FILES, HELPER_FILES
22
23
 
23
- INHERITED_RESOURCES_METHODS = %w(resource collection begin_of_association_chain build_resource)
24
+ INHERITED_RESOURCES_METHODS = %w[resource collection begin_of_association_chain build_resource].freeze
24
25
 
25
- def initialize(options={})
26
+ def initialize(options = {})
26
27
  super
27
28
  @controller_methods = Prepares.controller_methods
28
29
  @routes = Prepares.routes
@@ -30,7 +31,7 @@ module RailsBestPractices
30
31
  end
31
32
 
32
33
  # mark custom inherited_resources methods as used.
33
- add_callback :end_class do |node|
34
+ add_callback :end_class do |_node|
34
35
  if @inherited_resources
35
36
  INHERITED_RESOURCES_METHODS.each do |method|
36
37
  call_method(method)
@@ -40,14 +41,14 @@ module RailsBestPractices
40
41
 
41
42
  # skip render and around_filter nodes for start_command callbacks.
42
43
  def skip_command_callback_nodes
43
- %w(render_cell render around_filter)
44
+ %w[render_cell render around_filter]
44
45
  end
45
46
 
46
47
  # mark corresponding action as used for cells' render and render_call.
47
48
  add_callback :start_command, :start_method_add_arg do |node|
48
49
  case node.message.to_s
49
50
  when 'render_cell'
50
- controller_name, action_name, _ = *node.arguments.all.map(&:to_s)
51
+ controller_name, action_name, = *node.arguments.all.map(&:to_s)
51
52
  call_method(action_name, "#{controller_name}_cell".classify)
52
53
  when 'render'
53
54
  first_argument = node.arguments.all.first
@@ -93,7 +94,7 @@ module RailsBestPractices
93
94
  end
94
95
  end
95
96
  @controller_methods.get_all_unused_methods.each do |method|
96
- if !excepted?(method)
97
+ unless excepted?(method)
97
98
  add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.line_number
98
99
  end
99
100
  end
@@ -106,11 +107,11 @@ module RailsBestPractices
106
107
  end
107
108
 
108
109
  def internal_except_methods
109
- %w(rescue_action default_url_options).map { |method_name| "*\##{method_name}" } +
110
- %w(Devise::OmniauthCallbacksController).map { |controller_name| "#{controller_name}#*" }
110
+ %w[rescue_action default_url_options].map { |method_name| "*\##{method_name}" } +
111
+ %w[Devise::OmniauthCallbacksController].map { |controller_name| "#{controller_name}#*" }
111
112
  end
112
113
 
113
- def mark_publicize(method_name, class_name=current_class_name)
114
+ def mark_publicize(method_name, class_name = current_class_name)
114
115
  @controller_methods.mark_publicize(class_name, method_name)
115
116
  @controller_methods.mark_parent_class_methods_publicize(class_name, method_name)
116
117
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Find out unused methods in helpers.
@@ -16,7 +17,7 @@ module RailsBestPractices
16
17
 
17
18
  interesting_files HELPER_FILES, VIEW_FILES, CONTROLLER_FILES
18
19
 
19
- def initialize(options={})
20
+ def initialize(options = {})
20
21
  super
21
22
  @helper_methods = Prepares.helper_methods
22
23
  self.class.interesting_files Prepares.helpers.map(&:descendants)
@@ -25,7 +26,7 @@ module RailsBestPractices
25
26
  # get all unused methods at the end of review process
26
27
  add_callback :after_check do
27
28
  @helper_methods.get_all_unused_methods.each do |method|
28
- if !excepted?(method)
29
+ unless excepted?(method)
29
30
  add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.line_number
30
31
  end
31
32
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Find out unused methods in models.
@@ -17,14 +18,14 @@ module RailsBestPractices
17
18
  interesting_nodes :command, :command_call, :method_add_arg
18
19
  interesting_files ALL_FILES
19
20
 
20
- def initialize(options={})
21
+ def initialize(options = {})
21
22
  super
22
23
  @model_methods = Prepares.model_methods
23
24
  end
24
25
 
25
26
  # skip scope and validate nodes for start_command callbacks.
26
27
  def skip_command_callback_nodes
27
- %w(named_scope scope validate validate_on_create validate_on_update)
28
+ %w[named_scope scope validate validate_on_create validate_on_update]
28
29
  end
29
30
 
30
31
  # mark validate methods as used.
@@ -92,7 +93,7 @@ module RailsBestPractices
92
93
  end
93
94
 
94
95
  def internal_except_methods
95
- %w(
96
+ %w[
96
97
  initialize
97
98
  validate validate_each validate_on_create validate_on_update
98
99
  human_attribute_name assign_attributes attributes attribute
@@ -101,7 +102,7 @@ module RailsBestPractices
101
102
  after_update after_destroy after_find after_initialize
102
103
  method_missing
103
104
  table_name module_prefix
104
- ).map { |method_name| "*\##{method_name}" }
105
+ ].map { |method_name| "*\##{method_name}" }
105
106
  end
106
107
  end
107
108
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a controller file to make sure that complex model creation should not exist in
@@ -41,7 +42,6 @@ module RailsBestPractices
41
42
  end
42
43
  when :call
43
44
  check_variable_save(child_node)
44
- else
45
45
  end
46
46
  end
47
47
  reset_variable_use_count
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a partail view file to make sure there is no instance variable.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a route file to make sure all auto-generated routes have corresponding actions in controller.
@@ -19,9 +20,9 @@ module RailsBestPractices
19
20
 
20
21
  def resource_methods
21
22
  if Prepares.configs['config.api_only']
22
- %w(show create update destroy)
23
+ %w[show create update destroy]
23
24
  else
24
- %w(show new create edit update destroy)
25
+ %w[show new create edit update destroy]
25
26
  end
26
27
  end
27
28
 
@@ -29,7 +30,7 @@ module RailsBestPractices
29
30
  resource_methods + ['index']
30
31
  end
31
32
 
32
- def initialize(options={})
33
+ def initialize(options = {})
33
34
  super(options)
34
35
  @namespaces = []
35
36
  @resource_controllers = []
@@ -69,7 +70,6 @@ module RailsBestPractices
69
70
  if check_method_add_block?(node) && (mod = module_option(node))
70
71
  @namespaces << mod
71
72
  end
72
- else
73
73
  end
74
74
  end
75
75
 
@@ -109,7 +109,7 @@ module RailsBestPractices
109
109
  def controller_name(node)
110
110
  if option_with_hash(node)
111
111
  option_node = node.arguments.all[1]
112
- if hash_key_exist?(option_node,'controller')
112
+ if hash_key_exist?(option_node, 'controller')
113
113
  name = option_node.hash_value('controller').to_s
114
114
  else
115
115
  name = node.arguments.all.first.to_s.gsub('::', '').tableize
@@ -122,7 +122,7 @@ module RailsBestPractices
122
122
 
123
123
  # get the class name with namespace.
124
124
  def namespaced_class_name(name)
125
- class_name = "#{name.split("/").map(&:camelize).join("::")}Controller"
125
+ class_name = "#{name.split('/').map(&:camelize).join('::')}Controller"
126
126
  if @namespaces.empty?
127
127
  class_name
128
128
  else
@@ -138,7 +138,7 @@ module RailsBestPractices
138
138
  prepared_method_names = Prepares.controller_methods.get_methods(controller_name).map(&:method_name)
139
139
  only_methods = (_methods & prepared_method_names).map { |meth| ":#{meth}" }
140
140
  routes_message = if only_methods.size > 3
141
- "except: [#{(methods.map { |meth| ":" + meth } - only_methods).join(', ')}]"
141
+ "except: [#{(methods.map { |meth| ':' + meth } - only_methods).join(', ')}]"
142
142
  else
143
143
  "only: [#{only_methods.join(', ')}]"
144
144
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # A Review class that takes charge of reviewing one rails best practice.
@@ -31,10 +32,10 @@ module RailsBestPractices
31
32
 
32
33
  # find variable in the call or field node.
33
34
  def variable(node)
34
- while [:call, :field, :method_add_arg, :method_add_block].include?(node.receiver.sexp_type)
35
+ while %i[call field method_add_arg method_add_block].include?(node.receiver.sexp_type)
35
36
  node = node.receiver
36
37
  end
37
- return if [:fcall, :hash].include?(node.receiver.sexp_type)
38
+ return if %i[fcall hash].include?(node.receiver.sexp_type)
38
39
  node.receiver
39
40
  end
40
41
 
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a controller file to make sure using simplified syntax for render.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a view file to make sure using simplified syntax for render.
@@ -15,7 +16,7 @@ module RailsBestPractices
15
16
  interesting_files VIEW_FILES
16
17
  url 'https://rails-bestpractices.com/posts/2010/12/04/simplify-render-in-views/'
17
18
 
18
- VALID_KEYS = %w(object collection locals)
19
+ VALID_KEYS = %w[object collection locals].freeze
19
20
 
20
21
  # check command node in view file,
21
22
  # if its message is render and the arguments contain a key partial,
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a controller file to make sure to use before_filter to remove duplicated first code
@@ -30,12 +31,12 @@ module RailsBestPractices
30
31
  @first_sentences = {}
31
32
 
32
33
  node.body.statements.each do |statement_node|
33
- var_ref_or_vcall_included = [:var_ref, :vcall].include?(statement_node.sexp_type)
34
- private_or_protected_included = ['protected', 'private'].include?(statement_node.to_s)
34
+ var_ref_or_vcall_included = %i[var_ref vcall].include?(statement_node.sexp_type)
35
+ private_or_protected_included = %w[protected private].include?(statement_node.to_s)
35
36
  break if var_ref_or_vcall_included && private_or_protected_included
36
37
  remember_first_sentence(statement_node) if :def == statement_node.sexp_type
37
38
  end
38
- @first_sentences.each do |first_sentence, def_nodes|
39
+ @first_sentences.each do |_first_sentence, def_nodes|
39
40
  if def_nodes.size > @customize_count
40
41
  add_error "use before_filter for #{def_nodes.map { |node| node.method_name.to_s }.join(',')}",
41
42
  node.file,
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # review a controller file to make sure to use model association instead of foreign key id assignment.
@@ -35,7 +36,6 @@ module RailsBestPractices
35
36
  attribute_assignment(child)
36
37
  when :call
37
38
  call_assignment(child)
38
- else
39
39
  end
40
40
  end
41
41
  @assignments = nil
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Make sure to use multipart/alternative as content_type of email.
@@ -23,7 +24,7 @@ module RailsBestPractices
23
24
  # check def node and find if the corresponding views exist or not?
24
25
  add_callback :start_def do |node|
25
26
  name = node.method_name.to_s
26
- if !rails3_canonical_mailer_views?(name)
27
+ unless rails3_canonical_mailer_views?(name)
27
28
  add_error('use multipart/alternative as content_type of email')
28
29
  end
29
30
  end
@@ -33,14 +34,13 @@ module RailsBestPractices
33
34
  # check if rails's syntax mailer views are canonical.
34
35
  #
35
36
  # @param [String] name method name in action_mailer
36
- def rails_canonical_mailer_views?(name)
37
- end
37
+ def rails_canonical_mailer_views?(name); end
38
38
 
39
39
  # check if rails3's syntax mailer views are canonical.
40
40
  #
41
41
  # @param [String] name method name in action_mailer
42
42
  def rails3_canonical_mailer_views?(name)
43
- return true if mailer_files(name).length == 0
43
+ return true if mailer_files(name).empty?
44
44
  return true if mailer_files(name).none? { |filename| filename.index 'html' }
45
45
  mailer_files(name).any? { |filename| filename.index 'html' } &&
46
46
  mailer_files(name).any? { |filename| filename.index 'text' }
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Make sure to use observer (sorry we only check the mailer deliver now).
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Check if method definition has parentheses around parameters.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Make sure to use query attribute instead of nil?, blank? and present?.
@@ -18,7 +19,7 @@ module RailsBestPractices
18
19
  interesting_files ALL_FILES
19
20
  url 'https://rails-bestpractices.com/posts/2010/10/03/use-query-attribute/'
20
21
 
21
- QUERY_METHODS = %w(nil? blank? present?)
22
+ QUERY_METHODS = %w[nil? blank? present?].freeze
22
23
 
23
24
  # check if node to see whose conditional statement nodes contain nodes that can use query attribute instead.
24
25
  #
@@ -102,7 +103,7 @@ module RailsBestPractices
102
103
  def model_attribute?(variable_node, message)
103
104
  class_name = variable_node.to_s.sub(/^@/, '').classify
104
105
  attribute_type = model_attributes.get_attribute_type(class_name, message)
105
- attribute_type && !['integer', 'float'].include?(attribute_type)
106
+ attribute_type && !%w[integer float].include?(attribute_type)
106
107
  end
107
108
 
108
109
  # check if the node is with node type :binary, node message :== and node argument is empty string.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a migration file to make sure to use say or say_with_time for customized data changes
@@ -18,7 +19,7 @@ module RailsBestPractices
18
19
  interesting_files MIGRATION_FILES
19
20
  url 'https://rails-bestpractices.com/posts/2010/08/19/use-say-and-say_with_time-in-migrations-to-make-a-useful-migration-log/'
20
21
 
21
- WITH_SAY_METHODS = %w(say say_with_time)
22
+ WITH_SAY_METHODS = %w[say say_with_time].freeze
22
23
 
23
24
  # check a class method define node to see if there are method calls that need to be wrapped by say
24
25
  # or say_with_time.
@@ -28,7 +29,7 @@ module RailsBestPractices
28
29
  # then such method call should be wrapped by say or say_with_time
29
30
  add_callback :start_defs do |node|
30
31
  node.body.statements.each do |child_node|
31
- next if child_node.grep_nodes_count(sexp_type: [:fcall, :command], message: WITH_SAY_METHODS) > 0
32
+ next if child_node.grep_nodes_count(sexp_type: %i[fcall command], message: WITH_SAY_METHODS) > 0
32
33
 
33
34
  receiver_node = if :method_add_block == child_node.sexp_type
34
35
  child_node[1]
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Review a controller to make sure to use scope access instead of manually checking current_user and redirect.
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
4
  module Reviews
4
5
  # Prepare Gemfile and review Capfile file to make sure using turbo-sprocket-rails3
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module RailsBestPractices
3
- VERSION = '1.19.1'
4
+ VERSION = '1.19.2'.freeze
4
5
  end
@@ -1,4 +1,5 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  require File.expand_path('../lib/rails_best_practices/version', __FILE__)
3
4
 
4
5
  Gem::Specification.new do |s|
@@ -20,24 +21,24 @@ Gem::Specification.new do |s|
20
21
  s.add_dependency('code_analyzer', '>= 0.4.8')
21
22
  s.add_dependency('erubis')
22
23
  s.add_dependency('i18n')
23
- s.add_dependency('require_all', '~> 1.5.0')
24
- s.add_dependency('ruby-progressbar')
25
24
  s.add_dependency('json')
25
+ s.add_dependency('require_all', '~> 2.0')
26
+ s.add_dependency('ruby-progressbar')
26
27
 
28
+ s.add_development_dependency('awesome_print')
29
+ s.add_development_dependency('bundler')
30
+ s.add_development_dependency('haml')
27
31
  s.add_development_dependency('rake', '< 11.0')
28
32
  s.add_development_dependency('rspec')
29
- s.add_development_dependency('haml')
30
33
  s.add_development_dependency('slim')
31
- s.add_development_dependency('bundler')
32
- s.add_development_dependency('awesome_print')
33
34
 
34
35
  s.files = `git ls-files`.split("\n")
35
36
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
36
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
37
- s.require_paths = ['lib', 'assets']
37
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
38
+ s.require_paths = %w[lib assets]
38
39
 
39
40
  s.post_install_message = <<-POST_INSTALL_MESSAGE
40
- #{"*" * 80}
41
+ #{'*' * 80}
41
42
 
42
43
  rails_best_practices is a code metric tool to check the quality of rails codes.
43
44
 
@@ -53,6 +54,6 @@ Gem::Specification.new do |s|
53
54
 
54
55
  Richard Huang (flyerhzm@gmail.com)
55
56
 
56
- #{"*" * 80}
57
+ #{'*' * 80}
57
58
  POST_INSTALL_MESSAGE
58
59
  end