Sha256: ce2ee82615e5102ca898efd58e9b747456a8d8ce3fa5714c51f84c3c85867d54

Contents?: true

Size: 1.11 KB

Versions: 7

Compression:

Stored size: 1.11 KB

Contents

module SendGridMailer
  class Api
    include Logger

    def initialize(api_key)
      @api_key = api_key || raise(SendGridMailer::InvalidApiKey)
    end

    def send_mail(sg_definition)
      response = sg_api.client.mail._('send').post(request_body: sg_definition.to_json)
      handle_response(response, :mail)
    end

    def get_template(sg_definition)
      response = sg_api.client.templates._(sg_definition.mail.template_id).get()
      handle_response(response, :template)
    end

    private

    def handle_response(response, api_call_type)
      status_code = response.status_code.to_i
      if status_code.between?(400, 600)
        errors = response_errors(response)
        log_api_error_response(status_code, errors, api_call_type)
        raise SendGridMailer::ApiError.new(status_code, errors)
      end

      log_api_success_response(status_code, api_call_type)
      response
    end

    def response_errors(response)
      body = JSON.parse(response.body)
      body["errors"] || [{ "message" => body["error"] }]
    end

    def sg_api
      @sg_api ||= SendGrid::API.new(api_key: @api_key)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
send_grid_mailer-2.4.0 lib/send_grid_mailer/api.rb
send_grid_mailer-2.3.0 lib/send_grid_mailer/api.rb
send_grid_mailer-2.2.0 lib/send_grid_mailer/api.rb
send_grid_mailer-2.0.1 lib/send_grid_mailer/api.rb
send_grid_mailer-2.0.0 lib/send_grid_mailer/api.rb
send_grid_mailer-1.2.1 lib/send_grid_mailer/api.rb
send_grid_mailer-1.2.0 lib/send_grid_mailer/api.rb