Methods
H
Instance Public methods
helper(*args, &block)

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.

# File rails/actionmailer/lib/action_mailer/helpers.rb, line 40
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 = %r -- (.*?)(\.rb)?$/.match(load_error).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)

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.

# File rails/actionmailer/lib/action_mailer/helpers.rb, line 86
def helper_attr(*attrs)
  attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
end
helper_method(*methods)

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.

# File rails/actionmailer/lib/action_mailer/helpers.rb, line 71
      def helper_method(*methods)
        methods.flatten.each do |method|
          master_helper_module.module_eval "            def #{method}(*args, &block)
              controller.send(%(#{method}), *args, &block)
            end
"
        end
      end