Class: ClientApiBuilder::QueryParams

Inherits:
Object
  • Object
show all
Defined in:
lib/client_api_builder/query_params.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name_value_separator: '=', param_separator: '&', custom_escape_proc: nil) ⇒ QueryParams

Returns a new instance of QueryParams.



11
12
13
14
15
# File 'lib/client_api_builder/query_params.rb', line 11

def initialize(name_value_separator: '=', param_separator: '&', custom_escape_proc: nil)
  @name_value_separator = name_value_separator
  @param_separator = param_separator
  @custom_escape_proc = custom_escape_proc
end

Instance Attribute Details

#custom_escape_procObject

Returns the value of attribute custom_escape_proc.



9
10
11
# File 'lib/client_api_builder/query_params.rb', line 9

def custom_escape_proc
  @custom_escape_proc
end

#name_value_separatorObject (readonly)

Returns the value of attribute name_value_separator.



6
7
8
# File 'lib/client_api_builder/query_params.rb', line 6

def name_value_separator
  @name_value_separator
end

#param_separatorObject (readonly)

Returns the value of attribute param_separator.



6
7
8
# File 'lib/client_api_builder/query_params.rb', line 6

def param_separator
  @param_separator
end

Instance Method Details

#escape(str) ⇒ Object



69
70
71
# File 'lib/client_api_builder/query_params.rb', line 69

def escape(str)
  custom_escape_proc ? custom_escape_proc.call(str) : CGI.escape(str)
end

#to_query(data, namespace = nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/client_api_builder/query_params.rb', line 17

def to_query(data, namespace = nil)
  case data
  when Hash
    to_query_from_hash(data, (namespace ? escape(namespace) : nil)).join(param_separator)
  when Array
    to_query_from_array(data, (namespace ? "#{escape(namespace)}[]" : '[]')).join(param_separator)
  else
    if namespace
      "#{escape(namespace)}#{name_value_separator}#{escape(data.to_s)}"
    else
      escape(data.to_s)
    end
  end
end

#to_query_from_array(array, namespace) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/client_api_builder/query_params.rb', line 52

def to_query_from_array(array, namespace)
  query_params = []

  array.each do |value|
    case value
    when Hash
      query_params += to_query_from_hash(value, namespace)
    when Array
      query_params += to_query_from_array(value, "#{namespace}[]")
    else
      query_params << "#{namespace}#{name_value_separator}#{escape(value.to_s)}"
    end
  end

  query_params
end

#to_query_from_hash(hsh, namespace) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/client_api_builder/query_params.rb', line 32

def to_query_from_hash(hsh, namespace)
  query_params = []

  hsh.each do |key, value|
    case value
    when Array
      array_namespace = namespace ? "#{namespace}[#{escape(key.to_s)}][]" : "#{escape(key.to_s)}[]"
      query_params += to_query_from_array(value, array_namespace)
    when Hash
      hash_namespace = namespace ? "#{namespace}[#{escape(key.to_s)}]" : "#{escape(key.to_s)}"
      query_params += to_query_from_hash(value, hash_namespace)
    else
      query_name = namespace ? "#{namespace}[#{escape(key.to_s)}]" : "#{escape(key.to_s)}"
      query_params << "#{query_name}#{name_value_separator}#{escape(value.to_s)}"
    end
  end

  query_params
end