Skip to content

Instantly share code, notes, and snippets.

@DiegoSalazar
Created April 8, 2015 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DiegoSalazar/192a6b9336f350ee122c to your computer and use it in GitHub Desktop.
Save DiegoSalazar/192a6b9336f350ee122c to your computer and use it in GitHub Desktop.
Converts a nested hash into a flat hash with bracketed keys as needed by http multipart form data
# Flatten a hash's keys down and format them like http form data
# e.g. { user: { id: 1, posts: [{ name: 'test' }] }, debug: true }
# becomes
# { 'user[id]' => 1, 'user[posts][0][name]' => 'test', 'debug' => true }
def convert_params_to_form_data(params, form_data = {}, prefix = '')
bracketeer = ->(p, k) { "#{p}#{p.empty? ? '' : '['}#{k}#{p.empty? ? '' : ']'}" }
params.each_with_object form_data do |(key, value), form_data|
case value when Hash
convert_params_to_form_data value, form_data, bracketeer.call(prefix, key)
when Array
value.each_with_index do |v, i|
convert_params_to_form_data v, form_data, "#{prefix}[#{key}][#{i}]"
end
else
form_data[bracketeer.call(prefix, key)] = value
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment