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