rails_best_practices 1.19.3 → 1.19.4

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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile +0 -4
  5. data/Gemfile.lock +120 -0
  6. data/README.md +4 -1
  7. data/lib/rails_best_practices.rb +2 -0
  8. data/lib/rails_best_practices/analyzer.rb +5 -4
  9. data/lib/rails_best_practices/cli.rb +22 -0
  10. data/lib/rails_best_practices/command.rb +1 -131
  11. data/lib/rails_best_practices/core/check.rb +24 -23
  12. data/lib/rails_best_practices/core/checks_loader.rb +17 -18
  13. data/lib/rails_best_practices/core/methods.rb +9 -8
  14. data/lib/rails_best_practices/core/model_associations.rb +1 -1
  15. data/lib/rails_best_practices/core/runner.rb +38 -38
  16. data/lib/rails_best_practices/option_parser.rb +140 -0
  17. data/lib/rails_best_practices/prepares/controller_prepare.rb +8 -14
  18. data/lib/rails_best_practices/prepares/gemfile_prepare.rb +1 -1
  19. data/lib/rails_best_practices/prepares/initializer_prepare.rb +3 -3
  20. data/lib/rails_best_practices/prepares/mailer_prepare.rb +1 -1
  21. data/lib/rails_best_practices/prepares/model_prepare.rb +13 -13
  22. data/lib/rails_best_practices/prepares/route_prepare.rb +16 -15
  23. data/lib/rails_best_practices/prepares/schema_prepare.rb +1 -1
  24. data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +25 -23
  25. data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +73 -72
  26. data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +2 -1
  27. data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +4 -3
  28. data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +1 -1
  29. data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +1 -1
  30. data/lib/rails_best_practices/reviews/hash_syntax_review.rb +11 -11
  31. data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +8 -8
  32. data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +5 -5
  33. data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +20 -19
  34. data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -3
  35. data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +5 -5
  36. data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +5 -5
  37. data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +13 -13
  38. data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +1 -1
  39. data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -2
  40. data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +1 -1
  41. data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -3
  42. data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +32 -32
  43. data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +4 -4
  44. data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +14 -14
  45. data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +6 -6
  46. data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +15 -15
  47. data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +8 -8
  48. data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +71 -70
  49. data/lib/rails_best_practices/reviews/review.rb +2 -1
  50. data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +1 -1
  51. data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +11 -11
  52. data/lib/rails_best_practices/reviews/use_before_filter_review.rb +12 -9
  53. data/lib/rails_best_practices/reviews/use_model_association_review.rb +10 -10
  54. data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +14 -13
  55. data/lib/rails_best_practices/reviews/use_observer_review.rb +20 -20
  56. data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +6 -6
  57. data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +44 -41
  58. data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +7 -7
  59. data/lib/rails_best_practices/reviews/use_scope_access_review.rb +14 -14
  60. data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +1 -1
  61. data/lib/rails_best_practices/version.rb +1 -1
  62. data/rails_best_practices.gemspec +8 -8
  63. data/spec/rails_best_practices/analyzer_spec.rb +4 -4
  64. data/spec/rails_best_practices/core/error_spec.rb +6 -3
  65. data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +21 -21
  66. data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +15 -15
  67. data/spec/rails_best_practices/prepares/route_prepare_spec.rb +17 -15
  68. data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +4 -4
  69. data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +8 -8
  70. data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +6 -6
  71. data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +4 -2
  72. data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +6 -4
  73. data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +8 -6
  74. data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +16 -14
  75. data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +4 -4
  76. data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +14 -14
  77. data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +1 -1
  78. data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +51 -51
  79. metadata +5 -2
@@ -20,31 +20,30 @@ module RailsBestPractices
20
20
  private
21
21
 
22
22
  # read the checks from yaml config.
23
- def checks_from_config
24
- @checks ||= YAML.load_file @config
25
- end
23
+ def checks_from_config
24
+ @checks ||= YAML.load_file @config
25
+ end
26
26
 
27
27
  # load all checks from the configuration
28
- def load_checks_from_config(&block)
29
- checks_from_config.inject([]) do |active_checks, check|
30
- check_instance = instantiate_check(block, *check)
31
- active_checks << check_instance unless check_instance.nil?
32
- active_checks
33
- end
28
+ def load_checks_from_config(&block)
29
+ checks_from_config.each_with_object([]) do |check, active_checks|
30
+ check_instance = instantiate_check(block, *check)
31
+ active_checks << check_instance unless check_instance.nil?
34
32
  end
33
+ end
35
34
 
36
35
  # instantiates a check
