rails_best_practices 0.1.2 → 0.2.0

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.
data/README.textile CHANGED
@@ -15,7 +15,7 @@ sudo gem install rails_best_practices --source http://gemcutter.org
15
15
 
16
16
  h2. Usage
17
17
 
18
- at the root of rails
18
+ at the root directory of rails app
19
19
 
20
20
  <pre><code>
21
21
  rails_best_practices .
@@ -23,6 +23,28 @@ rails_best_practices .
23
23
 
24
24
  *************************************************
25
25
 
26
+ h2. Customize Configuration
27
+
28
+ Copy <code>rails_best_practices.yml</code> in the root directory of rails_best_practices gem to <code>config</code> directory
29
+ Now you can customize the configuration, the default configuration is as follows:
30
+
31
+ <pre><code>
32
+ MoveFinderToNamedScopeCheck: { }
33
+ UseModelAssociationCheck: { }
34
+ UseScopeAccessCheck: { }
35
+ AddModelVirtualAttributeCheck: { }
36
+ # UseModelCallbackCheck: { }
37
+ ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
38
+ MoveModelLogicIntoModelCheck: { called_count: 4 }
39
+ # ManyToManyCollectionCheck: { }
40
+ # NestedModelFormsCheck: { }
41
+ OveruseRouteCustomizationsCheck: { customize_count: 3 }
42
+ NeedlessDeepNestingCheck: { nested_count: 2 }
43
+ NotUseDefaultRouteCheck: { }
44
+ </code></pre>
45
+
46
+ *************************************************
47
+
26
48
  h2. Progress
27
49
 
28
50
  * Lesson 1. Move code from Controller to Model
@@ -39,8 +61,8 @@ h2. Progress
39
61
 
40
62
  * Lesson 2. RESTful Conventions
41
63
  ## [-Overuse route customizations-]
42
- ## Needless deep nesting
43
- ## Not use default route
64
+ ## [-Needless deep nesting-]
65
+ ## [-Not use default route-]
44
66
 
45
67
  * Lesson 3. Model
46
68
  ## Keep Finders on Their Own Model
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
@@ -42,7 +42,7 @@ module RailsBestPractices
42
42
  def call_assignment(node)
43
43
  if node.message == :save
44
44
  variable = node.subject
45
- add_error "add model virtual attribute" if params_dup?(@variables[variable].collect {|h| h[:arguments] })
45
+ add_error "add model virtual attribute (for #{node.subject.to_ruby})" if params_dup?(@variables[variable].collect {|h| h[:arguments] })
46
46
  end
47
47
  end
48
48
 
@@ -54,4 +54,4 @@ module RailsBestPractices
54
54
  end
55
55
  end
56
56
  end
57
- end
57
+ end
@@ -29,8 +29,9 @@ module RailsBestPractices
29
29
  call_node(child)
30
30
  end
31
31
  end
32
- if @variables.values.any? { |count| count > @called_count }
33
- add_error "move model logic into model"
32
+
33
+ @variables.each do |variable, count|
34
+ add_error "move model logic into model (#{variable.to_ruby} called_count > #{@called_count})" if count > @called_count
34
35
  end
35
36
  @variables = nil
36
37
  end
@@ -39,10 +40,10 @@ module RailsBestPractices
39
40
 
40
41
  def call_node(node)
41
42
  variable = node.subject
42
- return if variable.nil?
43
+ return if variable.nil? or ![:lvar, :ivar].include? node.subject.node_type
43
44
  @variables[variable] ||= 0
44
45
  @variables[variable] += 1
45
46
  end
46
47
  end
47
48
  end
