class Apisync::Http::QueryString

Public Class Methods

new(filters:) click to toggle source
# File lib/apisync/http/query_string.rb, line 4
def initialize(filters:)
  @filters = filters
end

Public Instance Methods

to_s() click to toggle source
# File lib/apisync/http/query_string.rb, line 8
def to_s
  result = ""
  result << format_filters if @filters
  result
end

Private Instance Methods

format_filters() click to toggle source

Takes a list of `[key]=value` strings and maps them adding `“filter”` as prefix.

Results in `filter=value&filter=value2`.

# File lib/apisync/http/query_string.rb, line 20
def format_filters
  recursive_brackets(@filters)
    .flatten
    .map { |filter| "filter#{filter}" }
    .join("&")
end
recursive_brackets(hash, prefix = "") click to toggle source

Takes a hash such as

{
  field_one: 'value1',
  metadata: {
    field_two: "value2",
    field_three: "value3"
  }
}

and returns

[
  "[field-one]=value1",
  "[metadata][field-two]=value2",
  "[metadata][field-three]=value3"
]

This can be used for creating filter querystrings.

# File lib/apisync/http/query_string.rb, line 46
def recursive_brackets(hash, prefix = "")
  result = []
  hash.each do |key, value|
    key = key.to_s
    if value.is_a?(Hash)
      prefix = "#{prefix}[#{key}]"
      top_nodes = recursive_brackets(value, prefix)
      result << top_nodes
    else
      result << "#{prefix}[#{key}]=#{value}"
    end
  end

  result
end