Module: ActionMailer::Helpers::ClassMethods

Defined in:
lib/action_mailer/helpers.rb

Instance Method Summary collapse

Instance Method Details

#add_template_helper(helper_module) ⇒ Object

Makes all the (instance) methods in the helper module available to templates rendered through this controller. See ActionView::Helpers (classes/ActionView/Helpers.html) for more about making your own helper modules available to the templates.



29
30
31
# File 'lib/action_mailer/helpers.rb', line 29

def add_template_helper(helper_module) #:nodoc:
  master_helper_module.module_eval "include #{helper_module}"
end

#helper(*args, &block) ⇒ Object

Declare a helper:

helper :foo

requires ‘foo_helper’ and includes FooHelper in the template class.

helper FooHelper

includes FooHelper in the template class.

helper { def foo() "#{bar} is the very best" end }

evaluates the block in the template class, adding method foo.

helper(:three, BlindHelper) { def mice() 'mice' end }

does all three.



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
# File 'lib/action_mailer/helpers.rb', line 42

def helper(*args, &block)
  args.flatten.each do |arg|
    case arg
      when Module
        add_template_helper(arg)
      when String, Symbol
        file_name  = arg.to_s.underscore + '_helper'
        class_name = file_name.camelize

        begin
          require_dependency(file_name)
        rescue LoadError => load_error
          requiree = / -- (.*?)(\.rb)?$/.match(load_error.message).to_a[1]
          msg = (requiree == file_name) ? "Missing helper file helpers/#{file_name}.rb" : "Can't load file: #{requiree}"
          raise LoadError.new(msg).copy_blame!(load_error)
        end

        add_template_helper(class_name.constantize)
      else
        raise ArgumentError, 'helper expects String, Symbol, or Module argument'
    end
  end

  # Evaluate block in template class if given.
  master_helper_module.module_eval(&block) if block_given?
end

#helper_attr(*attrs) ⇒ Object

Declare a controller attribute as a helper. For example,

helper_attr :name
attr_accessor :name

makes the name and name= controller methods available in the view. The is a convenience wrapper for helper_method.



88
89
90
# File 'lib/action_mailer/helpers.rb', line 88

def helper_attr(*attrs)
  attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
end

#helper_method(*methods) ⇒ Object

Declare a controller method as a helper. For example,

helper_method :link_to
def link_to(name, options) ... end

makes the link_to controller method available in the view.



73
74
75
76
77
78
79
80
81
# File 'lib/action_mailer/helpers.rb', line 73

def helper_method(*methods)
  methods.flatten.each do |method|
    master_helper_module.module_eval <<-end_eval
      def #{method}(*args, &block)
        controller.__send__(%(#{method}), *args, &block)
      end
    end_eval
  end
end