48
- end
49
+ end
@@ -0,0 +1,35 @@
1
+ require 'rails_best_practices/checks/check'
2
+
3
+ module RailsBestPractices
4
+ module Checks
5
+ # Check config/routes.rb to make sure not to use too deep nesting routes.
6
+ #
7
+ # Implementation: check nested route count, if more than nested_count, then it is needless deep nesting.
8
+ class NeedlessDeepNestingCheck < Check
9
+
10
+ def interesting_nodes
11
+ [:call]
12
+ end
13
+
14
+ def interesting_files
15
+ /config\/routes.rb/
16
+ end
17
+
18
+ def initialize(options = {})
19
+ super()
20
+ @nested_count = options['nested_count'] || 2
21
+ end
22
+
23
+ def evaluate_start(node)
24
+ if node.message == :resources
25
+ if node.subject == s(:call, nil, :map, s(:arglist))
26
+ @counter = 0
27
+ else
28
+ @counter += 1
29
+ add_error "needless deep nesting (nested_count > #{@nested_count})" if @counter >= @nested_count
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ require 'rails_best_practices/checks/check'
2
+
3
+ module RailsBestPractices
4
+ module Checks
5
+ # Check config/routes to make sure not use default route that rails generated.
6
+ #
7
+ # Implementation: compare route sentence to see if it is equal to rails default route.
8
+ class NotUseDefaultRouteCheck < Check
9
+
10
+ def interesting_nodes
11
+ [:call]
12
+ end
13
+
14
+ def interesting_files
15
+ /config\/routes.rb/
16
+ end
17
+
18
+ def evaluate_start(node)
19
+ if node == s(:call, s(:lvar, :map), :connect, s(:arglist, s(:str, ":controller/:action/:id"))) or
20
+ node == s(:call, s(:lvar, :map), :connect, s(:arglist, s(:str, ":controller/:action/:id.:format")))
21
+ add_error "not use default route"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -22,7 +22,7 @@ module RailsBestPractices
22
22
 
23
23
  def evaluate_start(node)
24
24
  if s(:lvar, :map) == node.subject and :resources == node.message
25
- add_error "overuse route customizations" if member_and_collection_count(node) > @customize_count
25
+ add_error "overuse route customizations (customize_count > #{@customize_count})" if member_and_collection_count(node) > @customize_count
26
26
  end
27
27
  end
28
28
 
@@ -39,7 +39,7 @@ module RailsBestPractices
39
39
 
40
40
  def attribute_assignment(node)
41
41
  variable = node.subject
42
- return if variable.nil?
42
+ return if variable.nil? or ![:lvar, :ivar].include? node.subject.node_type
43
43
  @variables[variable] ||= 0
44
44
  @variables[variable] += 1
45
45
  end
@@ -47,9 +47,9 @@ module RailsBestPractices
47
47
  def call_assignment(node)
48
48
  if node.message == :save
49
49
  variable = node.subject
50
- add_error "replace complex creation with factory method" if @variables[variable] > @attrasgn_count
50
+ add_error "replace complex creation with factory method (#{variable.to_ruby} attribute_assignment_count > #{@attrasgn_count})" if @variables[variable] > @attrasgn_count
51
51
  end
52
52
  end
53
53
  end
54
54
  end
55
- end
55
+ end
@@ -39,9 +39,9 @@ module RailsBestPractices
39
39
  def call_assignment(node)
40
40
  if node.message == :save
41
41
  variable = node.subject[1]
42
- add_error "use model association" if @variables[variable]
42
+ add_error "use model association (for #{node.subject.to_ruby})" if @variables[variable]
43
43
  end
44
44
  end
45
45
  end
46
46
  end
47
- end
47
+ end
@@ -7,4 +7,6 @@ require 'rails_best_practices/checks/replace_complex_creation_with_factory_metho
7
7
  require 'rails_best_practices/checks/move_model_logic_into_model_check'
8
8
  require 'rails_best_practices/checks/many_to_many_collection_check'
9
9
  require 'rails_best_practices/checks/nested_model_forms_check'
10
- require 'rails_best_practices/checks/overuse_route_customizations_check'
10
+ require 'rails_best_practices/checks/overuse_route_customizations_check'
11
+ require 'rails_best_practices/checks/needless_deep_nesting_check'
12
+ require 'rails_best_practices/checks/not_use_default_route_check'
@@ -6,9 +6,14 @@ module RailsBestPractices
6
6
  module Core
7
7
  class Runner
8
8
  DEFAULT_CONFIG = File.join(File.dirname(__FILE__), "..", "..", "..", "rails_best_practices.yml")
9
+ CUSTOM_CONFIG = File.join('config', 'rails_best_practices.yml')
9
10
 
10
11
  def initialize(*checks)
11
- @config = DEFAULT_CONFIG
12
+ if File.exists?(CUSTOM_CONFIG)
13
+ @config = CUSTOM_CONFIG
14
+ else
15
+ @config = DEFAULT_CONFIG
16
+ end
12
17
  @checks = checks unless checks.empty?
13
18
  @checks ||= load_checks
14
19
  @checker ||= CheckingVisitor.new(@checks)
