rails_best_practices 1.19.3 → 1.19.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +4 -0
- data/Gemfile +0 -4
- data/Gemfile.lock +120 -0
- data/README.md +4 -1
- data/lib/rails_best_practices.rb +2 -0
- data/lib/rails_best_practices/analyzer.rb +5 -4
- data/lib/rails_best_practices/cli.rb +22 -0
- data/lib/rails_best_practices/command.rb +1 -131
- data/lib/rails_best_practices/core/check.rb +24 -23
- data/lib/rails_best_practices/core/checks_loader.rb +17 -18
- data/lib/rails_best_practices/core/methods.rb +9 -8
- data/lib/rails_best_practices/core/model_associations.rb +1 -1
- data/lib/rails_best_practices/core/runner.rb +38 -38
- data/lib/rails_best_practices/option_parser.rb +140 -0
- data/lib/rails_best_practices/prepares/controller_prepare.rb +8 -14
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +1 -1
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +3 -3
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +1 -1
- data/lib/rails_best_practices/prepares/model_prepare.rb +13 -13
- data/lib/rails_best_practices/prepares/route_prepare.rb +16 -15
- data/lib/rails_best_practices/prepares/schema_prepare.rb +1 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +25 -23
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +73 -72
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +2 -1
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +4 -3
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +1 -1
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +1 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +11 -11
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +8 -8
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +5 -5
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +20 -19
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -3
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +5 -5
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +5 -5
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +13 -13
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +1 -1
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -2
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +1 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -3
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +32 -32
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +4 -4
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +14 -14
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +6 -6
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +15 -15
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +8 -8
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +71 -70
- data/lib/rails_best_practices/reviews/review.rb +2 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +1 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +11 -11
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +12 -9
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +10 -10
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +14 -13
- data/lib/rails_best_practices/reviews/use_observer_review.rb +20 -20
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +6 -6
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +44 -41
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +7 -7
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +14 -14
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +1 -1
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +8 -8
- data/spec/rails_best_practices/analyzer_spec.rb +4 -4
- data/spec/rails_best_practices/core/error_spec.rb +6 -3
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +21 -21
- data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +15 -15
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +17 -15
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +4 -4
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +8 -8
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +4 -2
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +6 -4
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +8 -6
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +16 -14
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +4 -4
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +14 -14
- data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +51 -51
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5465e0c3226433bf68485822ab52b54993f334c4
|
4
|
+
data.tar.gz: 05650ce6bef4b2c0bd89ac24401d3119c708313f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 514d93fb5333c09d93b65838aeaa3942d693c1e8c1e7b7bf388d198c5b2aca36be0820a97abf29825ef4e127233d1af0d7b911f3968f54e388530cc3e19c08f7
|
7
|
+
data.tar.gz: f502d73f187def721cbcb7df9c09fc2652b23cdd80f082b96a6301d1a3733f0dceafe0dd1c8c87dd089fcf678761c36aa7f81431908c44f2b9eb2b14a7014858
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rails_best_practices (1.19.4)
|
5
|
+
activesupport
|
6
|
+
code_analyzer (>= 0.4.8)
|
7
|
+
erubis
|
8
|
+
i18n
|
9
|
+
json
|
10
|
+
require_all (~> 2.0)
|
11
|
+
ruby-progressbar
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: https://rubygems.org/
|
15
|
+
specs:
|
16
|
+
activesupport (5.2.1)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (>= 0.7, < 2)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
tzinfo (~> 1.1)
|
21
|
+
awesome_print (1.6.1)
|
22
|
+
code_analyzer (0.4.8)
|
23
|
+
sexp_processor
|
24
|
+
coderay (1.1.1)
|
25
|
+
concurrent-ruby (1.0.5)
|
26
|
+
coveralls (0.8.11)
|
27
|
+
json (~> 1.8)
|
28
|
+
simplecov (~> 0.11.0)
|
29
|
+
term-ansicolor (~> 1.3)
|
30
|
+
thor (~> 0.19.1)
|
31
|
+
tins (~> 1.6.0)
|
32
|
+
diff-lcs (1.2.5)
|
33
|
+
docile (1.1.5)
|
34
|
+
erubis (2.7.0)
|
35
|
+
ffi (1.9.10)
|
36
|
+
formatador (0.2.5)
|
37
|
+
guard (2.13.0)
|
38
|
+
formatador (>= 0.2.4)
|
39
|
+
listen (>= 2.7, <= 4.0)
|
40
|
+
lumberjack (~> 1.0)
|
41
|
+
nenv (~> 0.1)
|
42
|
+
notiffany (~> 0.0)
|
43
|
+
pry (>= 0.9.12)
|
44
|
+
shellany (~> 0.0)
|
45
|
+
thor (>= 0.18.1)
|
46
|
+
guard-rspec (4.3.1)
|
47
|
+
guard (~> 2.1)
|
48
|
+
rspec (>= 2.14, < 4.0)
|
49
|
+
haml (4.0.7)
|
50
|
+
tilt
|
51
|
+
i18n (1.1.1)
|
52
|
+
concurrent-ruby (~> 1.0)
|
53
|
+
json (1.8.6)
|
54
|
+
listen (3.0.6)
|
55
|
+
rb-fsevent (>= 0.9.3)
|
56
|
+
rb-inotify (>= 0.9.7)
|
57
|
+
lumberjack (1.0.10)
|
58
|
+
method_source (0.8.2)
|
59
|
+
minitest (5.11.3)
|
60
|
+
nenv (0.3.0)
|
61
|
+
notiffany (0.0.8)
|
62
|
+
nenv (~> 0.1)
|
63
|
+
shellany (~> 0.0)
|
64
|
+
pry (0.10.3)
|
65
|
+
coderay (~> 1.1.0)
|
66
|
+
method_source (~> 0.8.1)
|
67
|
+
slop (~> 3.4)
|
68
|
+
rake (10.5.0)
|
69
|
+
rb-fsevent (0.9.7)
|
70
|
+
rb-inotify (0.9.7)
|
71
|
+
ffi (>= 0.5.0)
|
72
|
+
require_all (2.0.0)
|
73
|
+
rspec (2.14.1)
|
74
|
+
rspec-core (~> 2.14.0)
|
75
|
+
rspec-expectations (~> 2.14.0)
|
76
|
+
rspec-mocks (~> 2.14.0)
|
77
|
+
rspec-core (2.14.8)
|
78
|
+
rspec-expectations (2.14.5)
|
79
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
80
|
+
rspec-mocks (2.14.6)
|
81
|
+
ruby-progressbar (1.10.0)
|
82
|
+
sexp_processor (4.10.1)
|
83
|
+
shellany (0.0.1)
|
84
|
+
simplecov (0.11.2)
|
85
|
+
docile (~> 1.1.0)
|
86
|
+
json (~> 1.8)
|
87
|
+
simplecov-html (~> 0.10.0)
|
88
|
+
simplecov-html (0.10.0)
|
89
|
+
slim (3.0.6)
|
90
|
+
temple (~> 0.7.3)
|
91
|
+
tilt (>= 1.3.3, < 2.1)
|
92
|
+
slop (3.6.0)
|
93
|
+
temple (0.7.6)
|
94
|
+
term-ansicolor (1.3.2)
|
95
|
+
tins (~> 1.0)
|
96
|
+
thor (0.19.1)
|
97
|
+
thread_safe (0.3.6)
|
98
|
+
tilt (2.0.2)
|
99
|
+
tins (1.6.0)
|
100
|
+
tzinfo (1.2.5)
|
101
|
+
thread_safe (~> 0.1)
|
102
|
+
|
103
|
+
PLATFORMS
|
104
|
+
ruby
|
105
|
+
|
106
|
+
DEPENDENCIES
|
107
|
+
awesome_print
|
108
|
+
bundler
|
109
|
+
coveralls
|
110
|
+
guard
|
111
|
+
guard-rspec
|
112
|
+
haml
|
113
|
+
pry
|
114
|
+
rails_best_practices!
|
115
|
+
rake (< 11.0)
|
116
|
+
rspec (~> 2.14.0)
|
117
|
+
slim
|
118
|
+
|
119
|
+
BUNDLED WITH
|
120
|
+
1.16.0
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/rails_best_practices.svg)](http://badge.fury.io/rb/rails_best_practices)
|
4
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
|
-
[![AwesomeCode Status for flyerhzm/rails_best_practices](https://awesomecode.io/projects/d02ecd70-e068-4ad4-b61a-7003ac24b49a/status)](https://awesomecode.io/
|
6
|
+
[![AwesomeCode Status for flyerhzm/rails_best_practices](https://awesomecode.io/projects/d02ecd70-e068-4ad4-b61a-7003ac24b49a/status)](https://awesomecode.io/repos/flyerhzm/rails_best_practices)
|
7
7
|
|
8
8
|
[![Coderwall Endorse](http://api.coderwall.com/flyerhzm/endorsecount.png)](http://coderwall.com/flyerhzm)
|
9
9
|
[![Click here to lend your support to: rails best practices and make a donation at www.pledgie.com !](https://pledgie.com/campaigns/12057.png?skin_name=chrome)](https://pledgie.com/campaigns/12057)
|
@@ -182,6 +182,9 @@ Now you can customize this configuration file. The default configuration is as f
|
|
182
182
|
UseScopeAccessCheck: { }
|
183
183
|
UseTurboSprocketsRails3Check: { }
|
184
184
|
|
185
|
+
Now, at the root directory of a Rails app, run:
|
186
|
+
|
187
|
+
rails_best_practices . -c config/rails_best_practices.yml
|
185
188
|
|
186
189
|
You can remove or comment a review to disable it, and you can change the options.
|
187
190
|
|
data/lib/rails_best_practices.rb
CHANGED
@@ -8,6 +8,8 @@ require 'rails_best_practices/analyzer'
|
|
8
8
|
require 'rails_best_practices/lexicals'
|
9
9
|
require 'rails_best_practices/prepares'
|
10
10
|
require 'rails_best_practices/reviews'
|
11
|
+
require 'rails_best_practices/option_parser'
|
12
|
+
require 'rails_best_practices/cli'
|
11
13
|
|
12
14
|
module RailsBestPractices
|
13
15
|
end
|
@@ -19,7 +19,7 @@ module RailsBestPractices
|
|
19
19
|
attr_reader :path
|
20
20
|
|
21
21
|
DEFAULT_CONFIG = File.join(File.dirname(__FILE__), '..', '..', 'rails_best_practices.yml')
|
22
|
-
GITHUB_URL = 'https://github.com/'
|
22
|
+
GITHUB_URL = 'https://github.com/'
|
23
23
|
|
24
24
|
# initialize
|
25
25
|
#
|
@@ -137,14 +137,15 @@ module RailsBestPractices
|
|
137
137
|
def expand_dirs_to_files(*dirs)
|
138
138
|
extensions = %w[rb erb rake rhtml haml slim builder rxml rabl]
|
139
139
|
|
140
|
-
dirs.flatten.map
|
140
|
+
dirs.flatten.map do |entry|
|
141
141
|
next unless File.exist? entry
|
142
|
+
|
142
143
|
if File.directory? entry
|
143
144
|
Dir[File.join(entry, '**', "*.{#{extensions.join(',')}}")]
|
144
145
|
else
|
145
146
|
entry
|
146
147
|
end
|
147
|
-
|
148
|
+
end.flatten
|
148
149
|
end
|
149
150
|
|
150
151
|
# sort files, models first, mailers, helpers, and then sort other files by characters.
|
@@ -226,7 +227,7 @@ module RailsBestPractices
|
|
226
227
|
template = @options['template'] ? File.read(File.expand_path(@options['template'])) : File.read(File.join(File.dirname(__FILE__), '..', '..', 'assets', 'result.html.erb'))
|
227
228
|
|
228
229
|
if @options['with-github']
|
229
|
-
last_commit_id = @options['last-commit-id']
|
230
|
+
last_commit_id = @options['last-commit-id'] || `cd #{@runner.class.base_path} && git rev-parse HEAD`.chomp
|
230
231
|
unless @options['github-name'].start_with?('https')
|
231
232
|
@options['github-name'] = GITHUB_URL + @options['github-name']
|
232
233
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsBestPractices
|
4
|
+
class CLI
|
5
|
+
# Run analyze with ruby code
|
6
|
+
# @param [Array] argv command argments
|
7
|
+
# @return [Boolean] return true, if there is no violation.
|
8
|
+
# @example
|
9
|
+
# RailsBestPractices::CLI.run(['-d', '-o', 'path/to/file'])
|
10
|
+
def self.run(argv)
|
11
|
+
options = OptionParser.parse!(argv)
|
12
|
+
if !argv.empty? && !File.exist?(argv.first)
|
13
|
+
raise Errno::ENOENT, "#{argv.first} doesn't exist"
|
14
|
+
end
|
15
|
+
|
16
|
+
analyzer = Analyzer.new(argv.first, options)
|
17
|
+
analyzer.analyze
|
18
|
+
analyzer.output
|
19
|
+
analyzer.runner.errors.empty?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,137 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'optparse'
|
4
|
-
|
5
|
-
# Usage: rails_best_practices [options] path
|
6
|
-
# -d, --debug debug mode
|
7
|
-
# --silent silent mode
|
8
|
-
# -f, --format FORMAT output format (text, html, yml, json, xml)
|
9
|
-
# --output-file FILE output html file for the analyzing result
|
10
|
-
# --without-color only output plain text without color
|
11
|
-
# --with-textmate open file by textmate in html format
|
12
|
-
# --with-sublime open file by sublime in html format (requires subl-handler)
|
13
|
-
# --with-mvim open file by mvim in html format
|
14
|
-
# --with-github GITHUB_NAME open file on github in html format, GITHUB_NAME is like railsbp/rails-bestpractices.com
|
15
|
-
# --with-git display git commit and username, only support html format
|
16
|
-
# --with-hg display hg commit and username, only support html format
|
17
|
-
# --template TEMPLATE customize erb template
|
18
|
-
# --vendor include vendor files
|
19
|
-
# --spec include spec files
|
20
|
-
# --test include test files
|
21
|
-
# --features include features files
|
22
|
-
# -x, --exclude PATTERNS don't analyze files matching a pattern
|
23
|
-
# (comma-separated regexp list)
|
24
|
-
# -o, --only PATTERNS analyze files only matching a pattern
|
25
|
-
# (comma-separated regexp list)
|
26
|
-
# -g, --generate generate configuration yaml
|
27
|
-
# -v, --version show this version
|
28
|
-
# -h, --help show this message
|
29
|
-
|
30
|
-
options = {}
|
31
|
-
|
32
|
-
OptionParser.new do |opts|
|
33
|
-
opts.banner = 'Usage: rails_best_practices [options] path'
|
34
|
-
|
35
|
-
opts.on('-d', '--debug', 'Debug mode') do
|
36
|
-
options['debug'] = true
|
37
|
-
end
|
38
|
-
|
39
|
-
opts.on('-f', '--format FORMAT', 'output format (text, html, yml, json, xml)') do |format|
|
40
|
-
options['format'] = format
|
41
|
-
end
|
42
|
-
|
43
|
-
opts.on('--without-color', 'only output plain text without color') do
|
44
|
-
options['without-color'] = true
|
45
|
-
end
|
46
|
-
|
47
|
-
opts.on('--with-textmate', 'open file by textmate in html format') do
|
48
|
-
options['with-textmate'] = true
|
49
|
-
end
|
50
|
-
|
51
|
-
opts.on('--with-sublime', 'open file by sublime in html format') do
|
52
|
-
options['with-sublime'] = true
|
53
|
-
end
|
54
|
-
|
55
|
-
opts.on('--with-mvim', 'open file by mvim in html format') do
|
56
|
-
options['with-mvim'] = true
|
57
|
-
end
|
58
|
-
|
59
|
-
opts.on('--with-github GITHUB_NAME', 'open file on github in html format') do |github_name|
|
60
|
-
options['with-github'] = true
|
61
|
-
options['github-name'] = github_name
|
62
|
-
end
|
63
|
-
|
64
|
-
opts.on('--last-commit-id COMMIT_ID', 'last commit id') do |commit_id|
|
65
|
-
options['last-commit-id'] = commit_id
|
66
|
-
end
|
67
|
-
|
68
|
-
opts.on('--with-hg', 'display hg commit and username, only support html format') do
|
69
|
-
options['with-hg'] = true
|
70
|
-
end
|
71
|
-
|
72
|
-
opts.on('--with-git', 'display git commit and username, only support html format') do
|
73
|
-
options['with-git'] = true
|
74
|
-
end
|
75
|
-
|
76
|
-
opts.on('--template TEMPLATE', 'customize erb template') do |template|
|
77
|
-
options['template'] = template
|
78
|
-
end
|
79
|
-
|
80
|
-
opts.on('--output-file OUTPUT_FILE', 'output html file for the analyzing result') do |output_file|
|
81
|
-
options['output-file'] = output_file
|
82
|
-
end
|
83
|
-
|
84
|
-
opts.on('--silent', 'silent mode') do
|
85
|
-
options['silent'] = true
|
86
|
-
end
|
87
|
-
|
88
|
-
%w[vendor spec test features].each do |pattern|
|
89
|
-
opts.on("--#{pattern}", "include #{pattern} files") do
|
90
|
-
options[pattern] = true
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
opts.on_tail('-v', '--version', 'Show this version') do
|
95
|
-
require 'rails_best_practices/version'
|
96
|
-
puts RailsBestPractices::VERSION
|
97
|
-
exit
|
98
|
-
end
|
99
|
-
|
100
|
-
opts.on_tail('-h', '--help', 'Show this message') do
|
101
|
-
puts opts
|
102
|
-
exit
|
103
|
-
end
|
104
|
-
|
105
|
-
opts.on('-x', '--exclude PATTERNS', "Don't analyze files matching a pattern", '(comma-separated regexp list)') do |list|
|
106
|
-
begin
|
107
|
-
options['exclude'] = list.split(',').map { |x| Regexp.new x }
|
108
|
-
rescue RegexpError => e
|
109
|
-
raise OptionParser::InvalidArgument, e.message
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
opts.on('-o', '--only PATTERNS', 'Analyze files only matching a pattern', '(comma-separated regexp list)') do |list|
|
114
|
-
begin
|
115
|
-
options['only'] = list.split(',').map { |x| Regexp.new x }
|
116
|
-
rescue RegexpError => e
|
117
|
-
raise OptionParser::InvalidArgument e.message
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
opts.on('-g', '--generate', 'Generate configuration yaml') do
|
122
|
-
options['generate'] = true
|
123
|
-
end
|
124
|
-
|
125
|
-
opts.on(
|
126
|
-
'-c',
|
127
|
-
'--config CONFIG_PATH', 'configuration file location (defaults to config/rails_best_practices.yml)'
|
128
|
-
) do |config_path|
|
129
|
-
options['config'] = config_path
|
130
|
-
end
|
131
|
-
|
132
|
-
opts.parse!
|
133
|
-
end
|
134
|
-
|
4
|
+
options = RailsBestPractices::OptionParser.parse!
|
135
5
|
if !ARGV.empty? && !File.exist?(ARGV.first)
|
136
6
|
puts "#{ARGV.first} doesn't exist"
|
137
7
|
exit 1
|
@@ -240,7 +240,7 @@ module RailsBestPractices
|
|
240
240
|
else
|
241
241
|
mark_used(node.message)
|
242
242
|
last_argument = node.arguments.all.last
|
243
|
-
if last_argument.present? &&
|
243
|
+
if last_argument.present? && last_argument.sexp_type == :bare_assoc_hash
|
244
244
|
last_argument.hash_values.each { |argument_value| mark_used(argument_value) }
|
245
245
|
end
|
246
246
|
end
|
@@ -283,27 +283,28 @@ module RailsBestPractices
|
|
283
283
|
|
284
284
|
private
|
285
285
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
call_method(method_name)
|
286
|
+
def mark_used(method_node)
|
287
|
+
return if method_node == :call
|
288
|
+
|
289
|
+
if method_node.sexp_type == :bare_assoc_hash
|
290
|
+
method_node.hash_values.each { |value_node| mark_used(value_node) }
|
291
|
+
elsif method_node.sexp_type == :array
|
292
|
+
method_node.array_values.each { |value_node| mark_used(value_node) }
|
293
|
+
else
|
294
|
+
method_name = method_node.to_s
|
296
295
|
end
|
296
|
+
call_method(method_name)
|
297
|
+
end
|
297
298
|
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
end
|
303
|
-
methods.mark_parent_class_method_used(class_name, method_name)
|
304
|
-
methods.mark_subclasses_method_used(class_name, method_name)
|
305
|
-
methods.possible_public_used(method_name)
|
299
|
+
def call_method(method_name, class_name = nil)
|
300
|
+
class_name ||= respond_to?(:current_class_name) ? current_class_name : current_module_name
|
301
|
+
if methods.has_method?(class_name, method_name)
|
302
|
+
methods.get_method(class_name, method_name).mark_used
|
306
303
|
end
|
304
|
+
methods.mark_parent_class_method_used(class_name, method_name)
|
305
|
+
methods.mark_subclasses_method_used(class_name, method_name)
|
306
|
+
methods.possible_public_used(method_name)
|
307
|
+
end
|
307
308
|
end
|
308
309
|
end
|
309
310
|
end
|
@@ -317,21 +318,21 @@ module RailsBestPractices
|
|
317
318
|
|
318
319
|
# check if the controller is inherit from InheritedResources::Base.
|
319
320
|
add_callback :start_class do |_node|
|
320
|
-
if 'InheritedResources::Base'
|
321
|
+
if current_extend_class_name == 'InheritedResources::Base'
|
321
322
|
@inherited_resources = true
|
322
323
|
end
|
323
324
|
end
|
324
325
|
|
325
326
|
# check if there is a DSL call inherit_resources.
|
326
327
|
add_callback :start_var_ref do |node|
|
327
|
-
if 'inherit_resources'
|
328
|
+
if node.to_s == 'inherit_resources'
|
328
329
|
@inherited_resources = true
|
329
330
|
end
|
330
331
|
end
|
331
332
|
|
332
333
|
# check if there is a DSL call inherit_resources.
|
333
334
|
add_callback :start_vcall do |node|
|
334
|
-
if 'inherit_resources'
|
335
|
+
if node.to_s == 'inherit_resources'
|
335
336
|
@inherited_resources = true
|
336
337
|
end
|
337
338
|
end
|
@@ -350,7 +351,7 @@ module RailsBestPractices
|
|
350
351
|
# check if the method is in the except methods list.
|
351
352
|
def excepted?(method)
|
352
353
|
is_ignored?(method.file) ||
|
353
|
-
|
354
|
+
except_methods.any? { |except_method| Exceptable.matches method, except_method }
|
354
355
|
end
|
355
356
|
|
356
357
|
def internal_except_methods
|