class Apipie::Client::Base

Attributes

client[R]
config[R]

Public Instance Methods

call(method, path, params = { }, headers = { }) click to toggle source
# File lib/apipie/client/base.rb, line 21
def call(method, path, params = { }, headers = { })
  headers ||= { }

  args = [method]
  if [:post, :put].include?(method)
    args << params.to_json
  else
    headers[:params] = params if params
  end

  args << headers if headers
  process_data client[path].send(*args)
end
validate_params!(params, rules) click to toggle source
# File lib/apipie/client/base.rb, line 47
def validate_params!(params, rules)
  return unless params.is_a?(Hash)

  invalid_keys = params.keys.map(&:to_s) - (rules.is_a?(Hash) ? rules.keys : rules)
  raise ArgumentError, "Invalid keys: #{invalid_keys.join(", ")}" unless invalid_keys.empty?

  if rules.is_a? Hash
    rules.each do |key, sub_keys|
      validate_params!(params[key], sub_keys) if params[key]
    end
  end
end

Protected Instance Methods

check_params(params, options = { }) click to toggle source
# File lib/apipie/client/base.rb, line 71
def check_params(params, options = { })
  raise ArgumentError unless (method = options[:method])
  return unless config[:enable_validations]

  case options[:allowed]
    when true
      validate_params!(params, self.class.validation_hash(method))
    when false
      raise ArgumentError, "this method '#{method}' does not support params" if params && !params.empty?
    else
      raise ArgumentError, "options :allowed should be true or false, it was #{options[:allowed]}"
  end
end
fill_params_in_url(url, params) click to toggle source

@return url and rest of the params

# File lib/apipie/client/base.rb, line 86
def fill_params_in_url(url, params)
  params          ||= { }
  # insert param values
  url_param_names = params_in_path(url)
  url             = params_in_path(url).inject(url) do |url, param_name|
    param_value = params[param_name] or
        raise ArgumentError, "missing param '#{param_name}' in parameters"
    url.sub(":#{param_name}", param_value.to_s)
  end

  return url, params.reject { |param_name, _| url_param_names.include? param_name }
end
process_data(response) click to toggle source
# File lib/apipie/client/base.rb, line 62
def process_data(response)
  data = begin
    JSON.parse(response.body)
  rescue JSON::ParserError
    response.body
  end
  return data, response
end

Public Class Methods

doc() click to toggle source
# File lib/apipie/client/base.rb, line 35
def self.doc
  raise NotImplementedError
end
method_doc(method) click to toggle source
# File lib/apipie/client/base.rb, line 43
def self.method_doc(method)
  method_docs[method.to_s]
end
new(config, options = { }) click to toggle source
# File lib/apipie/client/base.rb, line 11
def initialize(config, options = { })
  @client = RestClient::Resource.new config[:base_url],
                                     :user     => config[:username],
                                     :password => config[:password],
                                     :oauth    => config[:oauth],
                                     :headers  => { :content_type => 'application/json',
                                                    :accept       => 'application/json' }
  @config = config
end
validation_hash(method) click to toggle source
# File lib/apipie/client/base.rb, line 39
def self.validation_hash(method)
  validation_hashes[method.to_s]
end