@@ -33,15 +33,11 @@ def initialize(path, params, headers={}, boundary = Multipartable.secure_boundar
3333 parts_headers . transform_keys! ( &:to_sym )
3434
3535 super ( path , headers )
36- parts = params . transform_keys ( &:to_sym ) . map do |k , v |
37- case v
38- when Array
39- v . map { |item | Parts ::Part . new ( boundary , k , item , parts_headers [ k ] ) }
40- else
41- Parts ::Part . new ( boundary , k , v , parts_headers [ k ] )
42- end
43- end . flatten
36+
37+ parts = Array . new
38+ generate_parts ( parts , params , boundary , parts_headers , '' )
4439 parts << Parts ::EpiloguePart . new ( boundary )
40+
4541 ios = parts . map { |p | p . to_io }
4642 self . set_content_type ( headers [ "Content-Type" ] || "multipart/form-data" ,
4743 { "boundary" => boundary } )
@@ -52,6 +48,30 @@ def initialize(path, params, headers={}, boundary = Multipartable.secure_boundar
5248 end
5349
5450 attr :boundary
51+
52+ private
53+
54+ def generate_parts ( parts , params , boundary , parts_headers , prefix )
55+ params . each do |key , value |
56+ key = key . to_sym
57+ generate_nested_parts ( parts , key , value , boundary , parts_headers , prefix )
58+ end
59+ end
60+
61+ def generate_nested_parts ( parts , key , value , boundary , parts_headers , prefix )
62+ nested_prefix = prefix . empty? ? key . to_s : "#{ prefix } [#{ key } ]"
63+
64+ case value
65+ when Array
66+ value . each do |item |
67+ generate_nested_parts ( parts , '' , item , boundary , parts_headers , nested_prefix )
68+ end
69+ when Hash
70+ generate_parts ( parts , value , boundary , parts_headers , nested_prefix )
71+ else
72+ parts << Parts ::Part . new ( boundary , nested_prefix , value , parts_headers [ key ] )
73+ end
74+ end
5575 end
5676 end
5777end
0 commit comments