Class: URI::MailTo (Ruby 2.2.2)
Description: Class : URI::MailTo - Ruby 2.2.2

- Home
- Core 2.2.2
- Std-lib 2.2.2
- Downloads

Support for the Ruby 2.2 series has ended. See here for reference.

### Home Classes Methods

### In Files

- uri/mailto.rb

### Parent

URI::Generic

### Methods

- ::build
- ::new
- #headers=
- #set_headers
- #set_to
- #to=
- #to_mailtext
- #to_rfc822text
- #to_s

### Included Modules

- URI::REGEXP

### Class/Module Index

Quicksearch

- Kernel
- URI
- URI::BadURIError
- URI::Error
- URI::Escape
- URI::FTP
- URI::Generic
- URI::HTTP
- URI::HTTPS
- URI::InvalidComponentError
- URI::InvalidURIError
- URI::LDAP
- URI::LDAPS
- URI::MailTo
- URI::REGEXP
- URI::RFC2396_Parser
- URI::RFC2396_REGEXP
- URI::RFC2396_REGEXP::PATTERN

No matching classes.

# URI::MailTo

RFC6068, The mailto URL scheme

### Constants

COMPONENT

  An Array of the available components for URI::MailTo

DEFAULT_PORT

  A Default port of nil for URI::MailTo

### 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

build(args) click to toggle source

## 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

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

      case tmp[:to]
      when Array
        tmp[:opaque] = tmp[:to].join(',')
      when String
        tmp[:opaque] = tmp[:to].dup
      else
        tmp[:opaque] = ''
      end

      if tmp[:headers]
        query =
          case tmp[:headers]
          when Array
            tmp[:headers].collect { |x|
              if x.kind_of?(Array)
                x[0] + '=' + x[1..-1].join
              else
                x.to_s
              end
            }.join('&')
          when Hash
            tmp[:headers].collect { |h,v|
              h + '=' + v
            }.join('&')
          else
            tmp[:headers].to_s
          end
        unless query.empty?
          tmp[:opaque] << '?' << query
        end
      end

      return super(tmp)
    end

new(*arg) click to toggle source

## 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.

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

      @to = nil
      @headers = []

      to, header = @opaque.split('?', 2)
      # allow semicolon as a addr-spec separator
      # http://support.microsoft.com/kb/820868
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end

      if arg[10] # arg_check
        self.to = to
        self.headers = header
      else
        set_to(to)
        set_headers(header)
      end
    end

### Public Instance Methods

headers=(v) click to toggle source

setter for headers `v`

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

to=(v) click to toggle source

setter for to `v`

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

to_mailtext() click to toggle source

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"

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

          return "To: #{to}
    #{head}
    #{body}
    "
        end

Also aliased as: to_rfc822text
to_rfc822text() click to toggle source
Alias for: to_mailtext
to_s() click to toggle source

Constructs String from URI

                   # File uri/mailto.rb, line 232
    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

set_headers(v) click to toggle source

private setter for headers `v`

                   # File uri/mailto.rb, line 214
    def set_headers(v)
      @headers = []
      if v
        v.split('&').each do |x|
          @headers << x.split(/=/, 2)
        end
      end
    end

set_to(v) click to toggle source

private setter for to `v`

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