Class: RailsBestPractices::Reviews::MoveCodeIntoModelReview
- Inherits:
-
Review
- Object
- Core::Check
- Review
- RailsBestPractices::Reviews::MoveCodeIntoModelReview
- Defined in:
- lib/rails_best_practices/reviews/move_code_into_model_review.rb
Overview
Review a view file to make sure there is no complex logic call for model.
See the best practice details here rails-bestpractices.com/posts/25-move-code-into-model.
Implementation:
Review process:
check if there are multiple method calls or attribute assignments apply to one subject,
and the subject is a local variable or instance variable,
then 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 = {}) ⇒ MoveCodeIntoModelReview
constructor
A new instance of MoveCodeIntoModelReview.
- #interesting_files ⇒ Object
- #interesting_nodes ⇒ Object
-
#start_if(node) ⇒ Object
check if node to see whose conditional statementnodes contain multiple call nodes with same subject who is a local variable or instance variable.
- #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 = {}) ⇒ MoveCodeIntoModelReview
Returns a new instance of MoveCodeIntoModelReview.
29 30 31 32 |
# File 'lib/rails_best_practices/reviews/move_code_into_model_review.rb', line 29 def initialize(={}) super() @use_count = ['use_count'] || 2 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
25 26 27 |
# File 'lib/rails_best_practices/reviews/move_code_into_model_review.rb', line 25 def interesting_files VIEW_FILES end |
#interesting_nodes ⇒ Object
21 22 23 |
# File 'lib/rails_best_practices/reviews/move_code_into_model_review.rb', line 21 def interesting_nodes [:if] end |
#start_if(node) ⇒ Object
check if node to see whose conditional statementnodes contain multiple call nodes with same subject who is a local variable or instance variable.
it will check every call and attrasgn nodes in the conditional statement 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 the conditional statement nodes should be moved into model.
41 42 43 44 45 46 47 48 49 |
# File 'lib/rails_best_practices/reviews/move_code_into_model_review.rb', line 41 def start_if(node) node.conditional_statement.grep_nodes(:node_type => [:call, :attrasgn]) { |child_node| remember_variable_use_count(child_node) } variable_use_count.each do |variable_node, count| add_error "move code into model (#{variable_node} use_count > #{@use_count})", variable_node.file, variable_node.line if count > @use_count end reset_variable_use_count end |
#url ⇒ Object
17 18 19 |
# File 'lib/rails_best_practices/reviews/move_code_into_model_review.rb', line 17 def url "http://rails-bestpractices.com/posts/25-move-code-into-model" end |