class MailchimpTransactional::ApiClient

Public Class Methods

default() click to toggle source
# File lib/MailchimpTransactional/api_client.rb, line 26
def self.default
  @@default ||= ApiClient.new
end
new(api_key = '') click to toggle source
# File lib/MailchimpTransactional/api_client.rb, line 18
def initialize(api_key = '')
  @host = "https://mandrillapp.com/api/1.0"
  @format_list = ['json', 'xml', 'php', 'yaml']
  @default_output_format = 'json'
  @accepts = ['application/json', 'application/xml', 'application/x-php', 'application/x-yaml; charset=utf-8']
  set_api_key(api_key)
end

Public Instance Methods

call_api(http_method, path, body = {}) click to toggle source
# File lib/MailchimpTransactional/api_client.rb, line 40
def call_api(http_method, path, body = {})
  use_default_output_format = true
  active_output_format = @default_output_format
  url = @host + path

  # format body
  if body[:outputFormat]
    format = body[:outputFormat].downcase
    if @format_list.include? format
      url += ".#{format}"
      body.delete(:outputFormat)
      use_default_output_format = false
      active_output_format = format
    end
  end

  # apply output format
  if use_default_output_format && @format_list.include?(@default_output_format)
    url += '.%s' % @default_output_format
    active_output_format = @default_output_format
  end

  # apply api key
  body[:key] = @api_key

  # send request
  conn = Excon.new(url, :headers => {'Content-Type' => 'application/json'}, :read_timeout => 300, :write_timeout => 300)
  res = conn.post(:body => body.to_json)

  # handle response
  data = nil

  if res.status == 200
    if active_output_format == 'json'
      data = JSON.parse(res.body)
    else
      data = res.body
    end
  end

  if (!data)
    fail ApiError.new(:status => res.status, :response_body => res.body)
  end

  return data
end
set_api_key(api_key = '') click to toggle source
# File lib/MailchimpTransactional/api_client.rb, line 30
def set_api_key(api_key = '')
  @api_key = api_key
end
set_default_output_format(output_format) click to toggle source
# File lib/MailchimpTransactional/api_client.rb, line 34
def set_default_output_format(output_format)
  if @format_list.include? output_format
    @default_output_format = output_format
  end
end