Sha256: 5e9d2db7bf0a04d3d0cdc9b5a8fb8fc44b4c871b8483bef619a14a17a1259d89
Contents?: true
Size: 1.64 KB
Versions: 20
Compression:
Stored size: 1.64 KB
Contents
# frozen_string_literal: true # Rails Helper methods to take a hash and turn it to form <input type="hidden"> # fields, works with hash nested with other hashes and arrays, standard rails # serialization style. Oddly while Hash#to_query will do this for a URL # query parameters, there seems to be no built in way to do it to create # hidden form fields instead. # # Code taken from http://marklunds.com/articles/one/314 # # This is used to serialize a complete current query from current params # to form fields used for sort and change per-page module Blacklight::HashAsHiddenFieldsHelperBehavior ## # Writes out zero or more <input type="hidden"> elements, completely # representing a hash passed in using Rails-style request parameters # for hashes nested with arrays and other hashes. # @param [Hash] hash # @return [String] def render_hash_as_hidden_fields(hash) hidden_fields = [] flatten_hash(hash).each do |name, value| value = Array.wrap(value) value.each do |v| hidden_fields << hidden_field_tag(name, v.to_s, id: nil) end end safe_join(hidden_fields, "\n") end private def flatten_hash(hash = params, ancestor_names = []) flat_hash = {} hash.each do |k, v| names = Array.new(ancestor_names) names << k if v.is_a?(Hash) flat_hash.merge!(flatten_hash(v, names)) else key = flat_hash_key(names) key += "[]" if v.is_a?(Array) flat_hash[key] = v end end flat_hash end def flat_hash_key(names) names = Array.new(names) name = names.shift.to_s.dup names.each do |n| name << "[#{n}]" end name end end
Version data entries
20 entries across 20 versions & 1 rubygems