class SendPulse::Api

Attributes

client_id[R]
client_secret[R]
protocol[R]
token[R]

Public Class Methods

new(client_id, client_secret, protocol = 'https', token = '') click to toggle source
# File lib/sendpulse/api.rb, line 9
def initialize(client_id, client_secret, protocol = 'https', token = '')
  main_url = SendPulse::Host.main_url
  @url = "#{protocol}://#{main_url}"
  @client_id = client_id
  @client_secret = client_secret
  @protocol = protocol
  @refresh_token = 0
  @token = token

  if @token.nil? || @token.empty?
    raise 'Could not connect to API, check your CLIENT_ID and CLIENT_SECRET' unless refresh_token
  end
end

Protected Instance Methods

handle_result(data) click to toggle source
# File lib/sendpulse/api.rb, line 88
def handle_result(data)
  unless data[:http_code].to_i == 200
    data[:is_error] = true
  end
  data
end
refresh_token() click to toggle source
# File lib/sendpulse/api.rb, line 23
def refresh_token
  @refresh_token += 1

  data = {
    grant_type: 'client_credentials',
    client_id: @client_id,
    client_secret: @client_secret
  }

  request_data = send_request('oauth/access_token', 'POST', data, false)

  if !request_data.nil? && request_data[:data]['access_token']
    @token = request_data[:data]['access_token']
    @refresh_token = 0
  else
    return false
  end

  true
end
send_request(path, method = 'GET', data = {}, use_token = true) click to toggle source
# File lib/sendpulse/api.rb, line 45
def send_request(path, method = 'GET', data = {}, use_token = true)
  begin
    request_data = {}

    uri = URI.parse("#{@url}/#{path}")

    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true if @protocol == 'https'

    token = {}
    token.merge!('Authorization': "Bearer #{@token}") if use_token

    case method
      when 'POST'
        request = Net::HTTP::Post.new(uri.request_uri, token)
        request.set_form_data(data)
      when 'PUT'
        request = Net::HTTP::Put.new(uri.request_uri, token)
        request.set_form_data(data)
      when 'DELETE'
        request = Net::HTTP::Delete.new(uri.request_uri, token)
        request.set_form_data(data)
      else
        request = Net::HTTP::Get.new(uri.request_uri, token)
    end

    response = http.request(request)

    if response.code.to_i == 401 && @refresh_token == 0
      refresh_token
      return send_request(path, method, data, use_token)
    else
      request_data[:data] = JSON.parse(response.body)
      request_data[:http_code] = response.code
    end
  rescue Exception => e
    raise "Exception \n message: #{e.message} \n backtrace: #{e.backtrace}"
  end

  handle_result(request_data)
end
serialize(data) click to toggle source
# File lib/sendpulse/api.rb, line 96
def serialize(data)
  JSON.generate(data)
end