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|