37
- def instantiate_check(block, check_name, options)
38
- check_class = load_check_class(check_name, &block)
39
- check_class.new(options || {}) unless check_class.nil?
40
- end
36
+ def instantiate_check(block, check_name, options)
37
+ check_class = load_check_class(check_name, &block)
38
+ check_class.new(options || {}) unless check_class.nil?
39
+ end
41
40
 
42
41
  # loads the class for a check by calling the given block
43
- def load_check_class(check_name, &block)
44
- block.call(check_name)
45
- rescue NameError
46
- # nothing to do, the check does not exist
47
- end
42
+ def load_check_class(check_name)
43
+ yield(check_name)
44
+ rescue NameError
45
+ # nothing to do, the check does not exist
46
+ end
48
47
  end
49
48
  end
50
49
  end
@@ -18,6 +18,7 @@ module RailsBestPractices
18
18
  def add_method(class_name, method_name, meta = {}, access_control = 'public')
19
19
  return if class_name == ''
20
20
  return if has_method?(class_name, method_name)
21
+
21
22
  methods(class_name) << Method.new(class_name, method_name, access_control, meta)
22
23
  if access_control == 'public'
23
24
  @possible_methods[method_name] = false
@@ -123,13 +124,13 @@ module RailsBestPractices
123
124
  # @param [String] access control
124
125
  # @return [Array] array of Method
125
126
  def get_all_unused_methods(access_control = nil)
126
- @methods.inject([]) { |unused_methods, (_class_name, methods)|
127
+ @methods.inject([]) do |unused_methods, (_class_name, methods)|
127
128
  unused_methods += if access_control
128
- methods.select { |method| method.access_control == access_control && !method.used }
129
- else
130
- methods.reject { |method| method.used }
129
+ methods.select { |method| method.access_control == access_control && !method.used }
130
+ else
131
+ methods.reject(&:used)
131
132
  end
132
- }.reject { |method| method.access_control == 'public' && @possible_methods[method.method_name] }
133
+ end.reject { |method| method.access_control == 'public' && @possible_methods[method.method_name] }
133
134
  end
134
135
 
135
136
  private
@@ -138,9 +139,9 @@ module RailsBestPractices
138
139
  #
139
140
  # @param [String] class name
140
141
  # @return [Array] array of methods
141
- def methods(class_name)
142
- @methods[class_name] ||= []
143
- end
142
+ def methods(class_name)
143
+ @methods[class_name] ||= []
144
+ end
144
145
  end
145
146
 
146
147
  # Method info includes class name, method name, access control, file, line_number, used.
@@ -39,7 +39,7 @@ module RailsBestPractices
39
39
  end
40
40
 
41
41
  # delegate each to @associations.
42
- def each(&block)
42
+ def each
43
43
  @associations.each { |model, model_associations| yield model, model_associations }
44
44
  end
45
45
 
@@ -123,52 +123,52 @@ module RailsBestPractices
123
123
  #
124
124
  # @param [String] filename is the filename of the erb, haml or slim code.
125
125
  # @param [String] content is the source code of erb, haml or slim file.
126
- def parse_html_template(filename, content)
127
- if filename =~ /.*\.erb$|.*\.rhtml$/
128
- content = Erubis::OnlyRuby.new(content).src
129
- elsif filename =~ /.*\.haml$/
130
- begin
131
- require 'haml'
132
- content = Haml::Engine.new(content).precompiled
133
- # remove \xxx characters
134
- content.gsub!(/\\\d{3}/, '')
135
- rescue LoadError
136
- raise "In order to parse #{filename}, please install the haml gem"
137
- rescue Haml::Error, SyntaxError
138
- # do nothing, just ignore the wrong haml files.
139
- end
140
- elsif filename =~ /.*\.slim$/
141
- begin
142
- require 'slim'
143
- content = Slim::Engine.new.call(content)
144
- rescue LoadError
145
- raise "In order to parse #{filename}, please install the slim gem"
146
- rescue SyntaxError
147
- # do nothing, just ignore the wrong slim files
148
- end
126
+ def parse_html_template(filename, content)
127
+ if filename =~ /.*\.erb$|.*\.rhtml$/
128
+ content = Erubis::OnlyRuby.new(content).src
129
+ elsif filename =~ /.*\.haml$/
130
+ begin
131
+ require 'haml'
132
+ content = Haml::Engine.new(content).precompiled
133
+ # remove \xxx characters
134
+ content.gsub!(/\\\d{3}/, '')
135
+ rescue LoadError
136
+ raise "In order to parse #{filename}, please install the haml gem"
137
+ rescue Haml::Error, SyntaxError
138
+ # do nothing, just ignore the wrong haml files.
139
+ end
140
+ elsif filename =~ /.*\.slim$/
141
+ begin
142
+ require 'slim'
143
+ content = Slim::Engine.new.call(content)
144
+ rescue LoadError
145
+ raise "In order to parse #{filename}, please install the slim gem"
146
+ rescue SyntaxError
147
+ # do nothing, just ignore the wrong slim files
149
148
  end
