Class: MailchimpTransactional::ApiClient

Inherits:
Object
  • Object
show all
Defined in:
lib/MailchimpTransactional/api_client.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key = '') ⇒ ApiClient

Returns a new instance of ApiClient.



18
19
20
21
22
23
24
25
26
27
# 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']
  @read_timeout = 300
  @write_timeout = 300
  @connect_timeout = 300
  set_api_key(api_key)
end

Class Method Details

.defaultObject



29
30
31
# File 'lib/MailchimpTransactional/api_client.rb', line 29

def self.default
  @@default ||= ApiClient.new
end

Instance Method Details

#call_api(http_method, path, body = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/MailchimpTransactional/api_client.rb', line 50

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 => @read_timeout, :write_timeout => @write_timeout, :connect_timeout => @connect_timeout)
  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 = '') ⇒ Object



33
34
35
# File 'lib/MailchimpTransactional/api_client.rb', line 33

def set_api_key(api_key = '')
  @api_key = api_key
end

#set_default_output_format(output_format) ⇒ Object



37
38
39
40
41
# File 'lib/MailchimpTransactional/api_client.rb', line 37

def set_default_output_format(output_format)
  if @format_list.include? output_format
    @default_output_format = output_format
  end
end

#set_timeout(default_timeout = nil, read: nil, write: nil, connect: nil) ⇒ Object



43
44
45
46
47
48
# File 'lib/MailchimpTransactional/api_client.rb', line 43

def set_timeout(default_timeout=nil, read: nil, write: nil, connect: nil)
  default_timeout = default_timeout || 300
  @read_timeout = read || default_timeout
  @write_timeout = write || default_timeout
  @connect_timeout = connect || default_timeout
end