Sha256: 9cb963a4fb139b69035159e3b844a44aadfd2cfc7b8fd3dbdbce528dc55cfeb5

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require 'rest_client'
require 'oauth'
require 'json'
require '<%= name %><%= suffix %>/rest_client_oauth'

module <%= class_base %><%= class_suffix %>
  class Base
    attr_reader :client

    def initialize(config = <%= class_base %><%= class_suffix %>.client_config)
      @client = RestClient::Resource.new(config[:base_url],
                                         :user     => config[:username],
                                         :password => config[:password],
                                         :oauth    => config[:oauth],
                                         :headers  => { :content_type => 'application/json',
                                                        :accept       => 'application/json' })
    end

    def call(method, path, payload = nil)
      if payload && (method == :post || method == :put)
        # TODO: is this neccessary? RestClient converts it automaticaly for me.
        payload = payload.to_json
      end
      ret  = client[path].send(*([method, payload].compact))
      data = begin
        JSON.parse(ret.body)
      rescue JSON::ParserError
        ret.body
      end
      return data, ret
    end

    def validate_params!(options, valid_keys)
      return unless options.is_a?(Hash)
      invalid_keys = options.keys - (valid_keys.is_a?(Hash) ? valid_keys.keys : valid_keys)
      raise ArgumentError, "Invalid keys: #{invalid_keys.join(", ")}" unless invalid_keys.empty?

      if valid_keys.is_a? Hash
        valid_keys.each do |key, keys|
          if options[key]
            validate_params!(options[key], keys)
          end
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
apipie-rails-0.0.9 lib/apipie/client/template/base.rb.tt