Class: SuggestGrid::APIHelper
- Inherits:
-
Object
- Object
- SuggestGrid::APIHelper
- Defined in:
- lib/suggest_grid/api_helper.rb
Class Method Summary collapse
-
.append_url_with_query_parameters(query_builder, parameters) ⇒ Object
Appends the given set of parameters to the given query string.
-
.append_url_with_template_parameters(query_builder, parameters) ⇒ Object
Replaces template parameters in the given url.
-
.clean_hash(hash) ⇒ Object
Removes elements with empty values from a hash.
-
.clean_url(url) ⇒ String
Validates and processes the given Url.
-
.form_encode(obj, instance_name) ⇒ Hash
Form encodes an object.
-
.form_encode_parameters(form_parameters) ⇒ Hash
Form encodes a hash of parameters.
-
.json_deserialize(json) ⇒ Object
Parses JSON string.
Class Method Details
.append_url_with_query_parameters(query_builder, parameters) ⇒ Object
Appends the given set of parameters to the given query string
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
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
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 |