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/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
|
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
|
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
|
module Docurest
|
||||||
VERSION = "0.1.0"
|
VERSION = "0.1.0"
|
||||||
|
API_VERSION = "v2"
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user