150
- content
151
149
  end
150
+ content
151
+ end
152
152
 
153
153
  # load all prepares.
154
- def load_prepares
155
- Prepares.constants.map { |prepare| Prepares.const_get(prepare).new }
156
- end
154
+ def load_prepares
155
+ Prepares.constants.map { |prepare| Prepares.const_get(prepare).new }
156
+ end
157
157
 
158
158
  # load all plugin reviews.
159
- def load_plugin_reviews
160
- plugins = File.join(Runner.base_path, 'lib', 'rails_best_practices', 'plugins', 'reviews')
161
- if File.directory?(plugins)
162
- Dir[File.expand_path(File.join(plugins, '*.rb'))].each do |review|
163
- require review
164
- end
165
- if RailsBestPractices.constants.map(&:to_sym).include? :Plugins
166
- RailsBestPractices::Plugins::Reviews.constants.each do |review|
167
- @reviews << RailsBestPractices::Plugins::Reviews.const_get(review).new
168
- end
169
- end
159
+ def load_plugin_reviews
160
+ plugins = File.join(Runner.base_path, 'lib', 'rails_best_practices', 'plugins', 'reviews')
161
+ if File.directory?(plugins)
162
+ Dir[File.expand_path(File.join(plugins, '*.rb'))].each do |review|
163
+ require review
164
+ end
165
+ if RailsBestPractices.constants.map(&:to_sym).include? :Plugins
166
+ RailsBestPractices::Plugins::Reviews.constants.each do |review|
167
+ @reviews << RailsBestPractices::Plugins::Reviews.const_get(review).new
170
168
  end
169
+ end
171
170
  end
171
+ end
172
172
  end
173
173
  end
174
174
  end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+
