class Pingen::Client

Constants

DEFAULT_TIMEOUT

Public Class Methods

new(base_url: nil, token: nil, logger: NoLogger.new) click to toggle source
# File lib/pingen/client.rb, line 15
def initialize(base_url: nil, token: nil, logger: NoLogger.new)
  @base_url = base_url || ENV["PINGEN_API_URL"] || "https://api.pingen.com"
  @token = token || ENV["PINGEN_API_TOKEN"]
  @logger = logger
end

Public Instance Methods

cancel_send(send_id) click to toggle source

allows you to cancel a pending send

# File lib/pingen/client.rb, line 57
def cancel_send(send_id)
  get_request("/send/cancel/id/#{send_id}")
end
delete(id) click to toggle source
# File lib/pingen/client.rb, line 43
def delete(id)
  post_request("/document/delete/id/#{id}", {})
end
get(id) click to toggle source
# File lib/pingen/client.rb, line 25
def get(id)
  get_request("/document/get/id/#{id}")
end
get_request(path, params = nil, request_params = {}) click to toggle source
# File lib/pingen/client.rb, line 65
def get_request(path, params = nil, request_params = {})
  url = build_url(path)
  req = build_get_request(url, params)
  perform_request(url, req, request_params)
end
list() click to toggle source
# File lib/pingen/client.rb, line 21
def list
  get_request("/document/list")
end
pdf(id) click to toggle source
# File lib/pingen/client.rb, line 39
def pdf(id)
  get_request("/document/pdf/id/#{id}")
end
post_multipart_request(path, file, params, request_params = {}) click to toggle source
# File lib/pingen/client.rb, line 77
def post_multipart_request(path, file, params, request_params = {})
  url = build_url(path)
  request = build_multipart_post_request(url, file, params)
  perform_request(url, request, request_params)
end
post_request(path, params, request_params = {}) click to toggle source
# File lib/pingen/client.rb, line 71
def post_request(path, params, request_params = {})
  url = build_url(path)
  request = build_post_request(url, params)
  perform_request(url, request, request_params)
end
schedule_send(id, **send_params) click to toggle source

send_params: fast_send: true | false, default: false.

true - A Post
false - B Post

color: true | false, default: false

# File lib/pingen/client.rb, line 52
def schedule_send(id, **send_params)
  post_request("/document/send/id/#{id}", parse_send_params(send_params))
end
track(send_id) click to toggle source
# File lib/pingen/client.rb, line 61
def track(send_id)
  get_request("/send/track/id/#{send_id}")
end
upload(pdf, send: false, **send_params) click to toggle source

send_params: fast_send: true | false, default: false.

true - A Post
false - B Post

color: true | false, default: false

# File lib/pingen/client.rb, line 34
def upload(pdf, send: false, **send_params)
  data = {send: send}.merge(send ? parse_send_params(send_params) : {})
  post_multipart_request("/document/upload", pdf, data: data.to_json)
end

Protected Instance Methods

build_get_request(url, params) click to toggle source
# File lib/pingen/client.rb, line 92
def build_get_request(url, params)
  url.query = URI.encode_www_form(params) unless params.nil?
  Net::HTTP::Get.new(url).tap(&method(:header_params))
end
build_multipart_post_request(url, file_path, params) click to toggle source
# File lib/pingen/client.rb, line 97
def build_multipart_post_request(url, file_path, params)
  Net::HTTP::Post::Multipart.new(url.path,
    params.merge("file" => UploadIO.new(file_path,
      "application/pdf",
      File.basename(file_path))))
end
build_post_request(url, params) click to toggle source
# File lib/pingen/client.rb, line 104
def build_post_request(url, params)
  Net::HTTP::Post.new(url.path).tap do |request|
    header_params(request)
    request.body = params.to_json
  end
end
build_url(path) click to toggle source
# File lib/pingen/client.rb, line 85
def build_url(path)
  uri = @base_url.dup
  uri << "/" unless uri.end_with? "/"
  path << "/token/#{@token}"
  URI.join(URI.parse(uri), path)
end
header_params(request) click to toggle source
# File lib/pingen/client.rb, line 126
def header_params(request)
  request["Content-Type"] = "application/json"
  request["Accept"] = "application/json"
end
manipulate_http_request(http_new, request_params) click to toggle source
# File lib/pingen/client.rb, line 117
def manipulate_http_request(http_new, request_params)
  http_new.use_ssl = @base_url.start_with?("https")
  http_new.open_timeout = DEFAULT_TIMEOUT
  http_new.read_timeout = DEFAULT_TIMEOUT
  request_params.each do |key, val|
    http_new.public_send("#{key}=", val)
  end
end
perform_request(url, request, request_params) click to toggle source
# File lib/pingen/client.rb, line 111
def perform_request(url, request, request_params)
  http_new = Net::HTTP.new(url.hostname, url.port)
  manipulate_http_request(http_new, request_params)
  Response.from(@logger.call(url, request) { http_new.start { |http| http.request(request) } })
end

Private Instance Methods

parse_send_params(**params) click to toggle source
# File lib/pingen/client.rb, line 133
def parse_send_params(**params)
  {color: params[:color] ? 1 : 0, speed: params[:fast_send] ? 1 : 2}
end