class HTTP::FormData::Multipart::Param

Utility class to represent multi-part chunks

Public Class Methods

coerce(data) click to toggle source

Flattens given `data` Hash into an array of `Param`'s. Nested array are unwinded. Behavior is similar to `URL.encode_www_form`.

@param [Hash] data @return [Array<FormData::MultiPart::Param>]

# File lib/http/form_data/multipart/param.rb, line 64
def self.coerce(data)
  params = []

  data.each do |name, values|
    Array(values).each do |value|
      params << new(name, value)
    end
  end

  params
end
new(name, value) click to toggle source

@param [#to_s] name @param [FormData::File, FormData::Part, to_s] value

# File lib/http/form_data/multipart/param.rb, line 10
def initialize(name, value)
  @name = name.to_s

  @part =
    if value.is_a?(FormData::Part)
      value
    else
      FormData::Part.new(value)
    end

  parameters = { :name => @name }
  parameters[:filename] = @part.filename if @part.filename
  parameters = parameters.map { |k, v| "#{k}=#{v.inspect}" }.join("; ")

  @header = "Content-Disposition: form-data; #{parameters}"

  return unless @part.content_type

  @header += "#{CRLF}Content-Type: #{@part.content_type}"
end

Public Instance Methods

size() click to toggle source

Calculates size of a part (headers + body).

@return [Integer]

# File lib/http/form_data/multipart/param.rb, line 54
def size
  @header.bytesize + (CRLF.bytesize * 2) + @part.size
end
to_s() click to toggle source

Returns body part with headers and data.

@example With {FormData::File} value

Content-Disposition: form-data; name="avatar"; filename="avatar.png"
Content-Type: application/octet-stream

...data of avatar.png...

@example With non-{FormData::File} value

Content-Disposition: form-data; name="username"

ixti

@return [String]

# File lib/http/form_data/multipart/param.rb, line 47
def to_s
  "#{@header}#{CRLF * 2}#{@part}"
end