rails_best_practices 1.19.1 → 1.19.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Guardfile +1 -1
- data/README.md +1 -0
- data/Rakefile +2 -2
- data/bin/rails_best_practices +2 -1
- data/lib/rails_best_practices.rb +2 -1
- data/lib/rails_best_practices/analyzer.rb +13 -12
- data/lib/rails_best_practices/colorize.rb +2 -0
- data/lib/rails_best_practices/command.rb +6 -5
- data/lib/rails_best_practices/core.rb +2 -1
- data/lib/rails_best_practices/core/check.rb +19 -17
- data/lib/rails_best_practices/core/checks_loader.rb +3 -2
- data/lib/rails_best_practices/core/configs.rb +2 -1
- data/lib/rails_best_practices/core/controllers.rb +4 -1
- data/lib/rails_best_practices/core/error.rb +3 -2
- data/lib/rails_best_practices/core/gems.rb +4 -3
- data/lib/rails_best_practices/core/helpers.rb +4 -1
- data/lib/rails_best_practices/core/klasses.rb +3 -2
- data/lib/rails_best_practices/core/mailers.rb +2 -1
- data/lib/rails_best_practices/core/methods.rb +9 -10
- data/lib/rails_best_practices/core/model_associations.rb +6 -5
- data/lib/rails_best_practices/core/model_attributes.rb +2 -1
- data/lib/rails_best_practices/core/models.rb +2 -1
- data/lib/rails_best_practices/core/modules.rb +2 -1
- data/lib/rails_best_practices/core/routes.rb +2 -1
- data/lib/rails_best_practices/core/runner.rb +7 -6
- data/lib/rails_best_practices/core_ext/erubis.rb +4 -5
- data/lib/rails_best_practices/lexicals.rb +2 -1
- data/lib/rails_best_practices/lexicals/long_line_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -1
- data/lib/rails_best_practices/prepares.rb +2 -1
- data/lib/rails_best_practices/prepares/config_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/controller_prepare.rb +9 -8
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/helper_prepare.rb +4 -3
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
- data/lib/rails_best_practices/prepares/route_prepare.rb +8 -7
- data/lib/rails_best_practices/prepares/schema_prepare.rb +3 -2
- data/lib/rails_best_practices/reviews.rb +2 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +7 -4
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +8 -7
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +4 -3
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +5 -4
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -1
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +2 -1
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +3 -2
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -1
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +5 -4
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -2
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +11 -10
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +6 -5
- 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 -1
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +8 -8
- data/lib/rails_best_practices/reviews/review.rb +4 -3
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +5 -4
- 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 +5 -5
- data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
- data/lib/rails_best_practices/version.rb +3 -2
- data/rails_best_practices.gemspec +11 -10
- data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +3 -2
- data/spec/rails_best_practices/analyzer_spec.rb +6 -8
- data/spec/rails_best_practices/core/check_spec.rb +2 -0
- data/spec/rails_best_practices/core/checks_loader_spec.rb +2 -0
- data/spec/rails_best_practices/core/configs_spec.rb +2 -0
- data/spec/rails_best_practices/core/controllers_spec.rb +2 -0
- data/spec/rails_best_practices/core/error_spec.rb +2 -0
- data/spec/rails_best_practices/core/except_methods_spec.rb +2 -0
- data/spec/rails_best_practices/core/gems_spec.rb +2 -0
- data/spec/rails_best_practices/core/helpers_spec.rb +2 -0
- data/spec/rails_best_practices/core/klasses_spec.rb +2 -0
- data/spec/rails_best_practices/core/mailers_spec.rb +2 -0
- data/spec/rails_best_practices/core/methods_spec.rb +6 -4
- data/spec/rails_best_practices/core/model_associations_spec.rb +4 -2
- data/spec/rails_best_practices/core/model_attributes_spec.rb +2 -0
- data/spec/rails_best_practices/core/models_spec.rb +2 -0
- data/spec/rails_best_practices/core/modules_spec.rb +2 -0
- data/spec/rails_best_practices/core/routes_spec.rb +4 -2
- data/spec/rails_best_practices/core/runner_spec.rb +2 -0
- data/spec/rails_best_practices/core_ext/erubis_spec.rb +3 -1
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +8 -7
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +8 -6
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +9 -7
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +23 -21
- data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +7 -5
- data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +4 -2
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +56 -54
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +39 -37
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +12 -10
- data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +20 -18
- data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +11 -9
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +21 -19
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -4
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +33 -31
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +65 -63
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +24 -22
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- metadata +26 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e41de74a9e0a16b8a3b3feb2fb709f21aec80098
|
4
|
+
data.tar.gz: 98f10516376d7de5d3144b767196aa952b274748
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21e177d13d0f2137aebe7d683e87af1b97d53046e53b6bbd4722ae943a1061c5c6f740dee8efe9bc713c0be4550b70016849e17033faa6fd17e33a1204645963
|
7
|
+
data.tar.gz: 81473ba0611d37c8a4a005710983330d0aa6a8c4537ba976e71d93bc670f8ef4fda1d492a44fe1966d2dc0bd91452460ade65f250f252238c187bbe9064e5935
|
data/CHANGELOG.md
CHANGED
data/Guardfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
guard 'rspec', :
|
4
|
+
guard 'rspec', version: 2, all_after_pass: false, all_on_start: false, cli: '--color --format nested --fail-fast' do
|
5
5
|
watch(%r{^spec/.+_spec\.rb$})
|
6
6
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
7
|
watch('spec/spec_helper.rb') { 'spec' }
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](http://badge.fury.io/rb/rails_best_practices)
|
4
4
|
[](http://travis-ci.org/flyerhzm/rails_best_practices)
|
5
5
|
[](https://coveralls.io/r/railsbp/rails_best_practices)
|
6
|
+
[](https://awesomecode.io/projects/8)
|
6
7
|
|
7
8
|
[](http://coderwall.com/flyerhzm)
|
8
9
|
[](https://pledgie.com/campaigns/12057)
|
data/Rakefile
CHANGED
data/bin/rails_best_practices
CHANGED
data/lib/rails_best_practices.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'fileutils'
|
3
4
|
require 'json'
|
4
5
|
require 'ruby-progressbar'
|
@@ -18,7 +19,7 @@ module RailsBestPractices
|
|
18
19
|
attr_reader :path
|
19
20
|
|
20
21
|
DEFAULT_CONFIG = File.join(File.dirname(__FILE__), '..', '..', 'rails_best_practices.yml')
|
21
|
-
GITHUB_URL = 'https://github.com/'
|
22
|
+
GITHUB_URL = 'https://github.com/'.freeze
|
22
23
|
|
23
24
|
# initialize
|
24
25
|
#
|
@@ -88,7 +89,7 @@ module RailsBestPractices
|
|
88
89
|
begin
|
89
90
|
puts file if @options['debug']
|
90
91
|
@runner.send(process, file, File.read(file))
|
91
|
-
rescue
|
92
|
+
rescue StandardError
|
92
93
|
if @options['debug']
|
93
94
|
warning = "#{file} looks like it's not a valid Ruby file. Skipping..."
|
94
95
|
plain_output(warning, 'red')
|
@@ -112,7 +113,7 @@ module RailsBestPractices
|
|
112
113
|
end
|
113
114
|
|
114
115
|
# By default, tmp, vender, spec, test, features are ignored.
|
115
|
-
[
|
116
|
+
%w[vendor spec test features tmp].each do |dir|
|
116
117
|
files = file_ignore(files, File.join(@path, dir)) unless @options[dir]
|
117
118
|
end
|
118
119
|
|
@@ -121,7 +122,7 @@ module RailsBestPractices
|
|
121
122
|
files = file_ignore(files, pattern)
|
122
123
|
end
|
123
124
|
|
124
|
-
%w
|
125
|
+
%w[Capfile Gemfile Gemfile.lock].each do |file|
|
125
126
|
files.unshift File.join(@path, file)
|
126
127
|
end
|
127
128
|
|
@@ -134,7 +135,7 @@ module RailsBestPractices
|
|
134
135
|
# @param [Array] dirs what directories to expand
|
135
136
|
# @return [Array] all files expanded
|
136
137
|
def expand_dirs_to_files(*dirs)
|
137
|
-
extensions = [
|
138
|
+
extensions = %w[rb erb rake rhtml haml slim builder rxml rabl]
|
138
139
|
|
139
140
|
dirs.flatten.map { |entry|
|
140
141
|
next unless File.exist? entry
|
@@ -157,7 +158,7 @@ module RailsBestPractices
|
|
157
158
|
mailers = files.find_all { |file| file =~ Core::Check::MAILER_FILES }
|
158
159
|
helpers = files.find_all { |file| file =~ Core::Check::HELPER_FILES }
|
159
160
|
others = files.find_all { |file| file !~ Core::Check::MAILER_FILES && file !~ Core::Check::MODEL_FILES && file !~ Core::Check::HELPER_FILES }
|
160
|
-
|
161
|
+
models + mailers + helpers + others
|
161
162
|
end
|
162
163
|
|
163
164
|
# ignore specific files.
|
@@ -174,7 +175,7 @@ module RailsBestPractices
|
|
174
175
|
# @param [Array] files
|
175
176
|
# @param [Regexp] patterns, files match any pattern will be accepted
|
176
177
|
def file_accept(files, patterns)
|
177
|
-
files.
|
178
|
+
files.select { |file| patterns.any? { |pattern| file =~ pattern } }
|
178
179
|
end
|
179
180
|
|
180
181
|
# output errors on terminal.
|
@@ -190,7 +191,7 @@ module RailsBestPractices
|
|
190
191
|
|
191
192
|
# load hg commit and hg username info.
|
192
193
|
def load_hg_info
|
193
|
-
hg_progressbar = ProgressBar.create(:
|
194
|
+
hg_progressbar = ProgressBar.create(title: 'Hg Info', total: errors.size) if display_bar?
|
194
195
|
errors.each do |error|
|
195
196
|
hg_info = `cd #{@runner.class.base_path} && hg blame -lvcu #{error.filename[@runner.class.base_path.size..-1].gsub(/^\//, '')} | sed -n /:#{error.line_number.split(',').first}:/p`
|
196
197
|
unless hg_info == ''
|
@@ -205,7 +206,7 @@ module RailsBestPractices
|
|
205
206
|
|
206
207
|
# load git commit and git username info.
|
207
208
|
def load_git_info
|
208
|
-
git_progressbar = ProgressBar.create(:
|
209
|
+
git_progressbar = ProgressBar.create(title: 'Git Info', total: errors.size) if display_bar?
|
209
210
|
start = @runner.class.base_path =~ /\/$/ ? @runner.class.base_path.size : @runner.class.base_path.size + 1
|
210
211
|
errors.each do |error|
|
211
212
|
git_info = `cd #{@runner.class.base_path} && git blame -L #{error.line_number.split(',').first},+1 #{error.filename[start..-1]}`
|
@@ -313,8 +314,8 @@ module RailsBestPractices
|
|
313
314
|
|
314
315
|
# analyze source codes.
|
315
316
|
def analyze_source_codes
|
316
|
-
@bar = ProgressBar.create(:
|
317
|
-
[
|
317
|
+
@bar = ProgressBar.create(title: 'Source Code', total: parse_files.size * 3) if display_bar?
|
318
|
+
%w[lexical prepare review].each { |process| send(:process, process) }
|
318
319
|
@bar.finish if display_bar?
|
319
320
|
end
|
320
321
|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'optparse'
|
3
4
|
|
4
5
|
# Usage: rails_best_practices [options] path
|
@@ -84,7 +85,7 @@ OptionParser.new do |opts|
|
|
84
85
|
options['silent'] = true
|
85
86
|
end
|
86
87
|
|
87
|
-
[
|
88
|
+
%w[vendor spec test features].each do |pattern|
|
88
89
|
opts.on("--#{pattern}", "include #{pattern} files") do
|
89
90
|
options[pattern] = true
|
90
91
|
end
|
@@ -103,7 +104,7 @@ OptionParser.new do |opts|
|
|
103
104
|
|
104
105
|
opts.on('-x', '--exclude PATTERNS', "Don't analyze files matching a pattern", '(comma-separated regexp list)') do |list|
|
105
106
|
begin
|
106
|
-
options['exclude'] = list.split(',').map{|x| Regexp.new x}
|
107
|
+
options['exclude'] = list.split(',').map { |x| Regexp.new x }
|
107
108
|
rescue RegexpError => e
|
108
109
|
raise OptionParser::InvalidArgument, e.message
|
109
110
|
end
|
@@ -131,7 +132,7 @@ OptionParser.new do |opts|
|
|
131
132
|
opts.parse!
|
132
133
|
end
|
133
134
|
|
134
|
-
if ARGV.
|
135
|
+
if !ARGV.empty? && !File.exist?(ARGV.first)
|
135
136
|
puts "#{ARGV.first} doesn't exist"
|
136
137
|
exit 1
|
137
138
|
end
|
@@ -142,5 +143,5 @@ else
|
|
142
143
|
analyzer = RailsBestPractices::Analyzer.new(ARGV.first, options)
|
143
144
|
analyzer.analyze
|
144
145
|
analyzer.output
|
145
|
-
exit analyzer.runner.errors.
|
146
|
+
exit !analyzer.runner.errors.empty? ? 1 : 0
|
146
147
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
# A Check class that takes charge of checking the sexp.
|
@@ -21,7 +22,7 @@ module RailsBestPractices
|
|
21
22
|
|
22
23
|
SKIP_FILES = /db\/schema.rb/
|
23
24
|
|
24
|
-
def initialize(options={})
|
25
|
+
def initialize(options = {})
|
25
26
|
options.each do |key, value|
|
26
27
|
instance_variable_set("@#{key}", value)
|
27
28
|
end
|
@@ -46,11 +47,11 @@ module RailsBestPractices
|
|
46
47
|
end
|
47
48
|
|
48
49
|
def is_ignored?(node_file)
|
49
|
-
regex_ignored_files.map{ |r| !!r.match(node_file) }.inject(:|)
|
50
|
+
regex_ignored_files.map { |r| !!r.match(node_file) }.inject(:|)
|
50
51
|
end
|
51
52
|
|
52
53
|
def regex_ignored_files
|
53
|
-
@regex_ignored_files ||= Array(@ignored_files).map{ |pattern| Regexp.new(pattern) }
|
54
|
+
@regex_ignored_files ||= Array(@ignored_files).map { |pattern| Regexp.new(pattern) }
|
54
55
|
end
|
55
56
|
|
56
57
|
# add error if source code violates rails best practice.
|
@@ -99,7 +100,7 @@ module RailsBestPractices
|
|
99
100
|
end
|
100
101
|
|
101
102
|
class <<self
|
102
|
-
def url(url=nil)
|
103
|
+
def url(url = nil)
|
103
104
|
url ? @url = url : @url
|
104
105
|
end
|
105
106
|
|
@@ -124,7 +125,7 @@ module RailsBestPractices
|
|
124
125
|
end
|
125
126
|
|
126
127
|
# end of the module.
|
127
|
-
add_callback :end_module do |
|
128
|
+
add_callback :end_module do |_node|
|
128
129
|
classable_modules.pop
|
129
130
|
end
|
130
131
|
|
@@ -136,7 +137,7 @@ module RailsBestPractices
|
|
136
137
|
end
|
137
138
|
|
138
139
|
# end of the class
|
139
|
-
add_callback :end_class do |
|
140
|
+
add_callback :end_class do |_node|
|
140
141
|
klasses.pop
|
141
142
|
# @klass = nil
|
142
143
|
end
|
@@ -175,7 +176,7 @@ module RailsBestPractices
|
|
175
176
|
end
|
176
177
|
|
177
178
|
# end of module
|
178
|
-
add_callback :end_module do |
|
179
|
+
add_callback :end_module do |_node|
|
179
180
|
moduleable_modules.pop
|
180
181
|
end
|
181
182
|
end
|
@@ -272,7 +273,7 @@ module RailsBestPractices
|
|
272
273
|
when 'try'
|
273
274
|
mark_used(node.arguments.all.first)
|
274
275
|
when 'send'
|
275
|
-
if [
|
276
|
+
if %i[symbol_literal string_literal].include?(node.arguments.all.first.sexp_type)
|
276
277
|
mark_used(node.arguments.all.first)
|
277
278
|
end
|
278
279
|
else
|
@@ -281,6 +282,7 @@ module RailsBestPractices
|
|
281
282
|
end
|
282
283
|
|
283
284
|
private
|
285
|
+
|
284
286
|
def mark_used(method_node)
|
285
287
|
return if method_node == :call
|
286
288
|
if :bare_assoc_hash == method_node.sexp_type
|
@@ -293,7 +295,7 @@ module RailsBestPractices
|
|
293
295
|
call_method(method_name)
|
294
296
|
end
|
295
297
|
|
296
|
-
def call_method(method_name, class_name=nil)
|
298
|
+
def call_method(method_name, class_name = nil)
|
297
299
|
name ||= respond_to?(:current_class_name) ? current_class_name : current_module_name
|
298
300
|
if methods.has_method?(name, method_name)
|
299
301
|
methods.get_method(name, method_name).mark_used
|
@@ -314,7 +316,7 @@ module RailsBestPractices
|
|
314
316
|
interesting_files CONTROLLER_FILES
|
315
317
|
|
316
318
|
# check if the controller is inherit from InheritedResources::Base.
|
317
|
-
add_callback :start_class do |
|
319
|
+
add_callback :start_class do |_node|
|
318
320
|
if 'InheritedResources::Base' == current_extend_class_name
|
319
321
|
@inherited_resources = true
|
320
322
|
end
|
@@ -352,12 +354,12 @@ module RailsBestPractices
|
|
352
354
|
end
|
353
355
|
|
354
356
|
def internal_except_methods
|
355
|
-
raise NoMethodError
|
357
|
+
raise NoMethodError, 'no method internal_except_methods'
|
356
358
|
end
|
357
359
|
end
|
358
360
|
end
|
359
361
|
|
360
|
-
def self.matches
|
362
|
+
def self.matches(method, except_method)
|
361
363
|
class_name, method_name = except_method.split('#')
|
362
364
|
|
363
365
|
method_name = '.*' if method_name == '*'
|
@@ -389,25 +391,25 @@ module RailsBestPractices
|
|
389
391
|
|
390
392
|
# remember the current access control for methods.
|
391
393
|
add_callback :start_var_ref do |node|
|
392
|
-
if %w
|
394
|
+
if %w[public protected private].include? node.to_s
|
393
395
|
@access_control = node.to_s
|
394
396
|
end
|
395
397
|
end
|
396
398
|
|
397
399
|
# remember the current access control for methods.
|
398
400
|
add_callback :start_vcall do |node|
|
399
|
-
if %w
|
401
|
+
if %w[public protected private].include? node.to_s
|
400
402
|
@access_control = node.to_s
|
401
403
|
end
|
402
404
|
end
|
403
405
|
|
404
406
|
# set access control to "public" by default.
|
405
|
-
add_callback :start_class do |
|
407
|
+
add_callback :start_class do |_node|
|
406
408
|
@access_control = 'public'
|
407
409
|
end
|
408
410
|
|
409
411
|
# set access control to "public" by default.
|
410
|
-
add_callback :start_module do |
|
412
|
+
add_callback :start_module do |_node|
|
411
413
|
@access_control = 'public'
|
412
414
|
end
|
413
415
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
# Error is the violation to rails best practice.
|
@@ -8,7 +9,7 @@ module RailsBestPractices
|
|
8
9
|
attr_reader :type, :url
|
9
10
|
attr_accessor :git_commit, :git_username, :hg_commit, :hg_username
|
10
11
|
|
11
|
-
def initialize(options={})
|
12
|
+
def initialize(options = {})
|
12
13
|
super
|
13
14
|
@type = options[:type]
|
14
15
|
@url = options[:url]
|
@@ -1,13 +1,14 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
class Gems < Array
|
5
6
|
def has_gem?(gem_name)
|
6
|
-
|
7
|
+
find { |gem| gem.name == gem_name }
|
7
8
|
end
|
8
9
|
|
9
10
|
def gem_version(gem_name)
|
10
|
-
|
11
|
+
find { |gem| gem.name == gem_name }.try(:version)
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module RailsBestPractices
|
3
4
|
module Core
|
4
5
|
# Klass container.
|
@@ -19,7 +20,7 @@ module RailsBestPractices
|
|
19
20
|
def initialize(class_name, extend_class_name, modules)
|
20
21
|
@modules = modules.dup
|
21
22
|
base = @modules.map { |modu| "#{modu}::" }.join('')
|
22
|
-
@class_name =
|
23
|
+
@class_name = base + class_name
|
23
24
|
if extend_class_name
|
24
25
|
@extend_class_name = base + extend_class_name
|
25
26
|
end
|