Class: Mandrill::API

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(apikey = nil, debug = false) ⇒ API

Returns a new instance of API.

Raises:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/mandrill.rb', line 13

def initialize(apikey=nil, debug=false)
    @host = 'https://mandrillapp.com'
    @path = '/api/1.0/'

    @session = Excon.new @host
    @debug = debug

    if not apikey
        if ENV['MANDRILL_APIKEY']
            apikey = ENV['MANDRILL_APIKEY']
        else
            apikey = read_configs
        end
    end

    raise Error, 'You must provide a Mandrill API key' if not apikey
    @apikey = apikey
end

Instance Attribute Details

#apikeyObject

Returns the value of attribute apikey.



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

def apikey
  @apikey
end

#debugObject

Returns the value of attribute debug.



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

def debug
  @debug
end

#hostObject

Returns the value of attribute host.



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

def host
  @host
end

#pathObject

Returns the value of attribute path.



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

def path
  @path
end

#sessionObject

Returns the value of attribute session.



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

def session
  @session
end

Instance Method Details

#call(url, params = {}) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/mandrill.rb', line 32

def call(url, params={})
    params[:key] = @apikey
    params = JSON.generate(params)
    r = @session.post(:path => "#{@path}#{url}.json", :headers => {'Content-Type' => 'application/json'}, :body => params)
    
    cast_error(r.body) if r.status != 200
    return JSON.parse(r.body)
end

#cast_error(body) ⇒ Object



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
# File 'lib/mandrill.rb', line 52

def cast_error(body)

    error_map = {
        'ValidationError' => ValidationError,
        'Invalid_Key' => InvalidKeyError,
        'PaymentRequired' => PaymentRequiredError,
        'Unknown_Subaccount' => UnknownSubaccountError,
        'Unknown_Template' => UnknownTemplateError,
        'ServiceUnavailable' => ServiceUnavailableError,
        'Unknown_Message' => UnknownMessageError,
        'Invalid_Tag_Name' => InvalidTagNameError,
        'Invalid_Reject' => InvalidRejectError,
        'Unknown_Sender' => UnknownSenderError,
        'Unknown_Url' => UnknownUrlError,
        'Invalid_Template' => InvalidTemplateError,
        'Unknown_Webhook' => UnknownWebhookError,
        'Unknown_InboundDomain' => UnknownInboundDomainError,
        'Unknown_Export' => UnknownExportError,
        'IP_ProvisionLimit' => IPProvisionLimitError,
        'Unknown_Pool' => UnknownPoolError,
        'Unknown_IP' => UnknownIPError,
        'Invalid_EmptyDefaultPool' => InvalidEmptyDefaultPoolError,
        'Invalid_DeleteDefaultPool' => InvalidDeleteDefaultPoolError,
        'Invalid_DeleteNonEmptyPool' => InvalidDeleteNonEmptyPoolError
    }

    begin
        error_info = JSON.parse(body)
        if error_info['status'] != 'error' or not error_info['name']
            raise Error, "We received an unexpected error: #{body}"
        end
        if error_map[error_info['name']]
            raise error_map[error_info['name']], error_info['message']
        else
            raise Error, error_info['message']
        end
    rescue JSON::ParserError
        raise Error, "We received an unexpected error: #{body}"
    end
end

#exportsObject



96
97
98
# File 'lib/mandrill.rb', line 96

def exports()
    Exports.new self
end

#inboundObject



105
106
107
# File 'lib/mandrill.rb', line 105

def inbound()
    Inbound.new self
end

#internalObject



120
121
122
# File 'lib/mandrill.rb', line 120

def internal()
    Internal.new self
end

#ipsObject



117
118
119
# File 'lib/mandrill.rb', line 117

def ips()
    Ips.new self
end

#messagesObject



111
112
113
# File 'lib/mandrill.rb', line 111

def messages()
    Messages.new self
end

#read_configsObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/mandrill.rb', line 41

def read_configs()
    [File.expand_path('~/.mandrill.key'), '/etc/mandrill.key'].delete_if{ |p| not File.exist? p}.each do |path|
        f = File.new path
        apikey = f.read.strip
        f.close
        return apikey if apikey != ''
    end

    return nil
end

#rejectsObject



102
103
104
# File 'lib/mandrill.rb', line 102

def rejects()
    Rejects.new self
end

#sendersObject



132
133
134
# File 'lib/mandrill.rb', line 132

def senders()
    Senders.new self
end

#subaccountsObject



123
124
125
# File 'lib/mandrill.rb', line 123

def subaccounts()
    Subaccounts.new self
end

#tagsObject



108
109
110
# File 'lib/mandrill.rb', line 108

def tags()
    Tags.new self
end

#templatesObject



93
94
95
# File 'lib/mandrill.rb', line 93

def templates()
    Templates.new self
end

#urlsObject



126
127
128
# File 'lib/mandrill.rb', line 126

def urls()
    Urls.new self
end

#usersObject



99
100
101
# File 'lib/mandrill.rb', line 99

def users()
    Users.new self
end

#webhooksObject



129
130
131
# File 'lib/mandrill.rb', line 129

def webhooks()
    Webhooks.new self
end

#whitelistsObject



114
115
116
# File 'lib/mandrill.rb', line 114

def whitelists()
    Whitelists.new self
end