# Class: YARD::Server::HTTPUtils::FormData

Inherits:
  String
  - Object
  - String
  - YARD::Server::HTTPUtils::FormData
  show all

Defined in:
  lib/yard/server/http_utils.rb

## Overview

Stores multipart form data. FormData objects are created when WEBrick::HTTPUtils.parse_form_data is called.

Since:

- 0.6.0

## Constant Summary collapse

EmptyRawHeader =

:nodoc:

Since:

- 0.6.0

      [].freeze

EmptyHeader =

:nodoc:

Since:

- 0.6.0

      {}.freeze

## Instance Attribute Summary collapse

- #filename ⇒ Object

  The filename of the form data part.

- #name ⇒ Object

  The name of the form data part.

- #next_data ⇒ Object protected

  :nodoc:.

## Instance Method Summary collapse

- #<<(str) ⇒ Object

  Adds `str` to this FormData which may be the body, a header or a header entry.

- #[](*key) ⇒ Object

  Retrieves the header at the first entry in `key`.

- #append_data(data) ⇒ Object

  Adds `data` at the end of the chain of entries.

- #each_data ⇒ Object

  Yields each entry in this FormData.

- #initialize(*args) ⇒ FormData constructor

  Creates a new FormData object.

- #list ⇒ Object (also: #to_ary)

  Returns all the FormData as an Array.

- #to_s ⇒ Object

  This FormData’s body.

## Constructor Details

### #initialize(*args) ⇒ `FormData`

Creates a new FormData object.

`args` is an Array of form data entries. One FormData will be created for each entry.

This is called by WEBrick::HTTPUtils.parse_form_data for you

Since:

- 0.6.0

    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281

    # File 'lib/yard/server/http_utils.rb', line 267

    def initialize(*args)
      @name = @filename = @next_data = nil
      if args.empty?
        @raw_header = []
        @header = nil
        super("")
      else
        @raw_header = EmptyRawHeader
        @header = EmptyHeader
        super(args.shift)
        unless args.empty?
          @next_data = self.class.new(*args)
        end
      end
    end

## Instance Attribute Details

### #filename ⇒ `Object`

The filename of the form data part

Since:

- 0.6.0

    254
    255
    256

    # File 'lib/yard/server/http_utils.rb', line 254

    def filename
      @filename
    end

### #name ⇒ `Object`

The name of the form data part

Since:

- 0.6.0

    249
    250
    251

    # File 'lib/yard/server/http_utils.rb', line 249

    def name
      @name
    end

### #next_data ⇒ `Object` (protected)

:nodoc:

Since:

- 0.6.0

    256
    257
    258

    # File 'lib/yard/server/http_utils.rb', line 256

    def next_data
      @next_data
    end

## Instance Method Details

### #<<(str) ⇒ `Object`

Adds `str` to this FormData which may be the body, a header or a header entry.

This is called by WEBrick::HTTPUtils.parse_form_data for you

Since:

- 0.6.0

    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313

    # File 'lib/yard/server/http_utils.rb', line 300

    def <<(str)
      if @header
        super
      elsif str == CRLF
        @header = HTTPUtils::parse_header(@raw_header.join)
        if cd = self['content-disposition']
          if /\s+name="(.*?)"/ =~ cd then @name = $1 end
          if /\s+filename="(.*?)"/ =~ cd then @filename = $1 end
        end
      else
        @raw_header << str
      end
      self
    end

### #[](*key) ⇒ `Object`

Retrieves the header at the first entry in `key`

Since:

- 0.6.0

    286
    287
    288
    289
    290
    291
    292

    # File 'lib/yard/server/http_utils.rb', line 286

    def [](*key)
      begin
        @header[key[0].downcase].join(", ")
      rescue StandardError, NameError
        super
      end
    end

### #append_data(data) ⇒ `Object`

Adds `data` at the end of the chain of entries

This is called by WEBrick::HTTPUtils.parse_form_data for you.

Since:

- 0.6.0

    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330

    # File 'lib/yard/server/http_utils.rb', line 320

    def append_data(data)
      tmp = self
      while tmp
        unless tmp.next_data
          tmp.next_data = data
          break
        end
        tmp = tmp.next_data
      end
      self
    end

### #each_data ⇒ `Object`

Yields each entry in this FormData

Since:

- 0.6.0

    335
    336
    337
    338
    339
    340
    341
    342

    # File 'lib/yard/server/http_utils.rb', line 335

    def each_data
      tmp = self
      while tmp
        next_data = tmp.next_data
        yield(tmp)
        tmp = next_data
      end
    end

### #list ⇒ `Object` Also known as: to_ary

Returns all the FormData as an Array

Since:

- 0.6.0

    347
    348
    349
    350
    351
    352
    353

    # File 'lib/yard/server/http_utils.rb', line 347

    def list
      ret = []
      each_data{|data|
        ret << data.to_s
      }
      ret
    end

### #to_s ⇒ `Object`

This FormData’s body

Since:

- 0.6.0

    363
    364
    365

    # File 'lib/yard/server/http_utils.rb', line 363

    def to_s
      String.new(self)
    end