Class: SuggestGrid::APIHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/suggest_grid/api_helper.rb

Class Method Summary collapse

Class Method Details

.append_url_with_query_parameters(query_builder, parameters) ⇒ Object

Appends the given set of parameters to the given query string

Raises:

  • (ArgumentError)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/suggest_grid/api_helper.rb', line 39

def self.append_url_with_query_parameters(query_builder, parameters)
  # perform parameter validation

  raise ArgumentError, 'Given value for parameter \"query_builder\" is invalid.' unless query_builder.instance_of? String

  # return if there are no parameters to replace

  if parameters.nil?
    return query_builder
  else
    # remove any nil values

    parameters = parameters.reject { |_key, value| value.nil? }

    # does the query string already has parameters

    has_params = query_builder.include? '?'
    separator = has_params ? '&' : '?'

    # append query with separator and parameters and return

    return query_builder << separator << URI.encode_www_form(parameters)
  end
end

.append_url_with_template_parameters(query_builder, parameters) ⇒ Object

Replaces template parameters in the given url

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/suggest_grid/api_helper.rb', line 8

def self.append_url_with_template_parameters(query_builder, parameters)
  # perform parameter validation

  raise ArgumentError, 'Given value for parameter \"query_builder\" is invalid.' unless query_builder.instance_of? String

  # return if there are no parameters to replace

  if parameters.nil?
    query_builder
  else
    # iterate and append parameters

    parameters.each do |key, value|
      replace_value = ''

      if value.nil?
        replace_value = ''
      elsif value.instance_of? Array
        value.map!{|element| CGI.escape(element.to_s)}
        replace_value = value.join('/')
      else
        replace_value = CGI.escape(value.to_s)
      end

      # find the template parameter and replace it with its value

      query_builder = query_builder.gsub('{' + key.to_s + '}', replace_value)
    end
  end
  return query_builder
end

.clean_hash(hash) ⇒ Object

Removes elements with empty values from a hash.



99
100
101
# File 'lib/suggest_grid/api_helper.rb', line 99

def self.clean_hash(hash)
  hash.delete_if { |key, value| value.to_s.strip.empty? }
end

.clean_url(url) ⇒ String

Validates and processes the given Url

Raises:

  • (ArgumentError)


62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/suggest_grid/api_helper.rb', line 62

def self.clean_url(url)
  # perform parameter validation

  raise ArgumentError, 'Invalid Url.' unless url.instance_of? String

  # ensure that the urls are absolute

  matches = url.match(%r{^(https?:\/\/[^\/]+)})
  raise ArgumentError, 'Invalid Url format.' if matches.nil?

  # get the http protocol match

  protocol = matches[1]
  
  # check if parameters exist

  index = url.index('?')

  # remove redundant forward slashes

  query = url[protocol.length...(index != nil ? index : url.length)]
  query.gsub!(%r{\/\/+}, '/')

  # get the parameters

  parameters = index != nil ? url[url.index('?')...url.length] : ""

  # return processed url

  return protocol + query  + parameters
end

.form_encode(obj, instance_name) ⇒ Hash

Form encodes an object.



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/suggest_grid/api_helper.rb', line 118

def self.form_encode(obj, instance_name)
  retval = Hash.new

  # If this is a structure, resolve it's field names.

  if obj.kind_of? BaseModel
    obj = obj.to_hash
  end
  
  # Create a form encoded hash for this object.

  if obj == nil
    nil         
  elsif obj.instance_of? Array
    obj.each_with_index do |value, index|
      retval.merge!(APIHelper.form_encode(value, instance_name + "[" + index.to_s + "]"))
    end
  elsif obj.instance_of? Hash
    obj.each do |key, value|
      retval.merge!(APIHelper.form_encode(value, instance_name + "[" + key + "]"))
    end
  else
    retval[instance_name] = obj
  end
  return retval
end

.form_encode_parameters(form_parameters) ⇒ Hash

Form encodes a hash of parameters.



106
107
108
109
110
111
112
# File 'lib/suggest_grid/api_helper.rb', line 106

def self.form_encode_parameters(form_parameters)
  encoded = Hash.new
  form_parameters.each do |key, value|
    encoded.merge!(APIHelper.form_encode value, key)
  end 
  return encoded
end

.json_deserialize(json) ⇒ Object

Parses JSON string.



89
90
91
92
93
94
95
# File 'lib/suggest_grid/api_helper.rb', line 89

def self.json_deserialize(json)
  begin
    return JSON.parse(json)
  rescue
    raise TypeError, "Server responded with invalid JSON."
  end
end