Class: ChainMail::Providers::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/chain_mail/providers/base.rb

Direct Known Subclasses

Brevo, Mailgun, OneSignal, Postmark, SES, SendGrid, SendPulse

Class Method Summary collapse

Class Method Details

.deliver(mail, creds) ⇒ Object

Raises:

  • (NotImplementedError)


6
7
8
# File 'lib/chain_mail/providers/base.rb', line 6

def self.deliver(mail, creds)
  raise NotImplementedError, "Subclasses must implement deliver(mail, creds)"
end

.post_json(url, headers, payload) ⇒ Object

Helper for HTTP requests, error parsing, etc.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/chain_mail/providers/base.rb', line 11

def self.post_json(url, headers, payload)
  uri = URI(url)
  req = Net::HTTP::Post.new(uri, headers)
  req.body = payload.to_json
  begin
    res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
    if res.is_a?(Net::HTTPSuccess)
      { success: true, response: res, error: nil }
    else
      { success: false, response: res, error: "API error: #{res.code} #{res.body}" }
    end
  rescue StandardError => e
    { success: false, response: nil, error: e.message }
  end
end