static public Method

MailTo.build(args)

Description

Creates a new URI::MailTo object from components, with syntax checking.

Components can be provided as an Array or Hash. If an Array is used, the components must be supplied as [to, headers].

If a Hash is used, the keys are the component names preceded by colons.

The headers can be supplied as a pre-encoded string, such as "subject=subscribe&cc=address", or as an Array of Arrays like [[‘subject’, ‘subscribe’], [‘cc’, ‘address’]]

Examples:

require 'uri'

m1 = URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
puts m1.to_s  ->  mailto:joe@example.com?subject=Ruby

m2 = URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
puts m2.to_s  ->  mailto:john@example.com?Subject=Ruby&Cc=jack@example.com

m3 = URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
puts m3.to_s  ->  mailto:listman@example.com?subject=subscribe

Source Code

# File uri/mailto.rb, line 88
def self.build(args)
  tmp = Util::make_components_hash(self, args)

  if tmp[:to]
    tmp[:opaque] = tmp[:to]
  else
    tmp[:opaque] = ''
  end

  if tmp[:headers]
    tmp[:opaque] << '?'

    if tmp[:headers].kind_of?(Array)
      tmp[:opaque] << tmp[:headers].collect { |x|
        if x.kind_of?(Array)
          x[0] + '=' + x[1..-1].to_s
        else
          x.to_s
        end
      }.join('&')

    elsif tmp[:headers].kind_of?(Hash)
      tmp[:opaque] << tmp[:headers].collect { |h,v|
        h + '=' + v
      }.join('&')

    else
      tmp[:opaque] << tmp[:headers].to_s
    end
  end

  return super(tmp)
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.