class ChefAPI::Multipart::FilePart

A File part

Public Class Methods

new(name, file) click to toggle source
# File lib/chef-api/multipart.rb, line 113
def initialize(name, file)
  @file = file
  @head = build(name, file)
  @foot = "\r\n"
end

Public Instance Methods

io() click to toggle source
# File lib/chef-api/multipart.rb, line 119
def io
  @io ||= MultiIO.new(
    StringIO.new(@head),
    @file,
    StringIO.new(@foot)
  )
end
size() click to toggle source
# File lib/chef-api/multipart.rb, line 127
def size
  @head.bytesize + @file.size + @foot.bytesize
end

Private Instance Methods

build(name, file) click to toggle source
# File lib/chef-api/multipart.rb, line 133
def build(name, file)
  filename  = File.basename(file.path)
  mime_type = MIME::Types.type_for(filename)[0] || MIME::Types["application/octet-stream"][0]

  part =  %{--#{BOUNDARY}\r\n}
  part << %{Content-Disposition: form-data; name="#{CGI.escape(name)}"; filename="#{filename}"\r\n}
  part << %{Content-Length: #{file.size}\r\n}
  part << %{Content-Type: #{mime_type.simplified}\r\n}
  part << %{Content-Transfer-Encoding: binary\r\n}
  part << %{\r\n}
  part
end