Add low level methods to query API
This commit is contained in:
parent
5b30cbc6ee
commit
f0a32f1ff4
@ -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
86
lib/docurest/client.rb
Normal 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
|
16
lib/docurest/client/oauth.rb
Normal file
16
lib/docurest/client/oauth.rb
Normal 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
|
22
lib/docurest/client/password.rb
Normal file
22
lib/docurest/client/password.rb
Normal 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
|
@ -1,3 +1,4 @@
|
||||
module Docurest
|
||||
VERSION = "0.1.0"
|
||||
API_VERSION = "v2"
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user