Class: EmailClient

Inherits:
Object
  • Object
show all
Defined in:
lib/email_api/email/client/email_client.rb

Overview

General client that sends email utilizing multiple service providers

Class Method Summary collapse

Class Method Details

.bad_req_codeObject

Accessor for the Bad Request Code



15
16
17
# File 'lib/email_api/email/client/email_client.rb', line 15

def self.bad_req_code
  400
end

.internal_err_codeObject

Accessor for the Internal Server Error Code



20
21
22
# File 'lib/email_api/email/client/email_client.rb', line 20

def self.internal_err_code
  500
end

.ok_codeObject

Accessor for the OK Code



10
11
12
# File 'lib/email_api/email/client/email_client.rb', line 10

def self.ok_code
  200
end

.send_email(email_object) ⇒ ClientResponse

Sends email utilizing multiple service providers

Parameters:

Returns:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/email_api/email/client/email_client.rb', line 28

def self.send_email(email_object)
  return ClientResponse.new if email_object.nil? || !email_object.is_a?(EmailObject)

  puts 'Attempting Email Sending via primary client: SENDGRID'
  response = use_client_client SendgridClient, email_object

  if response != ok_code
    puts 'Primary client failed. Attempting secondary client: MAILGUN'
    response = use_client_client MailgunClient, email_object
  end

  client_response = ClientResponse.new email_object
  if response == ok_code
    client_response.set_ok
  elsif response == bad_req_code
    client_response.set_bad_req
  elsif response == internal_err_code
    client_response.set_internal_err
  end

  client_response
end

.use_client_client(email_client, email_object) ⇒ Integer

Sends email using a single email client

Parameters:

Returns:

  • (Integer)

    response_code



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/email_api/email/client/email_client.rb', line 56

def self.use_client_client(email_client, email_object)
  begin
    response = email_client.send_email(email_object)
    puts 'Successful attempt' if response == ok_code
    puts 'Bad Request' if response == bad_req_code
    puts 'Internal Server Error' if response == internal_err_code
  rescue StandardError => e
    # Log error and fail send
    puts "Error: #{e.message}"
    response = internal_err_code
  end
  response
end