class Hurley::Query::Nested
Private Instance Methods
decode_pair(key, value)
click to toggle source
# File lib/hurley/query.rb, line 93 def decode_pair(key, value) if key !~ END_BRACKET self[key] = value return end first_key = key[0, key.index(START_BRACKET)] hash_keys = [first_key, *key.scan(/\[([^\]]+)?\]/).map(&:first)] last_index = hash_keys.size - 1 container = self hash_keys.each_with_index do |hash_key, index| if index < last_index if hash_keys[index+1] container = if hash_key container[hash_key] ||= {} else c = {} container << c container = c end else container = container[hash_key] ||= [] end else if hash_key container[hash_key] = value else container << value end end end end
encode_array(pairs, key, escaped_key, value)
click to toggle source
# File lib/hurley/query.rb, line 126 def encode_array(pairs, key, escaped_key, value) encode_nested_value(pairs, key, escaped_key, value) end
encode_hash(pairs, key, escaped_key, value)
click to toggle source
# File lib/hurley/query.rb, line 130 def encode_hash(pairs, key, escaped_key, value) value.each do |value_key, item| nested_key = "#{key}[#{value_key}]" nested_escaped_key = "#{escaped_key}%5B#{Url.escape_path(value_key)}%5D" encode_nested_value(pairs, nested_key, nested_escaped_key, item) end end
encode_nested_value(pairs, key, escaped_key, value)
click to toggle source
# File lib/hurley/query.rb, line 138 def encode_nested_value(pairs, key, escaped_key, value) case value when Array arr_key = "#{key}#{EMPTY_BRACKET}" arr_escaped_key = escaped_key + EMPTY_ESCAPED_BRACKET value.each do |item| encode_nested_value(pairs, arr_key, arr_escaped_key, item) end when Hash value.each do |hash_key, hash_value| nested_key = "#{key}[#{hash_key}]" nested_escaped_key = "#{escaped_key}%5B#{Url.escape_path(hash_key)}%5D" encode_nested_value(pairs, nested_key, nested_escaped_key, hash_value) end else pairs << Pair.new(key, escaped_key, value) end end