Class URI::MailTo
In: uri/mailto.rb
Parent: Generic

RFC2368, The mailto URL scheme

Methods

build   headers=   new   set_headers   set_to   to=   to_mailtext   to_rfc822text   to_s  

Included Modules

REGEXP

Constants

DEFAULT_PORT = nil
COMPONENT = [ :scheme, :to, :headers ].freeze

Attributes

headers  [R]  E-mail headers set by the URL, as an Array of Arrays
to  [R]  The primary e-mail address of the URL, as a String

Public Class methods

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]

# 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

Description

Creates a new URI::MailTo object from generic URL components with no syntax checking.

This method is usually called from URI::parse, which checks the validity of each component.

[Source]

# File uri/mailto.rb, line 131
    def initialize(*arg)
      super(*arg)

      @to = nil
      @headers = []

      if MAILTO_REGEXP =~ @opaque
         if arg[-1]
          self.to = $1
          self.headers = $2
        else
          set_to($1)
          set_headers($2)
        end

      else
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end
    end

Public Instance methods

[Source]

# File uri/mailto.rb, line 206
    def headers=(v)
      check_headers(v)
      set_headers(v)
      v
    end

[Source]

# File uri/mailto.rb, line 176
    def to=(v)
      check_to(v)
      set_to(v)
      v
    end

Returns the RFC822 e-mail text equivalent of the URL, as a String.

Example:

  require 'uri'

  uri = URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
  uri.to_mailtext
  # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"

[Source]

# File uri/mailto.rb, line 241
    def to_mailtext
      to = URI::unescape(@to)
      head = ''
      body = ''
      @headers.each do |x|
        case x[0]
        when 'body'
          body = URI::unescape(x[1])
        when 'to'
          to << ', ' + URI::unescape(x[1])
        else
          head << URI::unescape(x[0]).capitalize + ': ' +
            URI::unescape(x[1])  + "\n"
        end
      end

      return "To: #{to}
#{head}
#{body}
"
    end
to_rfc822text()

Alias for to_mailtext

[Source]

# File uri/mailto.rb, line 212
    def to_s
      @scheme + ':' + 
        if @to 
          @to
        else
          ''
        end + 
        if @headers.size > 0
          '?' + @headers.collect{|x| x.join('=')}.join('&')
        else
          ''
        end +
        if @fragment
          '#' + @fragment
        else
          ''
        end
    end

Protected Instance methods

[Source]

# File uri/mailto.rb, line 196
    def set_headers(v)
      @headers = []
      if v
        v.scan(HEADER_REGEXP) do |x|
          @headers << x.split(/=/o, 2)
        end
      end
    end

[Source]

# File uri/mailto.rb, line 171
    def set_to(v)
      @to = v
    end

[Validate]

ruby-doc.org is hosted and maintained by James Britt and Happy Camper Studios, a Ruby application development company in Phoenix, Arizona. The site was created in 2002 as part of the Ruby Documentation Project to promote the Ruby language and to help other Ruby hackers.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.