lib/reviewed/client.rb in reviewed-0.1.2 vs lib/reviewed/client.rb in reviewed-0.1.4

- old
+ new

@@ -1,57 +1,78 @@ module Reviewed class Client - include ::Reviewed::Configurable + attr_accessor :api_key, :base_uri, :api_version, :request_params - attr_accessor :api_key, :base_uri, :api_version + BASE_URI = "http://localhost:3000/api/v1" - def initialize - Reviewed::Configurable.options.each do |key, value| - instance_variable_set(:"@#{key}", value) - end + def initialize(opts={}) + @api_key = opts[:api_key] || ENV['REVIEWED_API_KEY'] + @base_uri = opts[:base_uri] || BASE_URI + @request_params = opts[:request_params] || {} end - # Perform an HTTP DELETE request - def delete(path, params={}) - request(:delete, path, params) + def configure + yield self + self end # Perform an HTTP GET request def get(path, params={}) - request(:get, path, params) + perform(:get, path, params) end - # Perform an HTTP POST request - def post(path, params={}) - request(:post, path, params) - end - # Perform an HTTP PUT request def put(path, params={}) - request(:put, path, params) + perform(:put, path, params) end - def url - [base_uri, api_version].join('/') + # Perform an HTTP DELETE request + def post(path, params={}) + perform(:post, path, params) end - private + # Perform an HTTP DELETE request + def delete(path, params={}) + perform(:delete, path, params) + end - def request(method, path, params={}) - verify_key! + def resource(name) + klass_string = "Reviewed::#{name.to_s.singularize.classify}" + klass_string.constantize rescue name + end - connection.send(method.to_sym, path, params) do |request| - request.headers['X-Reviewed-Authorization'] ||= Reviewed.api_key - end + def method_missing(method, *args, &block) + Reviewed::Request.new(resource: resource(method), client: self) end def connection - @connection ||= ::Faraday.new(url: url) do |faraday| + @connection ||= ::Faraday.new(url: base_uri) do |faraday| faraday.response :mashify + faraday.response :errors faraday.response :json - faraday.request :global_params + faraday.request :api_key faraday.request :url_encoded faraday.adapter Faraday.default_adapter + end + end + + private + + def perform(method, path, params={}) + begin + self.connection.send(method.to_sym, path, params) do |request| + request.params.merge!(self.request_params) + request.headers['X-Reviewed-Authorization'] ||= self.api_key + end + rescue Faraday::Error::ClientError => e + message = <<-EOS.gsub(/^[ ]*/, '') + API Error. method: #{method}. path: #{path}. params: #{params.to_s}. api_key: #{self.api_key} + Original exception message: + #{e.message} + EOS + new_exception = Reviewed::ApiError.new(msg: message) + new_exception.set_backtrace(e.backtrace) # TODO not seeing in Airbrake + raise new_exception end end end end