rails_best_practices 0.6.5 → 0.6.6
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/MIT_LICENSE +1 -1
- data/README.md +8 -7
- data/assets/result.html.haml +11 -3
- data/autotest/discover.rb +1 -0
- data/install_supported_rubies.sh +8 -0
- data/lib/rails_best_practices.rb +5 -3
- data/lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb +3 -0
- data/lib/rails_best_practices/checks/always_add_db_index_check.rb +3 -0
- data/lib/rails_best_practices/checks/check.rb +1 -1
- data/lib/rails_best_practices/checks/dry_bundler_in_capistrano_check.rb +3 -0
- data/lib/rails_best_practices/checks/isolate_seed_data_check.rb +3 -0
- data/lib/rails_best_practices/checks/keep_finders_on_their_own_model_check.rb +4 -0
- data/lib/rails_best_practices/checks/law_of_demeter_check.rb +4 -0
- data/lib/rails_best_practices/checks/move_code_into_controller_check.rb +4 -0
- data/lib/rails_best_practices/checks/move_code_into_helper_check.rb +3 -0
- data/lib/rails_best_practices/checks/move_code_into_model_check.rb +3 -0
- data/lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb +4 -0
- data/lib/rails_best_practices/checks/move_model_logic_into_model_check.rb +3 -0
- data/lib/rails_best_practices/checks/needless_deep_nesting_check.rb +3 -0
- data/lib/rails_best_practices/checks/not_use_default_route_check.rb +3 -0
- data/lib/rails_best_practices/checks/overuse_route_customizations_check.rb +4 -0
- data/lib/rails_best_practices/checks/replace_complex_creation_with_factory_method_check.rb +3 -0
- data/lib/rails_best_practices/checks/replace_instance_variable_with_local_variable_check.rb +3 -0
- data/lib/rails_best_practices/checks/use_before_filter_check.rb +12 -2
- data/lib/rails_best_practices/checks/use_model_association_check.rb +3 -0
- data/lib/rails_best_practices/checks/use_observer_check.rb +3 -0
- data/lib/rails_best_practices/checks/use_query_attribute_check.rb +4 -0
- data/lib/rails_best_practices/checks/use_say_with_time_in_migrations_check.rb +3 -0
- data/lib/rails_best_practices/checks/use_scope_access_check.rb +3 -0
- data/lib/rails_best_practices/command.rb +17 -11
- data/lib/rails_best_practices/core/error.rb +3 -2
- data/lib/rails_best_practices/core/runner.rb +7 -3
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +16 -0
- data/rake_rubies.sh +9 -0
- data/spec/rails_best_practices/checks/use_before_filter_check_spec.rb +20 -0
- data/spec/rails_best_practices_spec.rb +2 -2
- metadata +22 -6
- data/rubies_test.sh +0 -10
data/MIT_LICENSE
CHANGED
data/README.md
CHANGED
@@ -3,11 +3,6 @@ rails_best_practices
|
|
3
3
|
|
4
4
|
rails_best_practices is a code metric tool to check the quality of rails codes.
|
5
5
|
|
6
|
-
Donate
|
7
|
-
------
|
8
|
-
|
9
|
-
<a href='http://www.pledgie.com/campaigns/12057'><img alt='Click here to lend your support to: rails-bestpractices.com and make a donation at www.pledgie.com !' src='http://www.pledgie.com/campaigns/12057.png?skin_name=chrome' border='0' /></a>
|
10
|
-
|
11
6
|
Usage
|
12
7
|
-----
|
13
8
|
|
@@ -26,6 +21,7 @@ By default rails_best_practices will do parse codes in vendor, spec, test and fe
|
|
26
21
|
-d, --debug Debug mode
|
27
22
|
-f, --format FORMAT output format
|
28
23
|
--without-color only output plain text without color
|
24
|
+
--with-textmate open file by textmate in html format
|
29
25
|
--vendor include vendor files
|
30
26
|
--spec include spec files
|
31
27
|
--test include test files
|
@@ -53,6 +49,11 @@ Wiki: <http://github.com/flyerhzm/rails_best_practices/wiki>
|
|
53
49
|
|
54
50
|
Issue Tracker: <http://github.com/flyerhzm/rails_best_practices/issues>
|
55
51
|
|
52
|
+
Donating
|
53
|
+
--------
|
54
|
+
|
55
|
+
<a href='http://www.pledgie.com/campaigns/12057'>Support rails_best_practices at Pledgie</a>
|
56
|
+
|
56
57
|
Install
|
57
58
|
-------
|
58
59
|
|
@@ -74,7 +75,7 @@ First run
|
|
74
75
|
|
75
76
|
rails_best_practices -g
|
76
77
|
|
77
|
-
to generate
|
78
|
+
to generate `rails_best_practices.yml` file.
|
78
79
|
|
79
80
|
Now you can customize this configuration file, the default configuration is as follows:
|
80
81
|
|
@@ -164,4 +165,4 @@ Follow us on twitter: <http://twitter.com/railsbp>
|
|
164
165
|
Send us email: <team@rails-bestpractices.com>
|
165
166
|
|
166
167
|
|
167
|
-
Copyright ©
|
168
|
+
Copyright © 2009 - 2011 Richard Huang (flyerhzm@gmail.com), released under the MIT license
|
data/assets/result.html.haml
CHANGED
@@ -35,7 +35,10 @@
|
|
35
35
|
}
|
36
36
|
%body
|
37
37
|
%h1 rails_best_practices output
|
38
|
-
%h2
|
38
|
+
%h2
|
39
|
+
Please go to
|
40
|
+
%a{:href=>"http://rails-bestpractices.com", :target=>"_blank"} http://rails-bestpractices.com
|
41
|
+
to see more useful Rails Best Practices.
|
39
42
|
%h2
|
40
43
|
- if errors.empty?
|
41
44
|
No error found. Cool!
|
@@ -48,6 +51,11 @@
|
|
48
51
|
%th Error Message
|
49
52
|
- errors.each do |error|
|
50
53
|
%tr
|
51
|
-
%td.filename
|
54
|
+
%td.filename
|
55
|
+
- if textmate
|
56
|
+
%a{:href=>"txmt://open/?url=file://#{File.expand_path(error.filename)}&line=#{error.line_number}"}= error.filename
|
57
|
+
- else
|
58
|
+
= error.filename
|
52
59
|
%td.line-number= error.line_number
|
53
|
-
%td.message
|
60
|
+
%td.message
|
61
|
+
%a{:href=>"#{error.url}", :target=>"_blank"}= error.message
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/lib/rails_best_practices.rb
CHANGED
@@ -28,6 +28,7 @@ require 'colored'
|
|
28
28
|
require 'haml'
|
29
29
|
require 'rails_best_practices/checks'
|
30
30
|
require 'rails_best_practices/core'
|
31
|
+
require 'fileutils'
|
31
32
|
|
32
33
|
# RailsBestPractices helps you to analyze your rails code, according to best practices on http://rails-bestpractices.
|
33
34
|
# if it finds any violatioins to best practices, it will give you some readable suggestions.
|
@@ -70,10 +71,11 @@ module RailsBestPractices
|
|
70
71
|
Core::Runner.base_path = @path
|
71
72
|
@runner = Core::Runner.new
|
72
73
|
@runner.debug = true if @options['debug']
|
74
|
+
@runner.color = !options['without-color']
|
73
75
|
|
74
76
|
if @runner.checks.find { |check| check.is_a? Checks::AlwaysAddDbIndexCheck } &&
|
75
77
|
!review_files.find { |file| file.index "db\/schema.rb" }
|
76
|
-
|
78
|
+
plain_output("AlwaysAddDbIndexCheck is disabled as there is no db/schema.rb file in your rails project.", 'blue')
|
77
79
|
end
|
78
80
|
|
79
81
|
@bar = ProgressBar.new('Analyzing', prepare_files.size + review_files.size)
|
@@ -139,7 +141,7 @@ module RailsBestPractices
|
|
139
141
|
# @param [Array] dirs what directories to expand
|
140
142
|
# @return [Array] all files expanded
|
141
143
|
def expand_dirs_to_files *dirs
|
142
|
-
extensions = ['rb', 'erb', 'haml', 'builder']
|
144
|
+
extensions = ['rb', 'erb', 'rhtml', 'haml', 'builder']
|
143
145
|
|
144
146
|
dirs.flatten.map { |entry|
|
145
147
|
next unless File.exist? entry
|
@@ -206,7 +208,7 @@ module RailsBestPractices
|
|
206
208
|
template = File.read(File.join(File.dirname(__FILE__), "..", "assets", "result.html.haml"))
|
207
209
|
|
208
210
|
File.open("rails_best_practices_output.html", "w+") do |file|
|
209
|
-
file.puts Haml::Engine.new(template).render(Object.new, :errors => @runner.errors)
|
211
|
+
file.puts Haml::Engine.new(template).render(Object.new, :errors => @runner.errors, :textmate => @options["with-textmate"])
|
210
212
|
end
|
211
213
|
end
|
212
214
|
end
|
@@ -27,6 +27,9 @@ module RailsBestPractices
|
|
27
27
|
#
|
28
28
|
# then the model needs to add a virtual attribute.
|
29
29
|
class AddModelVirtualAttributeCheck < Check
|
30
|
+
def url
|
31
|
+
"http://rails-bestpractices.com/posts/4-add-model-virtual-attribute"
|
32
|
+
end
|
30
33
|
|
31
34
|
def interesting_review_nodes
|
32
35
|
[:defn]
|
@@ -27,6 +27,9 @@ module RailsBestPractices
|
|
27
27
|
# if there are any foreign keys not existed in index columns,
|
28
28
|
# then the foreign keys should add db index.
|
29
29
|
class AlwaysAddDbIndexCheck < Check
|
30
|
+
def url
|
31
|
+
"http://rails-bestpractices.com/posts/21-always-add-db-index"
|
32
|
+
end
|
30
33
|
|
31
34
|
def interesting_review_nodes
|
32
35
|
[:call, :iter]
|
@@ -137,7 +137,7 @@ module RailsBestPractices
|
|
137
137
|
# file is the filename of source code
|
138
138
|
# line is the line number of the source code which is reviewing
|
139
139
|
def add_error(error, file = @node.file, line = @node.line)
|
140
|
-
@errors << RailsBestPractices::Core::Error.new("#{file}", "#{line}", error)
|
140
|
+
@errors << RailsBestPractices::Core::Error.new("#{file}", "#{line}", error, url)
|
141
141
|
end
|
142
142
|
|
143
143
|
# remember use count for the local or instance variable in the call or attrasgn node.
|
@@ -18,6 +18,9 @@ module RailsBestPractices
|
|
18
18
|
# if the message of call node is :namespace and the arguments of the call node is :bundler,
|
19
19
|
# then it should use bundler's capistrano recipe.
|
20
20
|
class DryBundlerInCapistranoCheck < Check
|
21
|
+
def url
|
22
|
+
"http://rails-bestpractices.com/posts/51-dry-bundler-in-capistrano"
|
23
|
+
end
|
21
24
|
|
22
25
|
def interesting_review_nodes
|
23
26
|
[:call]
|
@@ -24,6 +24,9 @@ module RailsBestPractices
|
|
24
24
|
# and the subject is included in new variables,
|
25
25
|
# then it should be isolated to db seed.
|
26
26
|
class IsolateSeedDataCheck < Check
|
27
|
+
def url
|
28
|
+
"http://rails-bestpractices.com/posts/20-isolating-seed-data"
|
29
|
+
end
|
27
30
|
|
28
31
|
def interesting_review_nodes
|
29
32
|
[:call, :lasgn, :iasgn]
|
@@ -22,6 +22,9 @@ module RailsBestPractices
|
|
22
22
|
# and the size of the array is greater than array_count defined,
|
23
23
|
# then the options_for_select method should be moved into helper.
|
24
24
|
class MoveCodeIntoHelperCheck < Check
|
25
|
+
def url
|
26
|
+
"http://rails-bestpractices.com/posts/26-move-code-into-helper"
|
27
|
+
end
|
25
28
|
|
26
29
|
def interesting_review_nodes
|
27
30
|
[:call]
|
@@ -17,6 +17,9 @@ module RailsBestPractices
|
|
17
17
|
# and the subject is a local variable or instance variable,
|
18
18
|
# then they should be moved into model.
|
19
19
|
class MoveCodeIntoModelCheck < Check
|
20
|
+
def url
|
21
|
+
"http://rails-bestpractices.com/posts/25-move-code-into-model"
|
22
|
+
end
|
20
23
|
|
21
24
|
def interesting_review_nodes
|
22
25
|
[:if]
|
@@ -18,6 +18,9 @@ module RailsBestPractices
|
|
18
18
|
# and the subject is a local variable or an instance variable,
|
19
19
|
# then they are complex model logic, and they should be moved into model.
|
20
20
|
class MoveModelLogicIntoModelCheck < Check
|
21
|
+
def url
|
22
|
+
"http://rails-bestpractices.com/posts/7-move-model-logic-into-the-model"
|
23
|
+
end
|
21
24
|
|
22
25
|
def interesting_review_nodes
|
23
26
|
[:defn]
|
@@ -30,6 +30,9 @@ module RailsBestPractices
|
|
30
30
|
# and the @counter is greater than @nested_count defined,
|
31
31
|
# then it is a needless deep nesting.
|
32
32
|
class NeedlessDeepNestingCheck < Check
|
33
|
+
def url
|
34
|
+
"http://rails-bestpractices.com/posts/11-needless-deep-nesting"
|
35
|
+
end
|
33
36
|
|
34
37
|
def interesting_review_nodes
|
35
38
|
[:call, :iter]
|
@@ -22,6 +22,9 @@ module RailsBestPractices
|
|
22
22
|
#
|
23
23
|
# match ':controller(/:action(/:id(.:format)))'
|
24
24
|
class NotUseDefaultRouteCheck < Check
|
25
|
+
def url
|
26
|
+
"http://rails-bestpractices.com/posts/12-not-use-default-route-if-you-use-restful-design"
|
27
|
+
end
|
25
28
|
|
26
29
|
def interesting_review_nodes
|
27
30
|
[:call]
|
@@ -19,6 +19,9 @@ module RailsBestPractices
|
|
19
19
|
# and after them there is a call node with message :save or :save!,
|
20
20
|
# then these attribute assignments are complex creation, should be replaced with factory method.
|
21
21
|
class ReplaceComplexCreationWithFactoryMethodCheck < Check
|
22
|
+
def url
|
23
|
+
"http://rails-bestpractices.com/posts/6-replace-complex-creation-with-factory-method"
|
24
|
+
end
|
22
25
|
|
23
26
|
def interesting_review_nodes
|
24
27
|
[:defn]
|
@@ -16,6 +16,9 @@ module RailsBestPractices
|
|
16
16
|
# check all instance variable in partial view files,
|
17
17
|
# if exist, then they should be replaced with local variable
|
18
18
|
class ReplaceInstanceVariableWithLocalVariableCheck < Check
|
19
|
+
def url
|
20
|
+
"http://rails-bestpractices.com/posts/27-replace-instance-variable-with-local-variable"
|
21
|
+
end
|
19
22
|
|
20
23
|
def interesting_review_nodes
|
21
24
|
[:ivar]
|
@@ -17,6 +17,12 @@ module RailsBestPractices
|
|
17
17
|
# if they are duplicated, then they should be moved to before_filter.
|
18
18
|
class UseBeforeFilterCheck < Check
|
19
19
|
|
20
|
+
PROTECTED_PRIVATE_CALLS = [[:call, nil, :protected, [:arglist]], [:call, nil, :private, [:arglist]]]
|
21
|
+
|
22
|
+
def url
|
23
|
+
"http://rails-bestpractices.com/posts/22-use-before_filter"
|
24
|
+
end
|
25
|
+
|
20
26
|
def interesting_review_nodes
|
21
27
|
[:class]
|
22
28
|
end
|
@@ -27,7 +33,7 @@ module RailsBestPractices
|
|
27
33
|
|
28
34
|
# check class define node to see if there are method define nodes whose first code line are duplicated in review process.
|
29
35
|
#
|
30
|
-
# it will every defn nodes in the class node,
|
36
|
+
# it will check every defn nodes in the class node until protected or private identification,
|
31
37
|
# if there are defn nodes who have the same first code line, like
|
32
38
|
#
|
33
39
|
# s(:class, :PostsController, s(:const, :ApplicationController),
|
@@ -70,7 +76,11 @@ module RailsBestPractices
|
|
70
76
|
# then these duplicated first code lines should be moved to before_filter.
|
71
77
|
def review_start_class(class_node)
|
72
78
|
@first_sentences = {}
|
73
|
-
|
79
|
+
|
80
|
+
class_node.body.children.each do |child_node|
|
81
|
+
break if PROTECTED_PRIVATE_CALLS.include? child_node
|
82
|
+
remember_first_sentence(child_node) if :defn == child_node.node_type
|
83
|
+
end
|
74
84
|
@first_sentences.each do |first_sentence, defn_nodes|
|
75
85
|
if defn_nodes.size > 1
|
76
86
|
add_error "use before_filter for #{defn_nodes.collect(&:method_name).join(',')}", class_node.file, defn_nodes.collect(&:line).join(',')
|
@@ -19,6 +19,9 @@ module RailsBestPractices
|
|
19
19
|
# and the subjects of attribute assignment node and call node are the same,
|
20
20
|
# then model association should be used instead of xxx_id assignment.
|
21
21
|
class UseModelAssociationCheck < Check
|
22
|
+
def url
|
23
|
+
"http://rails-bestpractices.com/posts/2-use-model-association"
|
24
|
+
end
|
22
25
|
|
23
26
|
def interesting_review_nodes
|
24
27
|
[:defn]
|
@@ -24,6 +24,9 @@ module RailsBestPractices
|
|
24
24
|
# and there is a mailer deliver call,
|
25
25
|
# then the method should be replaced by using observer.
|
26
26
|
class UseObserverCheck < Check
|
27
|
+
def url
|
28
|
+
"http://rails-bestpractices.com/posts/19-use-observer"
|
29
|
+
end
|
27
30
|
|
28
31
|
def interesting_prepare_nodes
|
29
32
|
[:class]
|
@@ -22,6 +22,9 @@ module RailsBestPractices
|
|
22
22
|
DEFAULT_MIGRATION_METHODS = [:add_column, :add_index, :add_timestamps, :change_column, :change_column_default, :change_table, :create_table, :drop_table, :remove_column, :remove_index, :remove_timestamps, :rename_column, :rename_index, :rename_table]
|
23
23
|
WITH_SAY_METHODS = DEFAULT_MIGRATION_METHODS + [:say, :say_with_time]
|
24
24
|
|
25
|
+
def url
|
26
|
+
"http://rails-bestpractices.com/posts/46-use-say-and-say_with_time-in-migrations-to-make-a-useful-migration-log"
|
27
|
+
end
|
25
28
|
|
26
29
|
def interesting_review_nodes
|
27
30
|
[:defs]
|
@@ -19,6 +19,9 @@ module RailsBestPractices
|
|
19
19
|
# and there is redirect_to method call in if block body,
|
20
20
|
# then it should be replaced by using scope access.
|
21
21
|
class UseScopeAccessCheck < Check
|
22
|
+
def url
|
23
|
+
"http://rails-bestpractices.com/posts/3-use-scope-access"
|
24
|
+
end
|
22
25
|
|
23
26
|
def interesting_review_nodes
|
24
27
|
[:if]
|
@@ -2,17 +2,19 @@
|
|
2
2
|
require 'optparse'
|
3
3
|
|
4
4
|
# Usage: rails_best_practices [options] path
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
5
|
+
# -d, --debug Debug mode
|
6
|
+
# -f, --format FORMAT output format
|
7
|
+
# --without-color only output plain text without color
|
8
|
+
# --with-textmate open file by textmate in html format
|
9
|
+
# --vendor include vendor files
|
10
|
+
# --spec include spec files
|
11
|
+
# --test include test files
|
12
|
+
# --features include features files
|
13
|
+
# -x, --exclude PATTERNS Don't analyze files matching a pattern
|
14
|
+
# (comma-separated regexp list)
|
15
|
+
# -g, --generate Generate configuration yaml
|
16
|
+
# -v, --version Show this version
|
17
|
+
# -h, --help Show this message
|
16
18
|
options = {}
|
17
19
|
OptionParser.new do |opts|
|
18
20
|
opts.banner = "Usage: rails_best_practices [options] path"
|
@@ -29,6 +31,10 @@ OptionParser.new do |opts|
|
|
29
31
|
options["without-color"] = true
|
30
32
|
end
|
31
33
|
|
34
|
+
opts.on("--with-textmate", "open file by textmate in html format") do
|
35
|
+
options["with-textmate"] = true
|
36
|
+
end
|
37
|
+
|
32
38
|
['vendor', 'spec', 'test', 'features'].each do |pattern|
|
33
39
|
opts.on("--#{pattern}", "include #{pattern} files") do
|
34
40
|
options[pattern] = true
|
@@ -5,12 +5,13 @@ module RailsBestPractices
|
|
5
5
|
#
|
6
6
|
# it indicates the filenname, line number and error message for the violation.
|
7
7
|
class Error
|
8
|
-
attr_reader :filename, :line_number, :message
|
8
|
+
attr_reader :filename, :line_number, :message, :url
|
9
9
|
|
10
|
-
def initialize(filename, line_number, message)
|
10
|
+
def initialize(filename, line_number, message, url = nil)
|
11
11
|
@filename = filename
|
12
12
|
@line_number = line_number
|
13
13
|
@message = message
|
14
|
+
@url = url
|
14
15
|
end
|
15
16
|
|
16
17
|
def to_s
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
# 2. review process, it does real check, if the source code violates some best practices, the violations will be notified.
|
16
16
|
class Runner
|
17
17
|
attr_reader :checks
|
18
|
-
attr_accessor :debug
|
18
|
+
attr_accessor :debug, :color
|
19
19
|
|
20
20
|
# set the base path.
|
21
21
|
#
|
@@ -78,7 +78,11 @@ module RailsBestPractices
|
|
78
78
|
begin
|
79
79
|
RubyParser.new.parse(content, filename)
|
80
80
|
rescue Exception => e
|
81
|
-
|
81
|
+
if @debug
|
82
|
+
warning = "#{filename} looks like it's not a valid Ruby file. Skipping..."
|
83
|
+
warning = warning.red if self.color
|
84
|
+
puts warning
|
85
|
+
end
|
82
86
|
nil
|
83
87
|
end
|
84
88
|
end
|
@@ -88,7 +92,7 @@ module RailsBestPractices
|
|
88
92
|
# filename is the filename of the erb or haml code.
|
89
93
|
# content is the source code of erb or haml file.
|
90
94
|
def parse_erb_or_haml(filename, content)
|
91
|
-
if filename =~ /.*\.erb$/
|
95
|
+
if filename =~ /.*\.erb|.*\.rhtml$/
|
92
96
|
content = Erubis::Eruby.new(content).src
|
93
97
|
elsif filename =~ /.*\.haml$/
|
94
98
|
begin
|
@@ -29,4 +29,20 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
30
30
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
31
31
|
s.require_paths = ["lib"]
|
32
|
+
|
33
|
+
s.post_install_message = <<-POST_INSTALL_MESSAGE
|
34
|
+
#{"*" * 80}
|
35
|
+
|
36
|
+
rails_best_practices is a code metric tool to check the quality of rails codes.
|
37
|
+
|
38
|
+
I highly recommend you go through the Rails Best Practices website first.
|
39
|
+
|
40
|
+
http://rails-bestpractices.com
|
41
|
+
|
42
|
+
Enjoy!
|
43
|
+
|
44
|
+
Richard Huang (flyerhzm@gmail.com)
|
45
|
+
|
46
|
+
#{"*" * 80}
|
47
|
+
POST_INSTALL_MESSAGE
|
32
48
|
end
|
data/rake_rubies.sh
ADDED
@@ -82,4 +82,24 @@ describe RailsBestPractices::Checks::UseBeforeFilterCheck do
|
|
82
82
|
errors = @runner.errors
|
83
83
|
errors.should be_empty
|
84
84
|
end
|
85
|
+
|
86
|
+
it "should not use before_filter for protected/private methods" do
|
87
|
+
content =<<-EOF
|
88
|
+
class PostsController < ApplicationController
|
89
|
+
protected
|
90
|
+
def load_comments
|
91
|
+
load_post
|
92
|
+
@comments = @post.comments
|
93
|
+
end
|
94
|
+
|
95
|
+
def load_user
|
96
|
+
load_post
|
97
|
+
@user = @post.user
|
98
|
+
end
|
99
|
+
end
|
100
|
+
EOF
|
101
|
+
@runner.review('app/controllers/posts_controller.rb', content)
|
102
|
+
errors = @runner.errors
|
103
|
+
errors.should be_empty
|
104
|
+
end
|
85
105
|
end
|
@@ -26,7 +26,7 @@ describe RailsBestPractices do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe "
|
29
|
+
describe "output_terminal_errors" do
|
30
30
|
check1 = RailsBestPractices::Checks::LawOfDemeterCheck.new
|
31
31
|
check2 = RailsBestPractices::Checks::UseQueryAttributeCheck.new
|
32
32
|
runner = RailsBestPractices::Core::Runner.new(check1, check2)
|
@@ -36,7 +36,7 @@ describe RailsBestPractices do
|
|
36
36
|
|
37
37
|
$origin_stdout = $stdout
|
38
38
|
$stdout = StringIO.new
|
39
|
-
RailsBestPractices.
|
39
|
+
RailsBestPractices.output_terminal_errors
|
40
40
|
result = $stdout.string
|
41
41
|
$stdout = $origin_stdout
|
42
42
|
result.should == ["app/models/user.rb:10 - law of demeter".red, "app/models/post.rb:100 - use query attribute".red, "\nPlease go to http://rails-bestpractices.com to see more useful Rails Best Practices.".green, "\nFound 2 errors.".red].join("\n") + "\n"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 6
|
10
|
+
version: 0.6.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Richard Huang
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-24 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -192,7 +192,9 @@ files:
|
|
192
192
|
- README.md
|
193
193
|
- Rakefile
|
194
194
|
- assets/result.html.haml
|
195
|
+
- autotest/discover.rb
|
195
196
|
- bin/rails_best_practices
|
197
|
+
- install_supported_rubies.sh
|
196
198
|
- lib/rails_best_practices.rb
|
197
199
|
- lib/rails_best_practices/checks.rb
|
198
200
|
- lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb
|
@@ -229,7 +231,7 @@ files:
|
|
229
231
|
- lib/rails_best_practices/version.rb
|
230
232
|
- rails_best_practices.gemspec
|
231
233
|
- rails_best_practices.yml
|
232
|
-
-
|
234
|
+
- rake_rubies.sh
|
233
235
|
- spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
|
234
236
|
- spec/rails_best_practices/checks/always_add_db_index_check_spec.rb
|
235
237
|
- spec/rails_best_practices/checks/check_spec.rb
|
@@ -263,7 +265,21 @@ has_rdoc: true
|
|
263
265
|
homepage: http://rails-bestpractices.com
|
264
266
|
licenses: []
|
265
267
|
|
266
|
-
post_install_message:
|
268
|
+
post_install_message: |
|
269
|
+
********************************************************************************
|
270
|
+
|
271
|
+
rails_best_practices is a code metric tool to check the quality of rails codes.
|
272
|
+
|
273
|
+
I highly recommend you go through the Rails Best Practices website first.
|
274
|
+
|
275
|
+
http://rails-bestpractices.com
|
276
|
+
|
277
|
+
Enjoy!
|
278
|
+
|
279
|
+
Richard Huang (flyerhzm@gmail.com)
|
280
|
+
|
281
|
+
********************************************************************************
|
282
|
+
|
267
283
|
rdoc_options: []
|
268
284
|
|
269
285
|
require_paths:
|
data/rubies_test.sh
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
rvm ruby-1.8.7@rails_best_practices ruby -S bundle install || exit $?
|
3
|
-
rvm ruby-1.9.2@rails_best_practices ruby -S bundle install || exit $?
|
4
|
-
rvm ree@rails_best_practices ruby -S bundle install || exit $?
|
5
|
-
rvm 1.8.7@rails_best_practices
|
6
|
-
rake spec:progress
|
7
|
-
rvm 1.9.2@rails_best_practices
|
8
|
-
rake spec:progress
|
9
|
-
rvm ree@rails_best_practices
|
10
|
-
rake spec:progress
|