@@ -47,56 +47,43 @@ class Sexp
47
47
  end
48
48
 
49
49
  def subject
50
- case node_type
51
- when :attrasgn, :call, :iasgn, :lasgn
50
+ if [:attrasgn, :call, :iasgn, :lasgn].include? node_type
52
51
  self[1]
53
- else
54
52
  end
55
53
  end
56
54
 
57
55
  def message
58
- case node_type
59
- when :attrasgn, :call
56
+ if [:attrasgn, :call].include? node_type
60
57
  self[2]
61
- else
62
58
  end
63
59
  end
64
60
 
65
61
  def arguments
66
- case node_type
67
- when :attrasgn, :call
62
+ if [:attrasgn, :call].include? node_type
68
63
  self[3]
69
- else
70
64
  end
71
65
  end
72
66
 
73
67
  def call
74
- case node_type
75
- when :if, :arglist
68
+ if [:if, :arglist].include? node_type
76
69
  self[1]
77
- else
78
70
  end
79
71
  end
80
72
 
81
73
  def true_node
82
- case node_type
83
- when :if
74
+ if :if == node_type
84
75
  self[2]
85
- else
86
76
  end
87
77
  end
88
78
 
89
79
  def false_node
90
- case node_type
91
- when :if
80
+ if :if == node_type
92
81
  self[3]
93
- else
94
82
  end
95
83
  end
96
84
 
97
85
  def method_body
98
- case node_type
99
- when :block
86
+ if :block == node_type
100
87
  self[1..-1]
101
88
  else
102
89
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rails_best_practices}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Richard Huang"]
12
- s.date = %q{2009-11-05}
12
+ s.date = %q{2009-11-06}
13
13
  s.default_executable = %q{rails_best_practices}
