Class: RailsBestPractices::Reviews::ReplaceComplexCreationWithFactoryMethodReview
- Inherits:
-
Review
- Object
- Core::Check
- Review
- RailsBestPractices::Reviews::ReplaceComplexCreationWithFactoryMethodReview
- Defined in:
- lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb
Overview
Review a controller file to make sure that complex model creation should not exist in controller, should be replaced with factory method.
See the best practice details here rails-bestpractices.com/posts/6-replace-complex-creation-with-factory-method.
Implementation:
Review process:
check all method defines in the controller files,
if there are multiple attribute assignments apply to one subject,
and the subject is a local variable or an instance variable,
and after them there is a call node with message :save or :save!,
then these attribute assignments are complex creation, should be replaced with factory method.
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 = {}) ⇒ ReplaceComplexCreationWithFactoryMethodReview
constructor
A new instance of ReplaceComplexCreationWithFactoryMethodReview.
- #interesting_files ⇒ Object
- #interesting_nodes ⇒ Object
-
#start_defn(node) ⇒ Object
check method define node to see if there are multiple attribute assignments, more than @attrasgn_count, on one local variable or instance variable before save.
- #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 = {}) ⇒ ReplaceComplexCreationWithFactoryMethodReview
Returns a new instance of ReplaceComplexCreationWithFactoryMethodReview.
31 32 33 34 |
# File 'lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb', line 31 def initialize( = {}) super() @attrasgn_count = ['attribute_assignment_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
27 28 29 |
# File 'lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb', line 27 def interesting_files CONTROLLER_FILES end |
#interesting_nodes ⇒ Object
23 24 25 |
# File 'lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb', line 23 def interesting_nodes [:defn] end |
#start_defn(node) ⇒ Object
check method define node to see if there are multiple attribute assignments, more than @attrasgn_count, on one local variable or instance variable before save.
it wll check every attrasgn nodes in method define node, if there are multiple attrasgn nodes who have the same subject, and the subject is a local variable or an instance variable, and after them, there is a call node with message :save or :save!, then these attribute assignments are complex creation, should be replaced with factory method.
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb', line 43 def start_defn(node) node.recursive_children do |child_node| case child_node.node_type when :attrasgn remember_variable_use_count(child_node) when :call check_variable_save(child_node) else end end reset_variable_use_count end |
#url ⇒ Object
19 20 21 |
# File 'lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb', line 19 def url "http://rails-bestpractices.com/posts/6-replace-complex-creation-with-factory-method" end |