5
+ module RailsBestPractices
6
+ class OptionParser
7
+ # Usage: rails_best_practices [options] path
8
+ # -d, --debug debug mode
9
+ # --silent silent mode
10
+ # -f, --format FORMAT output format (text, html, yml, json, xml)
11
+ # --output-file FILE output html file for the analyzing result
12
+ # --without-color only output plain text without color
13
+ # --with-textmate open file by textmate in html format
14
+ # --with-sublime open file by sublime in html format (requires subl-handler)
15
+ # --with-mvim open file by mvim in html format
16
+ # --with-github GITHUB_NAME open file on github in html format, GITHUB_NAME is like railsbp/rails-bestpractices.com
17
+ # --with-git display git commit and username, only support html format
18
+ # --with-hg display hg commit and username, only support html format
19
+ # --template TEMPLATE customize erb template
20
+ # --vendor include vendor files
21
+ # --spec include spec files
22
+ # --test include test files
23
+ # --features include features files
24
+ # -x, --exclude PATTERNS don't analyze files matching a pattern
25
+ # (comma-separated regexp list)
26
+ # -o, --only PATTERNS analyze files only matching a pattern
27
+ # (comma-separated regexp list)
28
+ # -g, --generate generate configuration yaml
29
+ # -v, --version show this version
30
+ # -h, --help show this message
31
+
32
+ def self.parse!(argv = ARGV)
33
+ options = {}
34
+ OptParse.new do |opts|
35
+ opts.default_argv = argv
36
+
37
+ opts.banner = 'Usage: rails_best_practices [options] path'
38
+
39
+ opts.on('-d', '--debug', 'Debug mode') do
40
+ options['debug'] = true
41
+ end
42
+
43
+ opts.on('-f', '--format FORMAT', 'output format (text, html, yml, json, xml)') do |format|
44
+ options['format'] = format
45
+ end
46
+
47
+ opts.on('--without-color', 'only output plain text without color') do
48
+ options['without-color'] = true
49
+ end
50
+
51
+ opts.on('--with-textmate', 'open file by textmate in html format') do
52
+ options['with-textmate'] = true
53
+ end
54
+
55
+ opts.on('--with-sublime', 'open file by sublime in html format') do
56
+ options['with-sublime'] = true
57
+ end
58
+
59
+ opts.on('--with-mvim', 'open file by mvim in html format') do
60
+ options['with-mvim'] = true
61
+ end
62
+
63
+ opts.on('--with-github GITHUB_NAME', 'open file on github in html format') do |github_name|
64
+ options['with-github'] = true
65
+ options['github-name'] = github_name
66
+ end
67
+
68
+ opts.on('--last-commit-id COMMIT_ID', 'last commit id') do |commit_id|
69
+ options['last-commit-id'] = commit_id
70
+ end
71
+
72
+ opts.on('--with-hg', 'display hg commit and username, only support html format') do
73
+ options['with-hg'] = true
74
+ end
75
+
76
+ opts.on('--with-git', 'display git commit and username, only support html format') do
77
+ options['with-git'] = true
78
+ end
79
+
80
+ opts.on('--template TEMPLATE', 'customize erb template') do |template|
81
+ options['template'] = template
82
+ end
83
+
84
+ opts.on('--output-file OUTPUT_FILE', 'output html file for the analyzing result') do |output_file|
85
+ options['output-file'] = output_file
86
+ end
87
+
88
+ opts.on('--silent', 'silent mode') do
89
+ options['silent'] = true
90
+ end
91
+
92
+ %w[vendor spec test features].each do |pattern|
93
+ opts.on("--#{pattern}", "include #{pattern} files") do
94
+ options[pattern] = true
95
+ end
96
+ end
97
+
98
+ opts.on_tail('-v', '--version', 'Show this version') do
99
+ require 'rails_best_practices/version'
100
+ puts RailsBestPractices::VERSION
101
+ exit
102
+ end
103
+
104
+ opts.on_tail('-h', '--help', 'Show this message') do
105
+ puts opts
106
+ exit
107
+ end
108
+
109
+ opts.on('-x', '--exclude PATTERNS', "Don't analyze files matching a pattern", '(comma-separated regexp list)') do |list|
110
+ begin
111
+ options['exclude'] = list.split(',').map { |x| Regexp.new x }
112
+ rescue RegexpError => e
113
+ raise OptionParser::InvalidArgument, e.message
114
+ end
115
+ end
116
+
117
+ opts.on('-o', '--only PATTERNS', 'Analyze files only matching a pattern', '(comma-separated regexp list)') do |list|
118
+ begin
119
+ options['only'] = list.split(',').map { |x| Regexp.new x }
120
+ rescue RegexpError => e
121
+ raise OptionParser::InvalidArgument e.message
122
+ end
123
+ end
124
+
125
+ opts.on('-g', '--generate', 'Generate configuration yaml') do
126
+ options['generate'] = true
127
+ end
128
+
129
+ opts.on(
130
+ '-c',
131
+ '--config CONFIG_PATH', 'configuration file location (defaults to config/rails_best_practices.yml)'
132
+ ) do |config_path|
133
+ options['config'] = config_path
134
+ end
135
+ opts.parse!
136
+ end
137
+ options
138
+ end
139
+ end
140
+ end
@@ -25,14 +25,12 @@ module RailsBestPractices
25
25
  add_callback :start_class do |_node|
26
26
  @controllers << @klass
27
27
  @current_controller_name = @klass.to_s
28
- if @inherited_resources
29
- @actions = DEFAULT_ACTIONS
30
- end
28
+ @actions = DEFAULT_ACTIONS if @inherited_resources
31
29
  end
32
30
 
33
31
  # remember the action names at the end of class node if the controller is a InheritedResources.
34
32
  add_callback :end_class do |node|
35
- if @inherited_resources && 'ApplicationController' != @current_controller_name
33
+ if @inherited_resources && @current_controller_name != 'ApplicationController'
36
34
  @actions.each do |action|
37
35
  @methods.add_method(@current_controller_name, action, 'file' => node.file, 'line_number' => node.line_number)
38
36
  end
@@ -41,27 +39,23 @@ module RailsBestPractices
41
39
 
42
40
  # check if there is a DSL call inherit_resources.
43
41
  add_callback :start_var_ref do |_node|
44
- if @inherited_resources
45
- @actions = DEFAULT_ACTIONS
46
- end
42
+ @actions = DEFAULT_ACTIONS if @inherited_resources
47
43
  end
48
44
 
49
45
  # check if there is a DSL call inherit_resources.
50
46
  add_callback :start_vcall do |_node|
51
- if @inherited_resources
52
- @actions = DEFAULT_ACTIONS
53
- end
47
+ @actions = DEFAULT_ACTIONS if @inherited_resources
54
48
  end
55
49
 
56
50
  # restrict actions for inherited_resources
57
51
  add_callback :start_command do |node|
58
- if 'include' == node.message.to_s
52
+ if node.message.to_s == 'include'
59
53
  @helpers.add_module_descendant(node.arguments.all.first.to_s, current_class_name)
