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