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
92
93
94
95
96
97
98
99
# 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,
        'Unknown_TrackingDomain' => UnknownTrackingDomainError,
        'Invalid_Template' => InvalidTemplateError,
        'Unknown_Webhook' => UnknownWebhookError,
        'Unknown_InboundDomain' => UnknownInboundDomainError,
        'Unknown_InboundRoute' => UnknownInboundRouteError,
        'Unknown_Export' => UnknownExportError,
        'IP_ProvisionLimit' => IPProvisionLimitError,
        'Unknown_Pool' => UnknownPoolError,
        'NoSendingHistory' => NoSendingHistoryError,
        'PoorReputation' => PoorReputationError,
        'Unknown_IP' => UnknownIPError,
        'Invalid_EmptyDefaultPool' => InvalidEmptyDefaultPoolError,
        'Invalid_DeleteDefaultPool' => InvalidDeleteDefaultPoolError,
        'Invalid_DeleteNonEmptyPool' => InvalidDeleteNonEmptyPoolError,
        'Invalid_CustomDNS' => InvalidCustomDNSError,
        'Invalid_CustomDNSPending' => InvalidCustomDNSPendingError,
        'Metadata_FieldLimit' => MetadataFieldLimitError,
        'Unknown_MetadataField' => UnknownMetadataFieldError
    }

    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



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

def exports()
    Exports.new self
end

#inboundObject



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

def inbound()
    Inbound.new self
end

#internalObject



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

def internal()
    Internal.new self
end

#ipsObject



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

def ips()
    Ips.new self
end

#messagesObject



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

def messages()
    Messages.new self
end

#metadataObject



143
144
145
# File 'lib/mandrill.rb', line 143

def ()
    Metadata.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



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

def rejects()
    Rejects.new self
end

#sendersObject



140
141
142
# File 'lib/mandrill.rb', line 140

def senders()
    Senders.new self
end

#subaccountsObject



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

def subaccounts()
    Subaccounts.new self
end

#tagsObject



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

def tags()
    Tags.new self
end

#templatesObject



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

def templates()
    Templates.new self
end

#urlsObject



134
135
136
# File 'lib/mandrill.rb', line 134

def urls()
    Urls.new self
end

#usersObject



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

def users()
    Users.new self
end

#webhooksObject



137
138
139
# File 'lib/mandrill.rb', line 137

def webhooks()
    Webhooks.new self
end

#whitelistsObject



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

def whitelists()
    Whitelists.new self
end