lib/zuora/client.rb in zuora-ruby-0.1.0 vs lib/zuora/client.rb in zuora-ruby-0.2.0

- old
+ new

@@ -9,56 +9,43 @@ # Non-success response ErrorResponse = Class.new StandardError class Client - attr_accessor :connection + attr_reader :connection # Creates a connection instance. # Makes an initial HTTP request to fetch session token. # Subsequent requests made with .get, .post, and .put # contain the authenticated session id in their headers. # @param [String] username # @param [String] password # @param [Boolean] sandbox # @return [Zuora::Client] with .connection, .put, .post def initialize(username, password, sandbox = false) - url = api_url sandbox + base_url = api_url sandbox + conn = connection base_url - response = connection(url).post do |req| - req.url '/rest/v1/connections' - req.headers['apiAccessKeyId'] = username - req.headers['apiSecretAccessKey'] = password - req.headers['Content-Type'] = 'application/json' - end + response = auth_request conn, username, password - if response.status == 200 - @auth_cookie = response.headers['set-cookie'].split(' ')[0] - @connection = connection(url) - else - fail ConnectionError, response.body['reasons'] - end + handle_response response, conn end # @param [String] url - URL of request # @return [Faraday::Response] A response, with .headers, .status & .body def get(url) @connection.get do |req| - req.url url - req.headers['Content-Type'] = 'application/json' - req.headers['Cookie'] = @auth_cookie + set_request_headers! req, url end end # @param [String] url - URL for HTTP POST request # @param [Params] params - Data to be sent in request body # @return [Faraday::Response] A response, with .headers, .status & .body def post(url, params) response = @connection.post do |req| - req.url url - req.headers['Content-Type'] = 'application/json' - req.headers['Cookie'] = @auth_cookie + set_request_headers! req, url req.body = JSON.generate params end response # if response.body['success'] @@ -70,15 +57,13 @@ # @param [String] url - URL for HTTP PUT request # @param [Params] params - Data to be sent in request body # @return [Faraday::Response] A response, with .headers, .status & .body def put(url, params) - response = @connection.put do |req| - req.url url - req.headers['Content-Type'] = 'application/json' - req.headers['Cookie'] = @auth_cookie - req.body = JSON.generate params + response = @connection.put do |request| + set_request_headers! request, url + request.body = JSON.generate params end response # if response.body['success'] # return response @@ -86,9 +71,50 @@ # raise ErrorResponse.new(response) # end end private + + # Make connection attempt + # @param [Faraday::Connection] conn + # @param [String] username + # @param [String] password + def auth_request(conn, username, password) + conn.post do |request| + set_auth_request_headers! request, username, password + end + end + + # Sets instance variables or throws Connection error + # @param [Faraday::Response] response + # @param [Faraday::Connection] conn + def handle_response(response, conn) + if response.status == 200 + @auth_cookie = response.headers['set-cookie'].split(' ')[0] + @connection = conn + else + fail ConnectionError, response.body['reasons'] + end + end + + # @param [Faraday::Request] request - Faraday::Request builder + # @param [String] username - Zuora username + # @param [String] password - Zuora password + def set_auth_request_headers!(request, username, password) + request.url '/rest/v1/connections' + request.headers['apiAccessKeyId'] = username + request.headers['apiSecretAccessKey'] = password + request.headers['Content-Type'] = 'application/json' + end + + # @param [Faraday::Request] request - Faraday Request builder + # @param [String] url - Relative URL for HTTP request + # @return [Nil] + def set_request_headers!(request, url) + request.url url + request.headers['Content-Type'] = 'application/json' + request.headers['Cookie'] = @auth_cookie + end # @param [String] url # @return [Faraday::Client] def connection(url) Faraday.new(url, ssl: { verify: false }) do |conn|