rails_best_practices 1.18.1 → 1.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +4 -1
- data/Gemfile +3 -3
- data/README.md +1 -1
- data/Rakefile +1 -4
- data/lib/rails_best_practices/analyzer.rb +3 -3
- data/lib/rails_best_practices/core/routes.rb +1 -1
- data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -2
- data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -2
- data/lib/rails_best_practices/prepares/route_prepare.rb +5 -0
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +2 -2
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +2 -2
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +2 -2
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -2
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -2
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +2 -2
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +2 -2
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -2
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +3 -12
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -2
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +2 -47
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +2 -2
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -2
- 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 -2
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +15 -6
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -2
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +2 -2
- 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 +3 -18
- data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -13
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -2
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +2 -2
- data/spec/rails_best_practices/analyzer_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +338 -586
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +59 -140
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +26 -69
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +44 -153
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +2 -2
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +21 -0
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +160 -272
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +76 -209
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +43 -110
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +4 -4
- metadata +5 -23
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +0 -382
- data/install_supported_rubies.sh +0 -10
- data/rake_rubies.sh +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a21a8ed1b2556fb543a2e0198c20cc0e1717408c
|
4
|
+
data.tar.gz: 5590f1f768fbe89156474a9b6c6e2d3876f0ab7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ade021d411ca4b45c36628ba5a9bed899b0ffcde8b5ca7289171c08aa2493b5c9a04cad2af7758cb50a0f8fdae1f9b5ec4d40396a97145a33d7b32c7630ea82
|
7
|
+
data.tar.gz: 4ac6bfab4420bac0d7476b2694123fa43d21eb5936a85bdea86f0cb3a17e86d308efac99927aa5325d467bc4bb4b1d6e4c41b7d67405198491add9ee63bf60dc
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# Next Release
|
2
2
|
|
3
|
-
## 1.
|
3
|
+
## 1.19.0 (2017-07-26)
|
4
4
|
|
5
|
+
* RestrictAutoGeneratedRoutesCheck is compatibale with rails api_only
|
6
|
+
* Remove Rails 2 support
|
5
7
|
* Remove haml ugly option
|
8
|
+
* Fix RemoveUnusedMethodsInControllers warning at inline routes
|
6
9
|
|
7
10
|
## 1.18.0 (2017-03-01)
|
8
11
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# rails_best_practices
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/rails_best_practices.svg)](http://badge.fury.io/rb/rails_best_practices)
|
4
|
-
[![Build Status](https://secure.travis-ci.org/
|
4
|
+
[![Build Status](https://secure.travis-ci.org/flyerhzm/rails_best_practices.svg)](http://travis-ci.org/flyerhzm/rails_best_practices)
|
5
5
|
[![Coverage Status](https://coveralls.io/repos/railsbp/rails_best_practices/badge.svg?branch=master)](https://coveralls.io/r/railsbp/rails_best_practices)
|
6
6
|
|
7
7
|
[![Coderwall Endorse](http://api.coderwall.com/flyerhzm/endorsecount.png)](http://coderwall.com/flyerhzm)
|
data/Rakefile
CHANGED
@@ -6,7 +6,6 @@ Bundler.setup
|
|
6
6
|
require "rake"
|
7
7
|
require "rspec"
|
8
8
|
require "rspec/core/rake_task"
|
9
|
-
require 'rubocop/rake_task'
|
10
9
|
|
11
10
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
12
11
|
require "rails_best_practices/version"
|
@@ -15,7 +14,5 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
15
14
|
spec.pattern = "spec/**/*_spec.rb"
|
16
15
|
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
task :default => [:spec, :rubocop]
|
17
|
+
task :default => :spec
|
21
18
|
task :test => :spec
|
@@ -4,7 +4,7 @@ require 'json'
|
|
4
4
|
require 'ruby-progressbar'
|
5
5
|
|
6
6
|
module RailsBestPractices
|
7
|
-
# RailsBestPractices Analyzer helps you to analyze your rails code, according to best practices on
|
7
|
+
# RailsBestPractices Analyzer helps you to analyze your rails code, according to best practices on https://rails-bestpractices.
|
8
8
|
# if it finds any violatioins to best practices, it will give you some readable suggestions.
|
9
9
|
#
|
10
10
|
# The analysis process is partitioned into two parts,
|
@@ -180,7 +180,7 @@ module RailsBestPractices
|
|
180
180
|
# output errors on terminal.
|
181
181
|
def output_terminal_errors
|
182
182
|
errors.each { |error| plain_output(error.to_s, 'red') }
|
183
|
-
plain_output("\nPlease go to
|
183
|
+
plain_output("\nPlease go to https://rails-bestpractices.com to see more useful Rails Best Practices.", 'green')
|
184
184
|
if errors.empty?
|
185
185
|
plain_output("\nNo warning found. Cool!", 'green')
|
186
186
|
else
|
@@ -226,7 +226,7 @@ module RailsBestPractices
|
|
226
226
|
|
227
227
|
if @options["with-github"]
|
228
228
|
last_commit_id = @options["last-commit-id"] ? @options["last-commit-id"] : `cd #{@runner.class.base_path} && git rev-parse HEAD`.chomp
|
229
|
-
unless @options["github-name"].start_with?('
|
229
|
+
unless @options["github-name"].start_with?('https')
|
230
230
|
@options["github-name"] = GITHUB_URL + @options["github-name"]
|
231
231
|
end
|
232
232
|
end
|
@@ -22,7 +22,7 @@ module RailsBestPractices
|
|
22
22
|
|
23
23
|
# mappings can be specified by e.g.
|
24
24
|
# post 'some/:pattern' => 'controller#action'
|
25
|
-
if action_name =~
|
25
|
+
if action_name.is_a?(String) && action_name =~ /\A(\w+)#(\w+)\z/
|
26
26
|
controller_name = $1
|
27
27
|
action_name = $2
|
28
28
|
end
|
@@ -3,10 +3,10 @@ module RailsBestPractices
|
|
3
3
|
module Lexicals
|
4
4
|
# Make sure there are no tabs in files.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2011/07/04/remove-tab/
|
7
7
|
class RemoveTabCheck < Core::Check
|
8
8
|
interesting_files ALL_FILES
|
9
|
-
url "
|
9
|
+
url "https://rails-bestpractices.com/posts/2011/07/04/remove-tab/"
|
10
10
|
|
11
11
|
# check if the content of file contains a tab.
|
12
12
|
#
|
@@ -3,10 +3,10 @@ module RailsBestPractices
|
|
3
3
|
module Lexicals
|
4
4
|
# Make sure there are no trailing whitespace in codes.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/12/02/remove-trailing-whitespace/
|
7
7
|
class RemoveTrailingWhitespaceCheck < Core::Check
|
8
8
|
interesting_files ALL_FILES
|
9
|
-
url "
|
9
|
+
url "https://rails-bestpractices.com/posts/2010/12/02/remove-trailing-whitespace/"
|
10
10
|
|
11
11
|
# check if the content of file contain a trailing whitespace.
|
12
12
|
#
|
@@ -37,6 +37,10 @@ module RailsBestPractices
|
|
37
37
|
else
|
38
38
|
action_names = [second_argument.hash_value("to").to_s]
|
39
39
|
end
|
40
|
+
elsif :symbol_literal == first_argument.sexp_type && second_argument.try(:sexp_type) && \
|
41
|
+
:symbol_literal == second_argument.sexp_type
|
42
|
+
action_names = node.arguments.all.select \
|
43
|
+
{|arg| :symbol_literal == arg.sexp_type }.map(&:to_s)
|
40
44
|
else
|
41
45
|
action_names = [first_argument.to_s]
|
42
46
|
end
|
@@ -109,6 +113,7 @@ module RailsBestPractices
|
|
109
113
|
end
|
110
114
|
end
|
111
115
|
|
116
|
+
# TODO: should remove but breaks some tests
|
112
117
|
# remember route for rails2.
|
113
118
|
add_callback :start_command_call do |node|
|
114
119
|
case node.message.to_s
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Make sure to add a model virual attribute to simplify model creation.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/21/add-model-virtual-attribute/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -16,7 +16,7 @@ module RailsBestPractices
|
|
16
16
|
class AddModelVirtualAttributeReview < Review
|
17
17
|
interesting_nodes :def
|
18
18
|
interesting_files CONTROLLER_FILES
|
19
|
-
url "
|
19
|
+
url "https://rails-bestpractices.com/posts/2010/07/21/add-model-virtual-attribute/"
|
20
20
|
|
21
21
|
# check method define nodes to see if there are some attribute assignments that can use model virtual attribute instead in review process.
|
22
22
|
#
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review db/schema.rb file to make sure every reference key has a database index.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/always-add-db-index/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -25,7 +25,7 @@ module RailsBestPractices
|
|
25
25
|
class AlwaysAddDbIndexReview < Review
|
26
26
|
interesting_nodes :command, :command_call
|
27
27
|
interesting_files SCHEMA_FILE
|
28
|
-
url "
|
28
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/always-add-db-index/"
|
29
29
|
|
30
30
|
def initialize(options={})
|
31
31
|
super(options)
|
@@ -4,7 +4,7 @@ module RailsBestPractices
|
|
4
4
|
# Review all code to make sure we either check the return value of "save", "update_attributes"
|
5
5
|
# and "create" or use "save!", "update_attributes!", or "create!", respectively.
|
6
6
|
#
|
7
|
-
# See the best practice details here
|
7
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2012/11/02/check-the-return-value-of-save-otherwise-use-save/
|
8
8
|
#
|
9
9
|
# Implementation:
|
10
10
|
#
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
include Classable
|
16
16
|
interesting_nodes :call, :command_call, :method_add_arg, :if, :ifop, :elsif, :unless, :if_mod, :unless_mod, :assign, :binary
|
17
17
|
interesting_files ALL_FILES
|
18
|
-
url "
|
18
|
+
url "https://rails-bestpractices.com/posts/2012/11/02/check-the-return-value-of-save-otherwise-use-save/"
|
19
19
|
|
20
20
|
add_callback :start_if, :start_ifop, :start_elsif, :start_unless, :start_if_mod, :start_unless_mod do |node|
|
21
21
|
@used_return_value_of = node.conditional_statement.all_conditions
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review model files to make sure not use default_scope
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2013/06/15/default_scope-is-evil/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -12,7 +12,7 @@ module RailsBestPractices
|
|
12
12
|
class DefaultScopeIsEvilReview < Review
|
13
13
|
interesting_nodes :command
|
14
14
|
interesting_files MODEL_FILES
|
15
|
-
url "
|
15
|
+
url "https://rails-bestpractices.com/posts/2013/06/15/default_scope-is-evil/"
|
16
16
|
|
17
17
|
# check all command nodes' message
|
18
18
|
add_callback :start_command do |node|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review config/deploy.rb file to make sure using the bundler's capistrano recipe.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/09/02/dry-bundler-in-capistrano/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
class DryBundlerInCapistranoReview < Review
|
16
16
|
interesting_nodes :command
|
17
17
|
interesting_files DEPLOY_FILES
|
18
|
-
url "
|
18
|
+
url "https://rails-bestpractices.com/posts/2010/09/02/dry-bundler-in-capistrano/"
|
19
19
|
|
20
20
|
# check call node to see if it is with message "namespace" and argument "bundler".
|
21
21
|
add_callback :start_command do |node|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Make sure not to insert data in migration, move them to seed file.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/isolating-seed-data/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -21,7 +21,7 @@ module RailsBestPractices
|
|
21
21
|
class IsolateSeedDataReview < Review
|
22
22
|
interesting_nodes :call, :assign
|
23
23
|
interesting_files MIGRATION_FILES
|
24
|
-
url "
|
24
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/isolating-seed-data/"
|
25
25
|
|
26
26
|
def initialize(options={})
|
27
27
|
super(options)
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review model files to make sure finders are on their own model.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/23/keep-finders-on-their-own-model/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -17,7 +17,7 @@ module RailsBestPractices
|
|
17
17
|
class KeepFindersOnTheirOwnModelReview < Review
|
18
18
|
interesting_nodes :method_add_arg
|
19
19
|
interesting_files MODEL_FILES
|
20
|
-
url "
|
20
|
+
url "https://rails-bestpractices.com/posts/2010/07/23/keep-finders-on-their-own-model/"
|
21
21
|
|
22
22
|
FINDERS = %w(find all first last)
|
23
23
|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review to make sure not to avoid the law of demeter.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/the-law-of-demeter/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -16,7 +16,7 @@ module RailsBestPractices
|
|
16
16
|
class LawOfDemeterReview < Review
|
17
17
|
interesting_nodes :call
|
18
18
|
interesting_files ALL_FILES
|
19
|
-
url "
|
19
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/the-law-of-demeter/"
|
20
20
|
|
21
21
|
ASSOCIATION_METHODS = %w(belongs_to has_one)
|
22
22
|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review a view file to make sure there is no finder, finder should be moved to controller.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/move-code-into-controller/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -12,7 +12,7 @@ module RailsBestPractices
|
|
12
12
|
class MoveCodeIntoControllerReview < Review
|
13
13
|
interesting_nodes :method_add_arg, :assign
|
14
14
|
interesting_files VIEW_FILES
|
15
|
-
url "
|
15
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/move-code-into-controller/"
|
16
16
|
|
17
17
|
FINDERS = %w(find all first last)
|
18
18
|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review a view file to make sure there is no complex options_for_select message call.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/move-code-into-helper/
|
7
7
|
#
|
8
8
|
# TODO: we need a better soluation, any suggestion?
|
9
9
|
#
|
@@ -19,7 +19,7 @@ module RailsBestPractices
|
|
19
19
|
class MoveCodeIntoHelperReview < Review
|
20
20
|
interesting_nodes :method_add_arg
|
21
21
|
interesting_files VIEW_FILES
|
22
|
-
url "
|
22
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/move-code-into-helper/"
|
23
23
|
|
24
24
|
def initialize(options = {})
|
25
25
|
super(options)
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review a view file to make sure there is no complex logic call for model.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/24/move-code-into-model/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -13,7 +13,7 @@ module RailsBestPractices
|
|
13
13
|
class MoveCodeIntoModelReview < Review
|
14
14
|
interesting_nodes :if, :unless, :elsif, :ifop, :if_mod, :unless_mod
|
15
15
|
interesting_files VIEW_FILES
|
16
|
-
url "
|
16
|
+
url "https://rails-bestpractices.com/posts/2010/07/24/move-code-into-model/"
|
17
17
|
|
18
18
|
def initialize(options={})
|
19
19
|
super(options)
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review a controller file to make sure there are no complex finder.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/14/move-finder-to-named_scope/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
class MoveFinderToNamedScopeReview < Review
|
16
16
|
interesting_nodes :method_add_arg
|
17
17
|
interesting_files CONTROLLER_FILES
|
18
|
-
url "
|
18
|
+
url "https://rails-bestpractices.com/posts/2010/07/14/move-finder-to-named_scope/"
|
19
19
|
|
20
20
|
FINDERS = %w(find all first last)
|
21
21
|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review a controller file to make sure that complex model logic should not exist in controller, should be moved into a model.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/21/move-model-logic-into-the-model/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
class MoveModelLogicIntoModelReview < Review
|
16
16
|
interesting_nodes :def
|
17
17
|
interesting_files CONTROLLER_FILES
|
18
|
-
url "
|
18
|
+
url "https://rails-bestpractices.com/posts/2010/07/21/move-model-logic-into-the-model/"
|
19
19
|
|
20
20
|
def initialize(options = {})
|
21
21
|
super(options)
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review config/routes.rb file to make sure not to use too deep nesting routes.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/22/needless-deep-nesting/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -24,7 +24,7 @@ module RailsBestPractices
|
|
24
24
|
class NeedlessDeepNestingReview < Review
|
25
25
|
interesting_nodes :method_add_block
|
26
26
|
interesting_files ROUTE_FILES
|
27
|
-
url "
|
27
|
+
url "https://rails-bestpractices.com/posts/2010/07/22/needless-deep-nesting/"
|
28
28
|
|
29
29
|
def initialize(options = {})
|
30
30
|
super(options)
|
@@ -4,7 +4,7 @@ module RailsBestPractices
|
|
4
4
|
# Review all code to make sure we don't rescue Exception
|
5
5
|
# This is a common mistake by Java or C# devs in ruby.
|
6
6
|
#
|
7
|
-
# See the best practice details here
|
7
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2012/11/01/don-t-rescue-exception-rescue-standarderror/
|
8
8
|
#
|
9
9
|
# Implementation:
|
10
10
|
#
|
@@ -13,7 +13,7 @@ module RailsBestPractices
|
|
13
13
|
class NotRescueExceptionReview < Review
|
14
14
|
interesting_nodes :rescue
|
15
15
|
interesting_files ALL_FILES
|
16
|
-
url "
|
16
|
+
url "https://rails-bestpractices.com/posts/2012/11/01/don-t-rescue-exception-rescue-standarderror/"
|
17
17
|
|
18
18
|
# check rescue node to see if its type is Exception
|
19
19
|
add_callback :start_rescue do |rescue_node|
|
@@ -3,7 +3,7 @@ module RailsBestPractices
|
|
3
3
|
module Reviews
|
4
4
|
# Review config/routes file to make sure not use default route that rails generated.
|
5
5
|
#
|
6
|
-
# See the best practice details here
|
6
|
+
# See the best practice details here https://rails-bestpractices.com/posts/2010/07/22/not-use-default-route-if-you-use-restful-design/
|
7
7
|
#
|
8
8
|
# Implementation:
|
9
9
|
#
|
@@ -19,18 +19,9 @@ module RailsBestPractices
|
|
19
19
|
class NotUseDefaultRouteReview < Review
|
20
20
|
interesting_nodes :command_call, :command
|
21
21
|
interesting_files ROUTE_FILES
|
22
|
-
url "
|
22
|
+
url "https://rails-bestpractices.com/posts/2010/07/22/not-use-default-route-if-you-use-restful-design/"
|
23
23
|
|
24
|
-
# check all command
|
25
|
-
add_callback :start_command_call do |node|
|
26
|
-
if "map" == node.receiver.to_s && "connect" == node.message.to_s &&
|
27
|
-
(":controller/:action/:id" == node.arguments.all.first.to_s ||
|
28
|
-
":controller/:action/:id.:format" == node.arguments.all.first.to_s)
|
29
|
-
add_error "not use default route"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# check all command nodes, compare with rails3 default route
|
24
|
+
# check all command nodes
|
34
25
|
add_callback :start_command do |node|
|
35
26
|
if "match" == node.message.to_s &&
|
36
27
|
":controller(/:action(/:id(.:format)))" == node.arguments.all.first.to_s
|