Add low level methods to query API

This commit is contained in:
Guillaume Dott 2016-07-07 15:58:22 +02:00
parent 5b30cbc6ee
commit f0a32f1ff4
5 changed files with 152 additions and 1 deletions

View File

@ -1,5 +1,31 @@
require "docurest/version"
require "docurest/field"
require "docurest/client"
require "docurest/client/oauth"
require "docurest/client/password"
require "docurest/base"
require "docurest/envelope"
require "docurest/envelope/document"
require "docurest/envelope/recipient"
require "docurest/envelope/recipient/tab"
require "docurest/login"
module Docurest
# Your code goes here...
class << self
attr_accessor :client
def with_client(other_client)
old_client = @client
@client = other_client
yield if block_given?
ensure
@client = old_client
end
end
end

86
lib/docurest/client.rb Normal file
View File

@ -0,0 +1,86 @@
require "json"
require "net/http"
module Docurest
class Client
def initialize(account_id: nil, base_url: nil, env: :test)
@account_id = account_id
@base_url = base_url
@env = env
end
def delete(url, body, use_base_url: true, parse_json: true)
request = Net::HTTP::Delete.new build_uri(url, use_base_url),
{'Content-Type' => 'application/json'}
request.body = JSON.generate(body)
query request, parse_json: parse_json
end
def get(url, request_query = {}, use_base_url: true, parse_json: true)
uri = build_uri(url, use_base_url)
uri.query = URI.encode_www_form(request_query)
request = Net::HTTP::Get.new uri
query request, parse_json: parse_json
end
def post(url, body, use_base_url: true, parse_json: true)
request = Net::HTTP::Post.new build_uri(url, use_base_url),
{'Content-Type' => 'application/json'}
request.body = JSON.generate(body)
query request, parse_json: parse_json
end
def put(url, body, use_base_url: true, parse_json: true)
request = Net::HTTP::Put.new build_uri(url, use_base_url),
{'Content-Type' => 'application/json'}
request.body = JSON.generate(body)
query request, parse_json: parse_json
end
def query(request, parse_json:)
add_authentication_header request
res = Net::HTTP.start(request.uri.hostname, request.uri.port, use_ssl: request.uri.scheme == 'https') do |http|
http.request request
end
if parse_json
JSON.parse res.body
else
res.body
end
end
private
def add_authentication_header(request)
end
def base_url
@base_url ||= begin
account = Docurest::Login.information[:accounts].detect do |acc|
(@account_id && (acc.id == @account_id || acc.guid == @account_id)) || acc.default
end
if account
@account_id = account.id
"#{account.url}"
else
api_url
end
end
end
def api_url
if @env == :production
"https://www.docusign.net/restapi/#{API_VERSION}"
else
"https://demo.docusign.net/restapi/#{API_VERSION}"
end
end
def build_uri(url, use_base_url = true)
URI("#{use_base_url ? base_url : api_url}#{url}")
end
end
end

View File

@ -0,0 +1,16 @@
module Docurest
class Client::Oauth < Docurest::Client
AUTHENTICATION_HEADER = 'Authorization'
def initialize(access_token, **options)
super options
@access_token = access_token
end
private
def add_authentication_header(request)
request[AUTHENTICATION_HEADER] = "bearer#{@access_token}" if @access_token
end
end
end

View File

@ -0,0 +1,22 @@
module Docurest
class Client::Password < Docurest::Client
AUTHENTICATION_HEADER = 'X-DocuSign-Authentication'
def initialize(username, password, integrator_key, **options)
super options
@username = username
@password = password
@integrator_key = integrator_key
end
private
def add_authentication_header(request)
request[AUTHENTICATION_HEADER] = JSON.generate({
"Username" => @username,
"Password" => @password,
"IntegratorKey" => @integrator_key,
})
end
end
end

View File

@ -1,3 +1,4 @@
module Docurest
VERSION = "0.1.0"
API_VERSION = "v2"
end