Method: Mailman::Router#route

Defined in:
lib/mailman/router.rb

#route(message) ⇒ Object

Route a message. If the route block accepts arguments, it passes any captured params. Named params are available from the params helper. The message is available from the message helper.

Parameters:

  • the (Mail::Message)

    message to route.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/mailman/router.rb', line 38

def route(message)
  @params.clear
  @message = message
  result = nil

  if @bounce_block and message.respond_to?(:bounced?) and message.bounced?
    return instance_exec(&@bounce_block)
  end

  routes.each do |route|
    break if result = route.match!(message)
  end

  if result
    @params.merge!(result[:params])
    if !result[:klass].nil?
      if result[:klass].is_a?(Class) # no instance method specified
        result[:klass].new.send(:receive, @message, @params)
      elsif result[:klass].kind_of?(String) # instance method specified
        klass, method = result[:klass].split('#')
        klass.camelize.constantize.new.send(method.to_sym, @message, @params)
      end
    elsif result[:block].arity > 0
      instance_exec(*result[:args], &result[:block])
    else
      instance_exec(&result[:block])
    end
  elsif @default_block
    instance_exec(&@default_block)
  end
end