class AssinaMe::SDK

Attributes

base_url[R]

Public Class Methods

new(apikey, base_url = nil) click to toggle source
# File lib/AssinaMe/sdk.rb, line 9
def initialize(apikey, base_url = nil)
  @apikey = apikey

  @base_url = 'https://api.assina.me/v1'

  @base_url = base_url unless base_url.nil?
end

Public Instance Methods

base_url=(base_url) click to toggle source
# File lib/AssinaMe/sdk.rb, line 17
def base_url=(base_url)
  base_url[-1, base_url.length - 1] if base_url[-1, 1] == '/'

  @base_url = base_url
end
pdf_create(setup, original_file_path) click to toggle source
# File lib/AssinaMe/sdk.rb, line 49
def pdf_create(setup, original_file_path)
  document_token = pdf_setup(setup)
  pdf_upload(document_token, original_file_path)

  document_token
end
pdf_download(document_token, signed_file_path) click to toggle source
# File lib/AssinaMe/sdk.rb, line 64
def pdf_download(document_token, signed_file_path)
  response = send_get(
    "/pdf/#{document_token}/file",
    nil,
    { 'Accept': 'application/pdf' }
  )

  raise(AssinaMe::SDKException, 'Invalid API response') if response.empty?

  open(signed_file_path, 'w:ASCII-8BIT') do |file|
    file.puts(response)
  end
end
pdf_setup(setup) click to toggle source
# File lib/AssinaMe/sdk.rb, line 23
def pdf_setup(setup)
  response = send_post(
    '/pdf',
    nil,
    setup
  )

  raise(AssinaMe::SDKException, 'Invalid API response format') if !response.is_a?(Hash)

  raise(AssinaMe::SDKException, 'API response does not contain "document_token"') if response['document_token'].to_s.empty?

  response['document_token']
end
pdf_status(document_token) click to toggle source
# File lib/AssinaMe/sdk.rb, line 56
def pdf_status(document_token)
  response = send_get('/pdf/' + document_token)

  raise(AssinaMe::SDKException, 'Invalid API response format') if !response.is_a?(Hash)

  response
end
pdf_upload(document_token, original_file_path) click to toggle source
# File lib/AssinaMe/sdk.rb, line 37
def pdf_upload(document_token, original_file_path)
  file = open(original_file_path, 'rb')
  response = send_put(
    "/pdf/#{document_token}/file",
    nil,
    file,
    { 'Content-Type': 'application/pdf' }
  )

  raise(AssinaMe::SDKException, 'Invalid API response format') if !response.is_a?(Hash)
end

Private Instance Methods

send_get(uri, query = nil, headers = nil) click to toggle source
# File lib/AssinaMe/sdk.rb, line 80
def send_get(uri, query = nil, headers = nil)
  uri = '/' + uri if uri[0, 1] != '/'

  send_request(
    'GET',
    uri,
    query,
    nil,
    headers
  )
end
send_post(uri, query = nil, body = nil, headers = nil) click to toggle source
# File lib/AssinaMe/sdk.rb, line 92
def send_post(uri, query = nil, body = nil, headers = nil)
  send_request(
    'POST',
    uri,
    query,
    body,
    headers
  )
end
send_put(uri, query = nil, body = nil, headers = nil) click to toggle source
# File lib/AssinaMe/sdk.rb, line 102
def send_put(uri, query = nil, body = nil, headers = nil)
  send_request(
    'PUT',
    uri,
    query,
    body,
    headers
  )
end
send_request(method, uri, query, body, headers) click to toggle source
# File lib/AssinaMe/sdk.rb, line 112
def send_request(method, uri, query, body, headers)
  default_headers = {
    'Content-Type': 'application/json; charset=utf-8',
    Authorization: "Bearer #{@apikey}"
  }

  body = MultiJson.dump(body) if !body.nil? && body.is_a?(Hash)

  default_headers.merge!(headers) if !headers.nil? && headers.is_a?(Object)

  begin
    response = RestClient::Request.execute(
      method: method,
      url: @base_url + uri,
      payload: body,
      open_timeout: 30,
      timeout: 90,
      headers: default_headers
    )
  rescue RestClient::Exception => exception
    raise(AssinaMe::SDKError, exception.message)
  end

  if response.headers.key?(:content_type)
    content_type = response.headers[:content_type]

    if content_type[%r{^application\/json}]
      begin
        json = MultiJson.load(response.body)
      rescue MultiJson::DecodeError
        raise(AssinaMe::SDKException, 'Invalid API response format')
      end

      if json['status'].to_s.empty? || json['status'].to_s == 'false'
        raise(AssinaMe::SDKException, json['reason']) if !json['reason'].to_s.empty?

        raise(AssinaMe::SDKException, json['message']) if !json['message'].to_s.empty?

        raise(AssinaMe::SDKException, 'Unknown SDK exception') if json['exception'].to_s.empty?

        raise(AssinaMe::SDKException, json['exception'])
      end

      return json
    end
  end

  response.body
end