class SGMailer::Client

Attributes

api_key[R]

Public Class Methods

new(api_key:, api_url: nil) click to toggle source
# File lib/sg_mailer/client.rb, line 8
def initialize(api_key:, api_url: nil)
  @api_key = api_key
  @api_url ||= 'https://api.sendgrid.com/v3/mail/send'
  @api_uri = URI(@api_url)
end

Public Instance Methods

send(mail) click to toggle source
# File lib/sg_mailer/client.rb, line 14
def send(mail)
  response =
    Net::HTTP.start(*http_options) do |http|
      http.request(request(mail.to_json))
    end

  raise ResponseError, response if response.code.to_i > 299

  response
end

Private Instance Methods

http_options() click to toggle source
# File lib/sg_mailer/client.rb, line 27
def http_options
  [@api_uri.host, @api_uri.port, use_ssl: @api_uri.scheme == 'https']
end
request(body) click to toggle source
# File lib/sg_mailer/client.rb, line 31
def request(body)
  request = Net::HTTP::Post.new(@api_uri, request_headers)
  request.body = body
  request
end
request_headers() click to toggle source
# File lib/sg_mailer/client.rb, line 37
def request_headers
  { 'Authorization' => "Bearer #{@api_key}",
    'Content-Type' => 'application/json' }
end