class ActiveCampaign::Client

Attributes

config[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/active_campaign/client.rb, line 33
def initialize(options = {})
  @config = ActiveCampaign.config.dup.merge(options)
end

Public Instance Methods

==(other) click to toggle source
# File lib/active_campaign/client.rb, line 59
def ==(other)
  other.is_a?(ActiveCampaign::Client) &&
    hash == other.hash
end
Also aliased as: eql?
eql?(other)
Alias for: ==
get(api_method, options = {}) click to toggle source

Make a HTTP GET request

@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Query and header params for request @return [Hash]

# File lib/active_campaign/client.rb, line 42
def get(api_method, options = {})
  request :get, api_method, options
end
hash() click to toggle source
# File lib/active_campaign/client.rb, line 55
def hash
  [config.hash, Client].hash
end
post(api_method, options = {}) click to toggle source

Make a HTTP POST request

@param url [String] The path, relative to {#api_endpoint} @param options [Hash] Body and header params for request @return [Hash]

# File lib/active_campaign/client.rb, line 51
def post(api_method, options = {})
  request :post, api_method, options
end

Private Instance Methods

body(method, _api_method, options = {}) click to toggle source
# File lib/active_campaign/client.rb, line 106
def body(method, _api_method, options = {})
  return nil unless method == :post

  fields = options.delete(:fields) { {} }
  options[:field] = fields.inject({}) do |hash, (k, v)|
    hash.merge("%#{k}%,0" => v)
  end

  options.to_query
end
create_request(method, api_method, options = {}) click to toggle source
# File lib/active_campaign/client.rb, line 83
def create_request(method, api_method, options = {})
  req = HTTPI::Request.new(
    url: File.join(api_endpoint),
    headers: request_headers,
    query: query(method, api_method, options),
    body: body(method, api_method, options)
  )
  req.auth.ssl.verify_mode = :none
  req.auth.ssl.ssl_version = :TLSv1_2
  req
end
keys_values(response) click to toggle source
# File lib/active_campaign/client.rb, line 133
def keys_values(response)
  results = results(response)
  [results.keys, results.values]
end
normalize(response) click to toggle source
# File lib/active_campaign/client.rb, line 117
def normalize(response)
  return response if response.is_a? Array

  keys, values = keys_values(response)
  if keys.all? { |key| numeric?(key) }
    response['results'] = values
    keys.each { |key| response.delete(key) }
  end

  response
end
numeric?(string) click to toggle source
# File lib/active_campaign/client.rb, line 129
def numeric?(string)
  string.to_s.match(/\A[+-]?\d+\Z/).nil? ? false : true
end
query(method, api_method, options = {}) click to toggle source
# File lib/active_campaign/client.rb, line 95
def query(method, api_method, options = {})
  q = options.delete(:query) { {} }
  q.merge!(api_key: api_key,
           api_action: api_method.to_s,
           api_output: api_output)

  return q unless method == :get

  q.merge(options)
end
request(method, api_method, data) click to toggle source
# File lib/active_campaign/client.rb, line 68
def request(method, api_method, data)
  req = create_request method, api_method, data
  response = HTTPI.send(method, req)
  response = JSON.parse(response.body)

  normalize(response)
end
request_headers() click to toggle source
# File lib/active_campaign/client.rb, line 76
def request_headers
  {
    'User-Agent' => user_agent,
    'Content-Type' => 'application/x-www-form-urlencoded'
  }
end
results(response) click to toggle source
# File lib/active_campaign/client.rb, line 138
def results(response)
  response.reject { |k, _v| %w[result_code result_message result_output].include?(k) }
end