Class: MonkeyWrench::Base

Inherits:
OpenStruct
  • Object
show all
Includes:
HTTParty
Defined in:
lib/monkeywrench/base.rb

Direct Known Subclasses

Config, List

Constant Summary collapse

@@apikey =
nil
@@datacenter =
nil
@@dryrun =
false

Class Method Summary collapse

Class Method Details

.apikeyObject



64
65
66
# File 'lib/monkeywrench/base.rb', line 64

def apikey
  @@apikey
end

.base_uriObject



15
16
17
# File 'lib/monkeywrench/base.rb', line 15

def base_uri
  "http://#{datacenter}.api.mailchimp.com/1.2/"
end

.datacenterObject



68
69
70
# File 'lib/monkeywrench/base.rb', line 68

def datacenter
  @@datacenter
end

.default_query_paramsObject



11
12
13
# File 'lib/monkeywrench/base.rb', line 11

def default_query_params
  { :output => "json", :apikey=> @@apikey}
end

.default_retry_limitObject



19
20
21
# File 'lib/monkeywrench/base.rb', line 19

def default_retry_limit
  3
end

.get(params, http_options = {}) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/monkeywrench/base.rb', line 23

def get(params, http_options = {})
  if @@dryrun
    puts "GET #{base_uri} #{params.merge(default_query_params).inspect}"
    return {}
  else
    robustly(http_options) do
      response = super(base_uri, http_options.merge(:query => params.merge(default_query_params)))
      handle_errors(response.parsed_response)
    end
  end
end

.handle_errors(objects) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/monkeywrench/base.rb', line 49

def handle_errors(objects)
  return objects unless objects.respond_to?(:has_key?)

  if objects.has_key?("error")
    objects.replace({ "error" => MonkeyWrench::Error.new(objects['error'], objects['code']) })
  elsif objects.has_key?("errors")
    objects["errors"] = objects["errors"].map do |err|
      message = err.delete('message')
      code = err.delete('code')
      MonkeyWrench::Error.new(message, code, err)
    end
  end
  objects
end

.post(params, http_options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/monkeywrench/base.rb', line 35

def post(params, http_options = {})
  if @@dryrun
    puts "POST #{base_uri} #{params.merge(default_query_params).inspect}"
    return {}
  else
    robustly(http_options) do
      post_params = params.dup
      get_params = default_query_params.merge(:method => post_params.delete(:method))
      response = super(base_uri, http_options.merge(:body => post_params, :query => get_params))
      handle_errors(response.parsed_response)
    end
  end
end