Method: Resque::Mailer::ClassMethods#perform

Defined in:
lib/resque_mailer.rb

#perform(action, serialized_args) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/resque_mailer.rb', line 52

def perform(action, serialized_args)
  begin
    args = ::Resque::Mailer.argument_serializer.deserialize(serialized_args)
    # Set hash as hash with indifferent access so mailer block syntax (needs symbols) works
    if args.is_a?(Array)
      args = args.each_with_object([]) do |arg, o|
        o << (arg.is_a?(Hash) ? arg.with_indifferent_access : arg)
      end
    end
    message = ::Resque::Mailer.prepare_message(self, action, *args)
    if message.respond_to?(:deliver_now)
      message.deliver_now
    else
      message.deliver
    end
  rescue Exception => ex
    if Mailer.error_handler
      Mailer.error_handler.call(self, message, ex, action, args)
    else
      if logger
        logger.error "Unable to deliver email [#{action}]: #{ex}"
        logger.error ex.backtrace.join("\n\t")
      end

      raise ex
    end
  end
end