class Pandarus::APIBase

Attributes

response[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/pandarus/api_base.rb, line 9
def initialize(*args)
  @pagination_params = {}
  super
end

Public Instance Methods

mixed_request(method, path, query_params, form_params, headers) click to toggle source

Swagger allows for each param to be a query param or a form param, which is a bit unusual because in the 99% case, all params will be of one type or the other for a single Canvas request. In order to accommodate the 1% case, however, we allow for mixed requests in general.

# File lib/pandarus/api_base.rb, line 18
def mixed_request(method, path, query_params, form_params, headers)
  @response = connection.send(method) do |r|
    if query_params.empty?
      r.path = fullpath(path)
    else
      r.url(fullpath(path), query_params)
    end
    r.body = form_params unless form_params.empty?
    r.headers = headers if headers
  end
  @response.body
end
page_params_load(method, path) click to toggle source
# File lib/pandarus/api_base.rb, line 51
def page_params_load(method, path)
  @pagination_params[remember_key(method, path)]
end
page_params_store(method, path, response=@response.env) click to toggle source
# File lib/pandarus/api_base.rb, line 43
def page_params_store(method, path, response=@response.env)
  @pagination_params[remember_key(method, path)] = {
    next: parse_page_params!(response[:next_page]),
    current: parse_page_params!(response[:current_page]),
    last: parse_page_params!(response[:last_page])
  }
end
parse_page_params!(url) click to toggle source
# File lib/pandarus/api_base.rb, line 35
def parse_page_params!(url)
  return nil if url.nil?
  uri = URI.parse url
  Hash[URI.decode_www_form(uri.query)]
rescue URI::InvalidURIError
  nil
end
remember_key(method, path) click to toggle source
# File lib/pandarus/api_base.rb, line 31
def remember_key(method, path)
  "#{method}:#{path}"
end
underscored_merge_opts(opts, base) click to toggle source
# File lib/pandarus/api_base.rb, line 61
def underscored_merge_opts(opts, base)
  base.merge(opts).merge(underscored_flatten_hash(opts))
end
was_last_page?(method, path) click to toggle source
# File lib/pandarus/api_base.rb, line 55
def was_last_page?(method, path)
  params = @pagination_params[remember_key(method, path)]
  return false if params.nil? || params[:current].nil? || params[:last].nil?
  return (params[:current] == params[:last])
end

Protected Instance Methods

dot_flatten_hash(hash) click to toggle source
# File lib/pandarus/api_base.rb, line 81
def dot_flatten_hash(hash)
  Hash[dot_flatten_recur(hash)]
end
dot_flatten_recur(hash) click to toggle source
# File lib/pandarus/api_base.rb, line 85
def dot_flatten_recur(hash)
  hash.map do |k1, v1|
    if v1.is_a?(Hash)
      dot_flatten_recur(v1).map do |k2, v2|
        ["#{k1}.#{k2}", v2]
      end.flatten(1)
    else
      [k1, v1]
    end
  end
end
escape_string(string) click to toggle source
# File lib/pandarus/api_base.rb, line 97
def escape_string(string)
  URI.encode(string.to_s)
end
path_replace(path, args={}) click to toggle source
# File lib/pandarus/api_base.rb, line 125
def path_replace(path, args={})
  rpath = path.dup
  args.each_pair do |key, value|
    rpath.sub!("{#{key}}", escape_string(value))
  end
  rpath
end
select_params(params, param_keys) click to toggle source

pull querystring keys from options, and convert double underscores back to square brackets

# File lib/pandarus/api_base.rb, line 115
def select_params(params, param_keys)
  Hash[
    params.select do |key, value|
      param_keys.include? key
    end.map do |key, value|
      [underscores_to_square_brackets(key), value]
    end
  ]
end
select_query_params(params, param_keys) click to toggle source
# File lib/pandarus/api_base.rb, line 108
def select_query_params(params, param_keys)
  param_keys.concat([:per_page, :cache_pages])
  select_params(params, param_keys)
end
underscored_flatten_hash(hash) click to toggle source

Take a hash such as { :user => { :name => “me” } } and return a flattened hash such as { :user__name__ => “me” }. We do this as a workaround to swagger's disdain for rails-style square bracket parameters in the url.

# File lib/pandarus/api_base.rb, line 70
def underscored_flatten_hash(hash)
  Hash[
    dot_flatten_hash(hash).map do |key, value|
      count = 0
      newkey = key.to_s.gsub(".") {|x| count += 1; count == 1 ? '__' : '____' }
      newkey += '__' if count > 0
      [newkey.to_sym, value]
    end
  ]
end
underscores_to_square_brackets(key) click to toggle source

Convert something like user__name__ to user

# File lib/pandarus/api_base.rb, line 102
def underscores_to_square_brackets(key)
  key.to_s.gsub(/__(.+?)__/) do |x|
    "[#{ $1 }]"
  end.to_sym
end