Class: RailsBestPractices::Reviews::KeepFindersOnTheirOwnModelReview

Inherits:
Review
  • Object
show all
Defined in:
lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb

Overview

Review model files to ake sure finders are on their own model.

See the best practice details here rails-bestpractices.com/posts/13-keep-finders-on-their-own-model.

Implementation:

Review process:

check all call nodes in model files.

if the call node is a finder (find, all, first or last),
and the it calls the other model,
and there is a hash argument for finder,
then it should keep finders on its own model.

Constant Summary collapse

FINDERS =
%w(find all first last)

Constants inherited from Core::Check

Core::Check::ALL_FILES, Core::Check::CONTROLLER_FILES, Core::Check::DEPLOY_FILES, Core::Check::HELPER_FILES, Core::Check::MAILER_FILES, Core::Check::MIGRATION_FILES, Core::Check::MODEL_FILES, Core::Check::PARTIAL_VIEW_FILES, Core::Check::ROUTE_FILES, Core::Check::SCHEMA_FILE, Core::Check::VIEW_FILES

Instance Method Summary collapse

Methods inherited from Review

#model_associations, #model_attributes, #models, #remember_variable_use_count, #reset_variable_use_count, #variable, #variable_use_count

Methods inherited from Core::Check

add_callback, #add_error, #after_prepare, #after_review, callbacks, #errors, #increment_total_files_checked!, #initialize, interesting_files, #interesting_files, #interesting_nodes, interesting_nodes, #method_missing, #node_end, #node_start, #parse_file?, #result, #total_files_checked

Constructor Details

This class inherits a constructor from RailsBestPractices::Core::Check

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RailsBestPractices::Core::Check

Instance Method Details

#start_method_add_arg(node) ⇒ Object

check all the call nodes to see if there is a finder for other model.

if the call node is

  1. the message of call node is one of the find, all, first or last

  2. the subject of call node is also a call node (it’s the other model)

  3. the any of its arguments is a hash (complex finder)

then it should keep finders on its own model.



39
40
41
# File 'lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb', line 39

def start_method_add_arg(node)
  add_error "keep finders on their own model" if other_finder?(node)
end

#urlObject



25
26
27
# File 'lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb', line 25

def url
  "http://rails-bestpractices.com/posts/13-keep-finders-on-their-own-model"
end