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