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

def cast_error(body)

    error_map = {
        'ValidationError' => ValidationError,
        'Invalid_Key' => InvalidKeyError,
        'Unknown_Template' => UnknownTemplateError,
        '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
    }

    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



86
87
88
# File 'lib/mandrill.rb', line 86

def exports()
    Exports.new self
end

#inboundObject



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

def inbound()
    Inbound.new self
end

#internalObject



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

def internal()
    Internal.new self
end

#messagesObject



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

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



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

def rejects()
    Rejects.new self
end

#sendersObject



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

def senders()
    Senders.new self
end

#tagsObject



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

def tags()
    Tags.new self
end

#templatesObject



83
84
85
# File 'lib/mandrill.rb', line 83

def templates()
    Templates.new self
end

#urlsObject



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

def urls()
    Urls.new self
end

#usersObject



89
90
91
# File 'lib/mandrill.rb', line 89

def users()
    Users.new self
end

#webhooksObject



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

def webhooks()
    Webhooks.new self
end

#whitelistsObject



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

def whitelists()
    Whitelists.new self
end