class Pepipost::APIHelper

Public Class Methods

append_url_with_query_parameters(query_builder, parameters) click to toggle source

Appends the given set of parameters to the given query string @param [String] The query string builder to replace the template parameters @param [Array] The parameters to append

# File lib/pepipost/api_helper.rb, line 35
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.is_a? String

  # return if there are no parameters to replace
  abort('no parameters to append') if parameters.nil?

  # 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
  query_builder << separator << URI.unescape(URI.encode_www_form(parameters))
end
append_url_with_template_parameters(query_builder, parameters) click to toggle source

Replaces template parameters in the given url @param [String] The query string builder to replace the template parameters @param [Array] The parameters to replace in the url

# File lib/pepipost/api_helper.rb, line 6
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.is_a? String

  # return if there are no parameters to replace
  abort('no parameters to append') if parameters.nil?

  # iterate and append parameters
  parameters.map do |key, value|
    replace_value = ''

    if value.nil?
      replace_value = ''
    elsif value.is_a? Enumerable
      replace_value = value.join('/')
    else
      replace_value = 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

  query_builder
end
clean_url(url) click to toggle source

Validates and processes the given Url @param [String] The given Url to process @return [String] Pre-processed Url as string

# File lib/pepipost/api_helper.rb, line 56
def self.clean_url(url)
  # perform parameter validation
  raise ArgumentError, 'Invalid Url.' unless url.is_a? 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]

  # remove redundant forward slashes
  query = url[protocol.length..-1].gsub(%r{\/\/+}, '/')

  # return process url
  protocol + query
end