class ActiveCampaign

Attributes

api_endpoint[R]
api_key[R]

Public Class Methods

new(args) click to toggle source
# File lib/active-campaign-rails.rb, line 12
def initialize(args)

  # Parse args into instance_variable
  args.each do |k,v|
    instance_variable_set("@#{k}", v) unless v.nil?
  end

  # Set default api_output to json if not set
  @api_output = 'json' if @api_output == nil

end

Public Instance Methods

method_missing(api_action, *args, &block) click to toggle source
# File lib/active-campaign-rails.rb, line 25
def method_missing(api_action, *args, &block)

  # Generate api_url
  api_url = generate_api_url(api_action)

  # Check method for api_action given
  case action_calls[api_action][:method]
  when 'get'

    # Generate API parameter from given argument
    api_params = (args.any?) ? args.first.map{|k,v| "#{k}=#{v}"}.join('&') : nil

    # Join API url and API parameters
    api_url = api_params ? "#{api_url}&#{api_params}" : api_url

    # Make a call to API server with GET method
    response = RestClient.get(api_url)

    # Return response from API server
    # Default to JSON
    return response.body

  when 'post'

    # API parameters for POST method
    api_params = args.first

    # For event tracking the visit param must have a json value
    if visit = api_params[:visit]
      api_params[:visit] = visit.to_json if visit.is_a?(Hash)
    end

    # Make a call to API server with POST method
    response = RestClient.post(api_url, api_params)

    # Return response from API server
    # Default to JSON
    return response.body

  when 'delete'

    # API parameters for DELETE method
    api_params = args.first.merge(api_key: @api_key, api_output: @api_output)

    api_url = "#{action_calls[api_action][:endpoint] || @api_endpoint}#{action_calls[api_action][:path] || '/admin/api.php'}"

    # Make a call to API server with DELETE method
    response = RestClient::Request.execute(method: :delete, url: api_url, headers: { params: api_params })

    # Return response from API server
    # Default to JSON
    return response.body

  end

end

Private Instance Methods

generate_api_url(api_action) click to toggle source
# File lib/active-campaign-rails.rb, line 83
def generate_api_url api_action
  host = action_calls[api_action][:endpoint] || @api_endpoint
  path = action_calls[api_action][:path]     || '/admin/api.php'

  "#{host}#{path}?api_key=#{@api_key}&api_action=#{api_action.to_s}&api_output=#{@api_output}"
end