Class: RailsBestPractices::Reviews::UseObserverReview

Inherits:
Review show all
Defined in:
lib/rails_best_practices/reviews/use_observer_review.rb

Overview

Make sure to use observer (sorry we only check the mailer deliver now).

See the best practice details here rails-bestpractices.com/posts/19-use-observer.

TODO: we need a better solution, any suggestion?

Implementation:

Review process:

check all command nodes to see if they are callback definitions, like after_create, before_destroy,
if so, remember the callback methods.

check all method define nodes to see
if the method is a callback method,
and there is a mailer deliver call,
then the method should be replaced by using observer.

Constant Summary

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!, #interesting_files, interesting_files, interesting_nodes, #interesting_nodes, #method_missing, #node_end, #node_start, #parse_file?, #result, #total_files_checked

Constructor Details

#initializeUseObserverReview

Returns a new instance of UseObserverReview.



30
31
32
33
# File 'lib/rails_best_practices/reviews/use_observer_review.rb', line 30

def initialize
  super
  @callbacks = []
end

Dynamic Method Handling

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

Instance Method Details

#start_command(node) ⇒ Object

check a command node.

if it is a callback definition, then remember its callback methods.



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

def start_command(node)
  remember_callback(node)
end

#start_def(node) ⇒ Object

check a method define node in prepare process.

if it is callback method, and there is a actionmailer deliver call in the method define node, then it should be replaced by using observer.



48
49
50
51
52
# File 'lib/rails_best_practices/reviews/use_observer_review.rb', line 48

def start_def(node)
  if callback_method?(node) && deliver_mailer?(node)
    add_error "use observer"
  end
end

#urlObject



26
27
28
# File 'lib/rails_best_practices/reviews/use_observer_review.rb', line 26

def url
  "http://rails-bestpractices.com/posts/19-use-observer"
end