60
- elsif @inherited_resources && 'actions' == node.message.to_s
61
- if 'all' == node.arguments.all.first.to_s
54
+ elsif @inherited_resources && node.message.to_s == 'actions'
55
+ if node.arguments.all.first.to_s == 'all'
62
56
  @actions = DEFAULT_ACTIONS
63
57
  option_argument = node.arguments.all[1]
64
- if option_argument && :bare_assoc_hash == option_argument.sexp_type && option_argument.hash_value('except')
58
+ if option_argument && option_argument.sexp_type == :bare_assoc_hash && option_argument.hash_value('except')
65
59
  @actions -= option_argument.hash_value('except').to_object
66
60
  end
67
61
  else
@@ -10,7 +10,7 @@ module RailsBestPractices
10
10
  @gems = Prepares.gems
11
11
  end
12
12
 
13
- def check(filename, content)
13
+ def check(_filename, content)
14
14
  content.split("\n").each do |line|
15
15
  if line =~ /([^ ]+) \((\d.*)\)/
16
16
  @gems << Core::Gem.new($1, $2)
@@ -21,9 +21,9 @@ module RailsBestPractices
21
21
  # check if the node is
22
22
  # ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection)
23
23
  def include_forbidden_attributes_protection?(node)
24
- 'ActiveRecord::Base' == node.receiver.to_s &&
25
- 'send' == node.message.to_s &&
26
- ['include', 'ActiveModel::ForbiddenAttributesProtection'] == node.arguments.all.map(&:to_s)
24
+ node.receiver.to_s == 'ActiveRecord::Base' &&
25
+ node.message.to_s == 'send' &&
26
+ node.arguments.all.map(&:to_s) == ['include', 'ActiveModel::ForbiddenAttributesProtection']
27
27
  end
28
28
  end
29
29
  end
@@ -18,7 +18,7 @@ module RailsBestPractices
18
18
  # if it is a subclass of ActionMailer::Base,
19
19
  # then remember its class name.
20
20
  add_callback :start_class do |_node|
21
- if 'ActionMailer::Base' == current_extend_class_name
21
+ if current_extend_class_name == 'ActionMailer::Base'
22
22
  @mailers << @klass
23
23
  end
24
24
  end
@@ -21,7 +21,7 @@ module RailsBestPractices
21
21
 
22
22
  # remember the class name.
23
23
  add_callback :start_class do |_node|
24
- if 'ActionMailer::Base' != current_extend_class_name
24
+ if current_extend_class_name != 'ActionMailer::Base'
25
25
  @models << @klass
26
26
  end
27
27
  end
@@ -40,8 +40,8 @@ module RailsBestPractices
40
40
  # }
41
41
  add_callback :start_def do |node|
42
42
  if @klass &&
43
- 'ActionMailer::Base' != current_extend_class_name &&
44
- (classable_modules.empty? || klasses.any?)
43
+ current_extend_class_name != 'ActionMailer::Base' &&
44
+ (classable_modules.empty? || klasses.any?)
45
45
  method_name = node.method_name.to_s
46
46
  @methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
47
47
  end
@@ -60,7 +60,7 @@ module RailsBestPractices
60
60
  # }
61
61
  # }
62
62
  add_callback :start_defs do |node|
63
- if @klass && 'ActionMailer::Base' != current_extend_class_name
63
+ if @klass && current_extend_class_name != 'ActionMailer::Base'
64
64
  method_name = node.method_name.to_s
65
65
  @methods.add_method(current_class_name, method_name, { 'file' => node.file, 'line_number' => node.line_number }, current_access_control)
66
66
  end
@@ -123,16 +123,16 @@ module RailsBestPractices
123
123
  private
124
124
 
125
125
  # remember associations, with class to association names.
126
- def remember_association(node)
127
- association_meta = node.message.to_s
128
- association_name = node.arguments.all.first.to_s
129
- arguments_node = node.arguments.all.last
130
- if arguments_node.hash_value('class_name').present?
131
- association_class = arguments_node.hash_value('class_name').to_s
132
- end
133
- association_class ||= association_name.classify
134
- @model_associations.add_association(current_class_name, association_name, association_meta, association_class)
126
+ def remember_association(node)
127
+ association_meta = node.message.to_s
128
+ association_name = node.arguments.all.first.to_s
129
+ arguments_node = node.arguments.all.last
130
+ if arguments_node.hash_value('class_name').present?
131
+ association_class = arguments_node.hash_value('class_name').to_s
135
132
  end
133
+ association_class ||= association_name.classify
134
+ @model_associations.add_association(current_class_name, association_name, association_meta, association_class)
135
+ end
136
136
  end
137
137
  end
138
138
  end