multiparty
Easily generate a multipart/form-data header and body.
Usage
You can add multiple values, corresponding to multiple statements:
@multiparty = Multiparty.new
@multiparty[:name] = "David Verhasselt"
@multiparty[:state] = "awesome"
# or in one statement:
@multiparty << {:name => "David Verhasselt", :state => "awesome"}
@multiparty[:avatar] = {:filename => "avatar.jpg", :content => "...jpegdata..."}
# Retrieve the header and body like this:
@multiparty.header
# Content-Type: multipart/form-data; boundary=multiparty-boundary-1342
@multiparty.body
# --multiparty-boundary-1342
# Content-Disposition: form-data; name="name"
#
# David Verhasselt
# --multiparty-boundary-1342
# Content-Disposition: form-data; name="state"
#
# awesome
# --multiparty-boundary-1342
# Content-Disposition: form-data; name="avatar"; filename="avatar.jpg"
# Content-Type: application/octet-stream
# Content-Transfer-Encoding: binary
#
# ...jpegdata...
# --multiparty-boundary-1342--
You can also add files:
@multiparty[:your_avatar] => File.open("foo.txt")
You can specify an optional content-type. If you don't, Multiparty will try and detect the correct MIME-type based on the filename.
@multiparty[:your_avatar] => {:filename => "foo.jpg", :content_type => "text/plain", :content => File.read("foo.txt")}
# -> Content-Type: text/plain
@multiparty[:your_avatar] => {:filename => "foo.jpg", content => "not really jpeg")}
# -> Content-Type: image/jpeg
@multiparty[:your_avatar] => File.open("foo.jpg")
# -> Content-Type: image/jpeg
Files and Tempfiles are interchangable in Multiparty:
tempfile = Tempfile.new("foo")
tempfile.write("Hello World!")
tempfile.rewind
@multiparty[:message] => tempfile
# is the same as
@multiparty[:message] => File.open(tempfile.path)
Multiparty has the to_s
method aliased to body
so you can use it as a String
:
puts "Hello World! My multipart body: #{@multiparty}"
Installation
$ gem install multiparty
Testing
$ bundle install
$ rake spec
Todo
- Nested multiparts ("multipart/mixed") not yet supported