Class: NeonEmail::Operations::SendgridMailer

Inherits:
NeonOperations::Operation
  • Object
show all
Defined in:
lib/neon_email/operations/sendgrid_mailer.rb

Instance Method Summary collapse

Constructor Details

#initialize(input:, schema_contract: NeonSchemas::Contracts::OutboundEmails::SendgridMailContract) ⇒ SendgridMailer

Returns a new instance of SendgridMailer.



7
8
9
10
11
12
13
# File 'lib/neon_email/operations/sendgrid_mailer.rb', line 7

def initialize(
  input:,
  schema_contract: NeonSchemas::Contracts::OutboundEmails::SendgridMailContract
)
  @input = input
  @schema_contract = schema_contract
end

Instance Method Details

#callObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/neon_email/operations/sendgrid_mailer.rb', line 15

def call
  validate_input.bind do |validated_input|
    mail = SendGrid::Mail.new
    mail.from = SendGrid::Email.new(email: "[email protected]", name: "Neon Law")
    mail.add_content(
      SendGrid::Content.new(
        type: "text/plain",
        value: validated_input[:content]
      )
    )
    mail.subject = validated_input[:subject]
    personalization = SendGrid::Personalization.new
    personalization.add_to(SendGrid::Email.new(email: validated_input[:to]))

    mail.add_personalization(personalization)

    request = sendgrid_client.mail._("send").post(request_body: mail.to_json)

    if request.status_code.to_i == 202
      Success(request)
    else
      Failure(request)
    end
  end
end