14
14
  s.description = %q{check rails files according to ihower's presentation 'rails best practices'}
15
15
  s.email = %q{flyerhzm@gmail.com}
@@ -32,7 +32,9 @@ Gem::Specification.new do |s|
32
32
  "lib/rails_best_practices/checks/many_to_many_collection_check.rb",
33
33
  "lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb",
34
34
  "lib/rails_best_practices/checks/move_model_logic_into_model_check.rb",
35
+ "lib/rails_best_practices/checks/needless_deep_nesting_check.rb",
35
36
  "lib/rails_best_practices/checks/nested_model_forms_check.rb",
37
+ "lib/rails_best_practices/checks/not_use_default_route_check.rb",
36
38
  "lib/rails_best_practices/checks/overuse_route_customizations_check.rb",
37
39
  "lib/rails_best_practices/checks/replace_complex_creation_with_factory_method_check.rb",
38
40
  "lib/rails_best_practices/checks/use_model_association_check.rb",
@@ -51,7 +53,9 @@ Gem::Specification.new do |s|
51
53
  "spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
52
54
  "spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
53
55
  "spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb",
56
+ "spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
54
57
  "spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
58
+ "spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
55
59
  "spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb",
56
60
  "spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb",
57
61
  "spec/rails_best_practices/checks/use_model_association_check_spec.rb",
@@ -67,6 +71,7 @@ Gem::Specification.new do |s|
67
71
  s.summary = %q{check rails files according to ihower's presentation 'rails best practices'}
68
72
  s.test_files = [
69
73
  "spec/rails_best_practices/checks/use_scope_access_check_spec.rb",
74
+ "spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
70
75
  "spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
71
76
  "spec/rails_best_practices/checks/use_model_callback_check_spec.rb",
72
77
  "spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
@@ -75,6 +80,7 @@ Gem::Specification.new do |s|
75
80
  "spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb",
76
81
  "spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
77
82
  "spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
83
+ "spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
78
84
  "spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb",
79
85
  "spec/spec_helper.rb"
80
86
  ]
@@ -8,3 +8,5 @@ MoveModelLogicIntoModelCheck: { called_count: 4 }
8
8
  # ManyToManyCollectionCheck: { }
9
9
  # NestedModelFormsCheck: { }
10
10
  OveruseRouteCustomizationsCheck: { customize_count: 3 }
11
+ NeedlessDeepNestingCheck: { nested_count: 2 }
12
+ NotUseDefaultRouteCheck: { }
@@ -20,7 +20,7 @@ describe RailsBestPractices::Checks::AddModelVirtualAttributeCheck do
20
20
  @runner.check('app/controller/users_controller.rb', content)
21
21
  errors = @runner.errors
22
22
  errors.should_not be_empty
23
- errors[0].to_s.should == "app/controller/users_controller.rb:3 - add model virtual attribute"
23
+ errors[0].to_s.should == "app/controller/users_controller.rb:3 - add model virtual attribute (for @user)"
24
24
  end
25
25
 
26
26
  it "should not add model virtual attribute with differen param" do
@@ -57,4 +57,4 @@ describe RailsBestPractices::Checks::AddModelVirtualAttributeCheck do
57
57
  errors = @runner.errors
58
58
  errors.should be_empty
59
59
  end
60
- end
60
+ end
@@ -26,7 +26,7 @@ describe RailsBestPractices::Checks::MoveModelLogicIntoModelCheck do
26
26
  @runner.check('app/controller/posts_controller.rb', content)
27
27
  errors = @runner.errors
28
28
  errors.should_not be_empty
29
- errors[0].to_s.should == "app/controller/posts_controller.rb:3 - move model logic into model"
29
+ errors[0].to_s.should == "app/controller/posts_controller.rb:3 - move model logic into model (@post called_count > 4)"
30
30
  end
31
31
 
32
32
  it "should not move model logic into model with simple model calling" do
@@ -0,0 +1,36 @@
1
+ require File.join(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe RailsBestPractices::Checks::NeedlessDeepNestingCheck do
4
+ before(:each) do
5
+ @runner = RailsBestPractices::Core::Runner.new(RailsBestPractices::Checks::NeedlessDeepNestingCheck.new)
6
+ end
7
+
8
+ it "should needless deep nesting" do
9
+ content = <<-EOF
10
+ map.resources :posts do |post|
11
+ post.resources :comments do |comment|
12
+ comment.resources :favorites
13
+ end
14
+ end
15
+ EOF
16
+ @runner.check('config/routes.rb', content)
17
+ errors = @runner.errors
18
+ errors.should_not be_empty
19
+ errors[0].to_s.should == "config/routes.rb:3 - needless deep nesting (nested_count > 2)"
20
+ end
21
+
22
+ it "should no needless deep nesting" do
23
+ content = <<-EOF
24
+ map.resources :posts do |post|
25
+ post.resources :comments
26
+ end
27
+
28
+ map.resources :comments do |comment|
29
+ comment.resources :favorites
30
+ end
31
+ EOF
32
+ @runner.check('config/routes.rb', content)
33
+ errors = @runner.errors
34
+ errors.should be_empty
35
+ end
36
+ end
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe RailsBestPractices::Checks::NotUseDefaultRouteCheck do
4
+ before(:each) do
5
+ @runner = RailsBestPractices::Core::Runner.new(RailsBestPractices::Checks::NotUseDefaultRouteCheck.new)
6
+ end
7
+
8
+ it "should not use default route" do
9
+ content = <<-EOF
10
+ ActionController::Routing::Routes.draw do |map|
11
+ map.resources :posts, :member => { :push => :post }
12
+
13
+ map.connect ':controller/:action/:id'
14
+ map.connect ':controller/:action/:id.:format'
15
+ end
16
+ EOF
17
+ @runner.check('config/routes.rb', content)
18
+ errors = @runner.errors
19
+ errors.should_not be_empty
20
+ errors[0].to_s.should == "config/routes.rb:4 - not use default route"
21
+ errors[1].to_s.should == "config/routes.rb:5 - not use default route"
22
+ end
23
+
24
+ it "should no not use default route" do
25
+ content = <<-EOF
26
+ ActionController::Routing::Routes.draw do |map|
27
+ map.resources :posts, :member => { :push => :post }
28
+ end
29
+ EOF
30
+ @runner.check('config/routes.rb', content)
31
+ errors = @runner.errors
32
+ errors.should be_empty
33
+ end
34
+ end
@@ -17,7 +17,7 @@ describe RailsBestPractices::Checks::OveruseRouteCustomizationsCheck do
17
17
  @runner.check('config/routes.rb', content)
18
18
  errors = @runner.errors
19
19
  errors.should_not be_empty
20
- errors[0].to_s.should == "config/routes.rb:2 - overuse route customizations"
20
+ errors[0].to_s.should == "config/routes.rb:2 - overuse route customizations (customize_count > 3)"
21
21
  end
22
22
 
23
23
  it "should overuse route customizations with collection" do
@@ -32,7 +32,7 @@ describe RailsBestPractices::Checks::OveruseRouteCustomizationsCheck do
32
32
  @runner.check('config/routes.rb', content)
33
33
  errors = @runner.errors
34
34
  errors.should_not be_empty
35
- errors[0].to_s.should == "config/routes.rb:2 - overuse route customizations"
35
+ errors[0].to_s.should == "config/routes.rb:2 - overuse route customizations (customize_count > 3)"
36
36
  end
37
37
 
38
38
  it "should not overuse route customizations without customization" do
@@ -28,7 +28,7 @@ describe RailsBestPractices::Checks::ReplaceComplexCreationWithFactoryMethodChec
28
28
  @runner.check('app/controller/invoices_controller.rb', content)
29
29
  errors = @runner.errors
30
30
  errors.should_not be_empty
31
- errors[0].to_s.should == "app/controller/invoices_controller.rb:3 - replace complex creation with factory method"
31
+ errors[0].to_s.should == "app/controller/invoices_controller.rb:3 - replace complex creation with factory method (@invoice attribute_assignment_count > 2)"
32
32
  end
33
33
 
34
34
  it "should not replace complex creation with factory method with simple creation" do
@@ -19,7 +19,7 @@ describe RailsBestPractices::Checks::UseModelAssociationCheck do
19
19
  @runner.check('app/controller/posts_controller.rb', content)
20
20
  errors = @runner.errors
21
21
  errors.should_not be_empty
22
- errors[0].to_s.should == "app/controller/posts_controller.rb:3 - use model association"
22
+ errors[0].to_s.should == "app/controller/posts_controller.rb:3 - use model association (for @post)"
23
23
  end
24
24
 
25
25
  it "should not use model association without association assign" do
@@ -51,7 +51,7 @@ describe RailsBestPractices::Checks::UseModelAssociationCheck do
51
51
  @runner.check('app/controller/posts_controller.rb', content)
52
52
  errors = @runner.errors
53
53
  errors.should_not be_empty
54
- errors[0].to_s.should == "app/controller/posts_controller.rb:3 - use model association"
54
+ errors[0].to_s.should == "app/controller/posts_controller.rb:3 - use model association (for post)"
55
55
  end
56
56
 
57
57
  it "should not use model association" do
@@ -68,4 +68,4 @@ describe RailsBestPractices::Checks::UseModelAssociationCheck do
68
68
  errors = @runner.errors
69
69
  errors.should be_empty
70
70
  end
71
- end
71
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_best_practices
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-05 00:00:00 +08:00
12
+ date: 2009-11-06 00:00:00 +08:00
13
13
  default_executable: rails_best_practices
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -55,7 +55,9 @@ files:
55
55
  - lib/rails_best_practices/checks/many_to_many_collection_check.rb
56
56
  - lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb
57
57
  - lib/rails_best_practices/checks/move_model_logic_into_model_check.rb
58
+ - lib/rails_best_practices/checks/needless_deep_nesting_check.rb
58
59
  - lib/rails_best_practices/checks/nested_model_forms_check.rb
60
+ - lib/rails_best_practices/checks/not_use_default_route_check.rb
59
61
  - lib/rails_best_practices/checks/overuse_route_customizations_check.rb
60
62
  - lib/rails_best_practices/checks/replace_complex_creation_with_factory_method_check.rb
61
63
  - lib/rails_best_practices/checks/use_model_association_check.rb
@@ -74,7 +76,9 @@ files:
74
76
  - spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
75
77
  - spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
76
78
  - spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb
79
+ - spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
77
80
  - spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
81
+ - spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
78
82
  - spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb
79
83
  - spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb
80
84
  - spec/rails_best_practices/checks/use_model_association_check_spec.rb
@@ -112,6 +116,7 @@ specification_version: 3
112
116
  summary: check rails files according to ihower's presentation 'rails best practices'
113
117
  test_files:
114
118
  - spec/rails_best_practices/checks/use_scope_access_check_spec.rb
119
+ - spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
115
120
  - spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
116
121
  - spec/rails_best_practices/checks/use_model_callback_check_spec.rb
117
122
  - spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
@@ -120,5 +125,6 @@ test_files:
120
125
  - spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb
121
126
  - spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
122
127
  - spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
128
+ - spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
123
129
  - spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb
124
130
  - spec/spec_helper.rb