Class: RailsBestPractices::Reviews::UseSayWithTimeInMigrationsReview
- Inherits:
-
Review
- Object
- Core::Check
- Review
- RailsBestPractices::Reviews::UseSayWithTimeInMigrationsReview
- Defined in:
- lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb
Overview
Review a migration file to make sure to use say or say_with_time for customized data changes to produce a more readable output.
See the best practice detials here rails-bestpractices.com/posts/46-use-say-and-say_with_time-in-migrations-to-make-a-useful-migration-log.
Implementation:
Review process:
check class method define nodes (self.up or self.down).
if there is a method call in the class method definition,
and the message of method call is not say, say_with_time and default migration methods (such as add_column and create_table),
then the method call should be wrapped by say or say_with_time.
Constant Summary collapse
- WITH_SAY_METHODS =
%w(say say_with_time)
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
-
#start_defs(node) ⇒ Object
check a class method define node to see if there are method calls that need to be wrapped by say or say_with_time.
- #url ⇒ Object
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_defs(node) ⇒ Object
check a class method define node to see if there are method calls that need to be wrapped by say or say_with_time.
it will check the first block node, if any method call whose message is not default migration methods in the block node, then such method call should be wrapped by say or say_with_time
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb', line 32 def start_defs(node) node.body.statements.each do |child_node| next if child_node.grep_nodes_count(:sexp_type => [:fcall, :command], :message => WITH_SAY_METHODS) > 0 subject_node = if :method_add_block == child_node.sexp_type child_node[1] elsif :method_add_arg == child_node.sexp_type child_node[1] else child_node end if :call == subject_node.sexp_type add_error("use say with time in migrations", node.file, child_node.line) end end end |
#url ⇒ Object
23 24 25 |
# File 'lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb', line 23 def url "http://rails-bestpractices.com/posts/46-use-say-and-say_with_time-in-migrations-to-make-a-useful-migration-log" end |