Class: RailsBestPractices::Reviews::MoveModelLogicIntoModelReview
- Inherits:
-
Review
- Object
- Core::Check
- Review
- RailsBestPractices::Reviews::MoveModelLogicIntoModelReview
- Defined in:
- lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb
Overview
Review a controller file to make sure that complex model logic should not exist in controller, should be moved into a model.
See the best practice details here rails-bestpractices.com/posts/7-move-model-logic-into-the-model.
Implementation:
Review process:
check all method defines in the controller files,
if there are multiple method calls or attribute assignments apply to one subject,
and the subject is a local variable or an instance variable,
then they are complex model logic, and they should be moved into model.
Constant Summary
Constants inherited from Core::Check
Core::Check::CONTROLLER_FILES, Core::Check::HELPER_FILES, Core::Check::MAILER_FILES, Core::Check::MIGRATION_FILES, Core::Check::MODEL_FILES, Core::Check::NODE_TYPES, Core::Check::PARTIAL_VIEW_FILES, Core::Check::ROUTE_FILE, Core::Check::SCHEMA_FILE, Core::Check::VIEW_FILES
Instance Attribute Summary
Attributes inherited from Core::Check
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ MoveModelLogicIntoModelReview
constructor
A new instance of MoveModelLogicIntoModelReview.
- #interesting_files ⇒ Object
- #interesting_nodes ⇒ Object
-
#start_defn(node) ⇒ Object
check method define node to see if there are multiple method calls and attribute assignments (more than @use_count defined) on one local variable or instance varialbe.
- #url ⇒ Object
Methods inherited from Review
#equal?, #model_associations, #model_attributes, #models, #remember_variable_use_count, #reset_variable_use_count, #variable, #variable_use_count
Methods inherited from Core::Check
#add_error, #method_missing, #node_end, #node_start
Constructor Details
#initialize(options = {}) ⇒ MoveModelLogicIntoModelReview
Returns a new instance of MoveModelLogicIntoModelReview.
30 31 32 33 |
# File 'lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb', line 30 def initialize( = {}) super() @use_count = ['use_count'] || 4 end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RailsBestPractices::Core::Check
Instance Method Details
#interesting_files ⇒ Object
26 27 28 |
# File 'lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb', line 26 def interesting_files CONTROLLER_FILES end |
#interesting_nodes ⇒ Object
22 23 24 |
# File 'lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb', line 22 def interesting_nodes [:defn] end |
#start_defn(node) ⇒ Object
check method define node to see if there are multiple method calls and attribute assignments (more than @use_count defined) on one local variable or instance varialbe.
it will check every call and attrasgn nodes, if there are multiple call and attrasgn nodes who have the same subject, and the subject is a local variable or an instance variable, then these method calls and attribute assignments should be moved into model.
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb', line 41 def start_defn(node) node.grep_nodes(:node_type => [:call, :attrasgn]) do |child_node| remember_variable_use_count(child_node) end variable_use_count.each do |variable_node, count| add_error "move model logic into model (#{variable_node} use_count > #{@use_count})" if count > @use_count end reset_variable_use_count end |
#url ⇒ Object
18 19 20 |
# File 'lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb', line 18 def url "http://rails-bestpractices.com/posts/7-move-model-logic-into-the-model" end |