]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/lib/puppet/feature/multipartable.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / lib / puppet / feature / multipartable.rb
1 #--
2 # Copyright (c) 2007-2013 Nick Sieger.
3 # See the file README.txt included with the distribution for
4 # software license details.
5 #++
6
7 require 'parts'
8   module Multipartable
9     DEFAULT_BOUNDARY = "-----------RubyMultipartPost"
10     def initialize(path, params, headers={}, boundary = DEFAULT_BOUNDARY)
11       headers = headers.clone # don't want to modify the original variable
12       parts_headers = headers.delete(:parts) || {}
13       super(path, headers)
14       parts = params.map do |k,v|
15         case v
16         when Array
17           v.map {|item| Parts::Part.new(boundary, k, item, parts_headers[k]) }
18         else
19           Parts::Part.new(boundary, k, v, parts_headers[k])
20         end
21       end.flatten
22       parts << Parts::EpiloguePart.new(boundary)
23       ios = parts.map {|p| p.to_io }
24       self.set_content_type(headers["Content-Type"] || "multipart/form-data",
25                             { "boundary" => boundary })
26       self.content_length = parts.inject(0) {|sum,i| sum + i.length }
27       self.body_stream = CompositeReadIO.new(*ios)
28     end
29   end