mailtrap 1.1.1 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/Appraisals +9 -0
- data/CHANGELOG.md +17 -6
- data/Gemfile +1 -0
- data/Gemfile.lock +7 -1
- data/LICENSE.txt +1 -1
- data/README.md +24 -2
- data/lib/mailtrap/action_mailer/delivery_method.rb +1 -1
- data/lib/mailtrap/{sending/mail.rb → mail/base.rb} +10 -10
- data/lib/mailtrap/mail/from_template.rb +42 -0
- data/lib/mailtrap/mail.rb +88 -0
- data/lib/mailtrap/sending/client.rb +2 -1
- data/lib/mailtrap/sending.rb +0 -2
- data/lib/mailtrap/version.rb +1 -1
- data/lib/mailtrap.rb +1 -0
- data/mailtrap.gemspec +1 -1
- metadata +7 -5
- data/lib/mailtrap/sending/convert.rb +0 -83
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7dee4a202b02e16f840e8fc74526903e10418a0073c2392faf964dcdbcdfcde4
         | 
| 4 | 
            +
              data.tar.gz: d35cf9fa125e8ec587f96626be7830f4398002173b7dc07c4560dddbbb0ddb3e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5b4c0ba57ab2cab64cec15704bd34c04be134360a2600d2fc530bcae47ab8caf2e8dd79ce7ba5fd342e46dad599153d473006613c953da868182dcff2bb1e2be
         | 
| 7 | 
            +
              data.tar.gz: 45d64a548b0cd54e0f98394a8c6739d1bc5dcd90716105100f7bae92f7aa5913c9ff66fde412d8965d3818bc7d6594c1c218d96cfcde59eabc6bd92c1901e2c3
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -3,6 +3,8 @@ require: rubocop-rspec | |
| 3 3 | 
             
            AllCops:
         | 
| 4 4 | 
             
              TargetRubyVersion: 2.7
         | 
| 5 5 | 
             
              NewCops: enable
         | 
| 6 | 
            +
              Exclude:
         | 
| 7 | 
            +
                - 'gemfiles/**/*'
         | 
| 6 8 |  | 
| 7 9 | 
             
            Layout/LineLength:
         | 
| 8 10 | 
             
              Max: 120
         | 
| @@ -10,6 +12,9 @@ Layout/LineLength: | |
| 10 12 | 
             
            Naming/MethodParameterName:
         | 
| 11 13 | 
             
              MinNameLength: 2
         | 
| 12 14 |  | 
| 15 | 
            +
            Naming/VariableNumber:
         | 
| 16 | 
            +
              EnforcedStyle: snake_case
         | 
| 17 | 
            +
             | 
| 13 18 | 
             
            RSpec/MultipleExpectations:
         | 
| 14 19 | 
             
              Max: 4
         | 
| 15 20 |  | 
    
        data/Appraisals
    ADDED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,16 +1,27 @@ | |
| 1 | 
            -
            ## [1. | 
| 1 | 
            +
            ## [1.2.1] - 2023-04-12
         | 
| 2 2 |  | 
| 3 | 
            -
            -  | 
| 3 | 
            +
            - Set custom user agent
         | 
| 4 4 |  | 
| 5 | 
            -
            ## [1.0 | 
| 5 | 
            +
            ## [1.2.0] - 2023-01-27
         | 
| 6 6 |  | 
| 7 | 
            -
            -  | 
| 7 | 
            +
            - Breaking changes:
         | 
| 8 | 
            +
              - move `Mailtrap::Sending::Mail` class to `Mailtrap::Mail::Base`
         | 
| 9 | 
            +
              - move `Mailtrap::Sending::Convert` to `Mailtrap::Mail`
         | 
| 10 | 
            +
            - Add mail gem 2.8 support
         | 
| 11 | 
            +
            - Add email template support
         | 
| 8 12 |  | 
| 13 | 
            +
            ## [1.1.1] - 2022-10-14
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            - Fix custom port and host usage
         | 
| 9 16 |  | 
| 10 17 | 
             
            ## [1.1.0] - 2022-07-22
         | 
| 11 18 |  | 
| 12 19 | 
             
            - Add ActionMailer support
         | 
| 13 20 |  | 
| 14 | 
            -
            ## [1. | 
| 21 | 
            +
            ## [1.0.1] - 2022-06-20
         | 
| 15 22 |  | 
| 16 | 
            -
            -  | 
| 23 | 
            +
            - Update packed files list
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ## [1.0.0] - 2022-06-14
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            - Initial release
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,13 +1,17 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                mailtrap (1. | 
| 4 | 
            +
                mailtrap (1.2.1)
         | 
| 5 5 |  | 
| 6 6 | 
             
            GEM
         | 
| 7 7 | 
             
              remote: https://rubygems.org/
         | 
| 8 8 | 
             
              specs:
         | 
| 9 9 | 
             
                addressable (2.8.0)
         | 
| 10 10 | 
             
                  public_suffix (>= 2.0.2, < 5.0)
         | 
| 11 | 
            +
                appraisal (2.4.1)
         | 
| 12 | 
            +
                  bundler
         | 
| 13 | 
            +
                  rake
         | 
| 14 | 
            +
                  thor (>= 0.14.0)
         | 
| 11 15 | 
             
                ast (2.4.2)
         | 
| 12 16 | 
             
                crack (0.4.5)
         | 
| 13 17 | 
             
                  rexml
         | 
| @@ -55,6 +59,7 @@ GEM | |
| 55 59 | 
             
                rubocop-rspec (2.11.1)
         | 
| 56 60 | 
             
                  rubocop (~> 1.19)
         | 
| 57 61 | 
             
                ruby-progressbar (1.11.0)
         | 
| 62 | 
            +
                thor (1.2.1)
         | 
| 58 63 | 
             
                unicode-display_width (2.1.0)
         | 
| 59 64 | 
             
                vcr (6.1.0)
         | 
| 60 65 | 
             
                webmock (3.14.0)
         | 
| @@ -66,6 +71,7 @@ PLATFORMS | |
| 66 71 | 
             
              ruby
         | 
| 67 72 |  | 
| 68 73 | 
             
            DEPENDENCIES
         | 
| 74 | 
            +
              appraisal
         | 
| 69 75 | 
             
              mail
         | 
| 70 76 | 
             
              mailtrap!
         | 
| 71 77 | 
             
              net-smtp
         | 
    
        data/LICENSE.txt
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            The MIT License (MIT)
         | 
| 2 2 |  | 
| 3 | 
            -
            Copyright (c) 2022 Railsware Products Studio | 
| 3 | 
            +
            Copyright (c) 2022 Railsware Products Studio LLC
         | 
| 4 4 |  | 
| 5 5 | 
             
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 6 6 | 
             
            of this software and associated documentation files (the "Software"), to deal
         | 
    
        data/README.md
    CHANGED
    
    | @@ -30,7 +30,7 @@ Or install it yourself as: | |
| 30 30 | 
             
            require 'mailtrap'
         | 
| 31 31 |  | 
| 32 32 | 
             
            # create mail object
         | 
| 33 | 
            -
            mail = Mailtrap:: | 
| 33 | 
            +
            mail = Mailtrap::Mail::Base.new(
         | 
| 34 34 | 
             
              from: { email: 'mailtrap@example.com', name: 'Mailtrap Test' },
         | 
| 35 35 | 
             
              to: [
         | 
| 36 36 | 
             
                { email: 'your@email.com' }
         | 
| @@ -50,7 +50,7 @@ client.send(mail) | |
| 50 50 | 
             
            require 'mailtrap'
         | 
| 51 51 | 
             
            require 'base64'
         | 
| 52 52 |  | 
| 53 | 
            -
            mail = Mailtrap:: | 
| 53 | 
            +
            mail = Mailtrap::Mail::Base.new(
         | 
| 54 54 | 
             
              from: { email: 'mailtrap@example.com', name: 'Mailtrap Test' },
         | 
| 55 55 | 
             
              to: [
         | 
| 56 56 | 
             
                { email: 'your@email.com', name: 'Your name' }
         | 
| @@ -87,6 +87,28 @@ client = Mailtrap::Sending::Client.new(api_key: 'your-api-key') | |
| 87 87 | 
             
            client.send(mail)
         | 
| 88 88 | 
             
            ```
         | 
| 89 89 |  | 
| 90 | 
            +
            ### Using email template
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            ```ruby
         | 
| 93 | 
            +
            require 'mailtrap'
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            # create mail object
         | 
| 96 | 
            +
            mail = Mailtrap::Mail::FromTemplate.new(
         | 
| 97 | 
            +
              from: { email: 'mailtrap@example.com', name: 'Mailtrap Test' },
         | 
| 98 | 
            +
              to: [
         | 
| 99 | 
            +
                { email: 'your@email.com' }
         | 
| 100 | 
            +
              ],
         | 
| 101 | 
            +
              template_uuid: '2f45b0aa-bbed-432f-95e4-e145e1965ba2',
         | 
| 102 | 
            +
              template_variables: {
         | 
| 103 | 
            +
                'user_name' => 'John Doe'
         | 
| 104 | 
            +
              }
         | 
| 105 | 
            +
            )
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            # create client and send
         | 
| 108 | 
            +
            client = Mailtrap::Sending::Client.new(api_key: 'your-api-key')
         | 
| 109 | 
            +
            client.send(mail)
         | 
| 110 | 
            +
            ```
         | 
| 111 | 
            +
             | 
| 90 112 | 
             
            ### ActionMailer
         | 
| 91 113 |  | 
| 92 114 | 
             
            This gem also adds ActionMailer delivery method. To configure it, add following to your ActionMailer configuration (in Rails projects located in `config/$ENVIRONMENT.rb`):
         | 
| @@ -3,9 +3,9 @@ | |
| 3 3 | 
             
            require 'json'
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Mailtrap
         | 
| 6 | 
            -
              module  | 
| 7 | 
            -
                class  | 
| 8 | 
            -
                  attr_accessor :from, :to, :cc, :bcc, : | 
| 6 | 
            +
              module Mail
         | 
| 7 | 
            +
                class Base
         | 
| 8 | 
            +
                  attr_accessor :from, :to, :cc, :bcc, :headers, :custom_variables, :subject, :text, :html, :category
         | 
| 9 9 | 
             
                  attr_reader :attachments
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def initialize( # rubocop:disable Metrics/ParameterLists, Metrics/MethodLength
         | 
| @@ -18,8 +18,8 @@ module Mailtrap | |
| 18 18 | 
             
                    html: nil,
         | 
| 19 19 | 
             
                    attachments: [],
         | 
| 20 20 | 
             
                    headers: {},
         | 
| 21 | 
            -
                     | 
| 22 | 
            -
                     | 
| 21 | 
            +
                    custom_variables: {},
         | 
| 22 | 
            +
                    category: nil
         | 
| 23 23 | 
             
                  )
         | 
| 24 24 | 
             
                    @from = from
         | 
| 25 25 | 
             
                    @to = to
         | 
| @@ -30,24 +30,24 @@ module Mailtrap | |
| 30 30 | 
             
                    @html = html
         | 
| 31 31 | 
             
                    self.attachments = attachments
         | 
| 32 32 | 
             
                    @headers = headers
         | 
| 33 | 
            -
                    @category = category
         | 
| 34 33 | 
             
                    @custom_variables = custom_variables
         | 
| 34 | 
            +
                    @category = category
         | 
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 37 | 
             
                  def as_json # rubocop:disable Metrics/MethodLength
         | 
| 38 38 | 
             
                    {
         | 
| 39 | 
            -
                      'to' => to,
         | 
| 40 39 | 
             
                      'from' => from,
         | 
| 40 | 
            +
                      'to' => to,
         | 
| 41 41 | 
             
                      'cc' => cc,
         | 
| 42 42 | 
             
                      'bcc' => bcc,
         | 
| 43 43 | 
             
                      'subject' => subject,
         | 
| 44 | 
            -
                      'html' => html,
         | 
| 45 44 | 
             
                      'text' => text,
         | 
| 45 | 
            +
                      'html' => html,
         | 
| 46 46 | 
             
                      'attachments' => attachments.map(&:as_json),
         | 
| 47 47 | 
             
                      # TODO: update headers and custom_variables with as_json method
         | 
| 48 48 | 
             
                      'headers' => headers,
         | 
| 49 | 
            -
                      ' | 
| 50 | 
            -
                      ' | 
| 49 | 
            +
                      'custom_variables' => custom_variables,
         | 
| 50 | 
            +
                      'category' => category
         | 
| 51 51 | 
             
                    }.compact
         | 
| 52 52 | 
             
                  end
         | 
| 53 53 |  | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Mailtrap
         | 
| 4 | 
            +
              module Mail
         | 
| 5 | 
            +
                class FromTemplate < Base
         | 
| 6 | 
            +
                  attr_accessor :template_uuid, :template_variables
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize( # rubocop:disable Metrics/ParameterLists, Metrics/MethodLength
         | 
| 9 | 
            +
                    from: nil,
         | 
| 10 | 
            +
                    to: [],
         | 
| 11 | 
            +
                    cc: [],
         | 
| 12 | 
            +
                    bcc: [],
         | 
| 13 | 
            +
                    attachments: [],
         | 
| 14 | 
            +
                    headers: {},
         | 
| 15 | 
            +
                    custom_variables: {},
         | 
| 16 | 
            +
                    template_uuid: nil,
         | 
| 17 | 
            +
                    template_variables: {}
         | 
| 18 | 
            +
                  )
         | 
| 19 | 
            +
                    super(
         | 
| 20 | 
            +
                      from: from,
         | 
| 21 | 
            +
                      to: to,
         | 
| 22 | 
            +
                      cc: cc,
         | 
| 23 | 
            +
                      bcc: bcc,
         | 
| 24 | 
            +
                      attachments: attachments,
         | 
| 25 | 
            +
                      headers: headers,
         | 
| 26 | 
            +
                      custom_variables: custom_variables
         | 
| 27 | 
            +
                    )
         | 
| 28 | 
            +
                    @template_uuid = template_uuid
         | 
| 29 | 
            +
                    @template_variables = template_variables
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def as_json
         | 
| 33 | 
            +
                    super.merge(
         | 
| 34 | 
            +
                      {
         | 
| 35 | 
            +
                        'template_uuid' => template_uuid,
         | 
| 36 | 
            +
                        'template_variables' => template_variables
         | 
| 37 | 
            +
                      }
         | 
| 38 | 
            +
                    ).compact
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -0,0 +1,88 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'base64'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require_relative 'mail/base'
         | 
| 6 | 
            +
            require_relative 'mail/from_template'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Mailtrap
         | 
| 9 | 
            +
              module Mail
         | 
| 10 | 
            +
                class << self
         | 
| 11 | 
            +
                  def from_message(message) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
         | 
| 12 | 
            +
                    Mailtrap::Mail::Base.new(
         | 
| 13 | 
            +
                      from: prepare_address(address_list(message['from'])&.addresses&.first),
         | 
| 14 | 
            +
                      to: prepare_addresses(address_list(message['to'])&.addresses),
         | 
| 15 | 
            +
                      cc: prepare_addresses(address_list(message['cc'])&.addresses),
         | 
| 16 | 
            +
                      bcc: prepare_addresses(address_list(message['bcc'])&.addresses),
         | 
| 17 | 
            +
                      subject: message.subject,
         | 
| 18 | 
            +
                      text: prepare_text_part(message),
         | 
| 19 | 
            +
                      html: prepare_html_part(message),
         | 
| 20 | 
            +
                      headers: prepare_headers(message),
         | 
| 21 | 
            +
                      attachments: prepare_attachments(message.attachments),
         | 
| 22 | 
            +
                      category: message['category']&.unparsed_value,
         | 
| 23 | 
            +
                      custom_variables: message['custom_variables']&.unparsed_value
         | 
| 24 | 
            +
                    )
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  private
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  PROCESSED_HEADERS = %w[
         | 
| 30 | 
            +
                    from
         | 
| 31 | 
            +
                    to
         | 
| 32 | 
            +
                    cc
         | 
| 33 | 
            +
                    bcc
         | 
| 34 | 
            +
                    subject
         | 
| 35 | 
            +
                    category
         | 
| 36 | 
            +
                    customvariables
         | 
| 37 | 
            +
                    contenttype
         | 
| 38 | 
            +
                  ].freeze
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def address_list(header)
         | 
| 41 | 
            +
                    header.respond_to?(:element) ? header.element : header&.address_list
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  def prepare_addresses(addresses)
         | 
| 45 | 
            +
                    Array(addresses).map { |address| prepare_address(address) }
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def prepare_headers(message)
         | 
| 49 | 
            +
                    message
         | 
| 50 | 
            +
                      .header_fields
         | 
| 51 | 
            +
                      .reject { |header| PROCESSED_HEADERS.include?(header.name.downcase.delete('-')) }
         | 
| 52 | 
            +
                      .to_h { |header| [header.name, header.value] }
         | 
| 53 | 
            +
                      .compact
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def prepare_address(address)
         | 
| 57 | 
            +
                    {
         | 
| 58 | 
            +
                      email: address.address,
         | 
| 59 | 
            +
                      name: address.display_name
         | 
| 60 | 
            +
                    }.compact
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  def prepare_attachments(attachments_list = [])
         | 
| 64 | 
            +
                    attachments_list.map do |attachment|
         | 
| 65 | 
            +
                      {
         | 
| 66 | 
            +
                        content: Base64.strict_encode64(attachment.body.decoded),
         | 
| 67 | 
            +
                        type: attachment.mime_type,
         | 
| 68 | 
            +
                        filename: attachment.filename,
         | 
| 69 | 
            +
                        disposition: attachment.header[:content_disposition]&.disposition_type,
         | 
| 70 | 
            +
                        content_id: attachment&.cid
         | 
| 71 | 
            +
                      }.compact
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  def prepare_html_part(message)
         | 
| 76 | 
            +
                    return message.body.decoded if message.mime_type == 'text/html'
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                    message.html_part&.decoded
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def prepare_text_part(message)
         | 
| 82 | 
            +
                    return message.body.decoded if message.mime_type == 'text/plain' || message.mime_type.nil?
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                    message.text_part&.decoded
         | 
| 85 | 
            +
                  end
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
            end
         | 
| @@ -19,7 +19,7 @@ module Mailtrap | |
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                  def send(mail)
         | 
| 22 | 
            -
                    raise ArgumentError, 'should be Mailtrap:: | 
| 22 | 
            +
                    raise ArgumentError, 'should be Mailtrap::Mail::Base object' unless mail.is_a? Mail::Base
         | 
| 23 23 |  | 
| 24 24 | 
             
                    request = post_request('/api/send', mail.to_json)
         | 
| 25 25 | 
             
                    response = http_client.request(request)
         | 
| @@ -38,6 +38,7 @@ module Mailtrap | |
| 38 38 | 
             
                    request.body = body
         | 
| 39 39 | 
             
                    request['Authorization'] = "Bearer #{api_key}"
         | 
| 40 40 | 
             
                    request['Content-Type'] = 'application/json'
         | 
| 41 | 
            +
                    request['User-Agent'] = 'mailtrap-ruby (https://github.com/railsware/mailtrap-ruby)'
         | 
| 41 42 |  | 
| 42 43 | 
             
                    request
         | 
| 43 44 | 
             
                  end
         | 
    
        data/lib/mailtrap/sending.rb
    CHANGED
    
    
    
        data/lib/mailtrap/version.rb
    CHANGED
    
    
    
        data/lib/mailtrap.rb
    CHANGED
    
    
    
        data/mailtrap.gemspec
    CHANGED
    
    | @@ -5,7 +5,7 @@ require_relative 'lib/mailtrap/version' | |
| 5 5 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 6 | 
             
              spec.name = 'mailtrap'
         | 
| 7 7 | 
             
              spec.version = Mailtrap::VERSION
         | 
| 8 | 
            -
              spec.authors = ['Railsware Products Studio | 
| 8 | 
            +
              spec.authors = ['Railsware Products Studio LLC']
         | 
| 9 9 | 
             
              spec.email = ['support@mailtrap.io']
         | 
| 10 10 |  | 
| 11 11 | 
             
              spec.summary = 'Official mailtrap.io API client'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mailtrap
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 | 
            -
            - Railsware Products Studio | 
| 7 | 
            +
            - Railsware Products Studio LLC
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-04-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: Official mailtrap.io API client
         | 
| 14 14 | 
             
            email:
         | 
| @@ -20,6 +20,7 @@ files: | |
| 20 20 | 
             
            - ".rspec"
         | 
| 21 21 | 
             
            - ".rubocop.yml"
         | 
| 22 22 | 
             
            - ".ruby-version"
         | 
| 23 | 
            +
            - Appraisals
         | 
| 23 24 | 
             
            - CHANGELOG.md
         | 
| 24 25 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 25 26 | 
             
            - Gemfile
         | 
| @@ -31,11 +32,12 @@ files: | |
| 31 32 | 
             
            - lib/mailtrap/action_mailer.rb
         | 
| 32 33 | 
             
            - lib/mailtrap/action_mailer/delivery_method.rb
         | 
| 33 34 | 
             
            - lib/mailtrap/action_mailer/railtie.rb
         | 
| 35 | 
            +
            - lib/mailtrap/mail.rb
         | 
| 36 | 
            +
            - lib/mailtrap/mail/base.rb
         | 
| 37 | 
            +
            - lib/mailtrap/mail/from_template.rb
         | 
| 34 38 | 
             
            - lib/mailtrap/sending.rb
         | 
| 35 39 | 
             
            - lib/mailtrap/sending/attachment.rb
         | 
| 36 40 | 
             
            - lib/mailtrap/sending/client.rb
         | 
| 37 | 
            -
            - lib/mailtrap/sending/convert.rb
         | 
| 38 | 
            -
            - lib/mailtrap/sending/mail.rb
         | 
| 39 41 | 
             
            - lib/mailtrap/version.rb
         | 
| 40 42 | 
             
            - mailtrap.gemspec
         | 
| 41 43 | 
             
            homepage: https://github.com/railsware/mailtrap-ruby
         | 
| @@ -1,83 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require 'base64'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module Mailtrap
         | 
| 6 | 
            -
              module Sending
         | 
| 7 | 
            -
                module Convert
         | 
| 8 | 
            -
                  class << self
         | 
| 9 | 
            -
                    def from_message(message) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
         | 
| 10 | 
            -
                      Mailtrap::Sending::Mail.new(
         | 
| 11 | 
            -
                        from: prepare_address(message['from']&.address_list&.addresses&.first),
         | 
| 12 | 
            -
                        to: prepare_addresses(message['to']&.address_list&.addresses),
         | 
| 13 | 
            -
                        cc: prepare_addresses(message['cc']&.address_list&.addresses),
         | 
| 14 | 
            -
                        bcc: prepare_addresses(message['bcc']&.address_list&.addresses),
         | 
| 15 | 
            -
                        subject: message.subject,
         | 
| 16 | 
            -
                        text: prepare_text_part(message),
         | 
| 17 | 
            -
                        html: prepare_html_part(message),
         | 
| 18 | 
            -
                        headers: prepare_headers(message),
         | 
| 19 | 
            -
                        attachments: prepare_attachments(message.attachments),
         | 
| 20 | 
            -
                        category: message['category']&.unparsed_value,
         | 
| 21 | 
            -
                        custom_variables: message['custom_variables']&.unparsed_value
         | 
| 22 | 
            -
                      )
         | 
| 23 | 
            -
                    end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    private
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                    PROCESSED_HEADERS = %w[
         | 
| 28 | 
            -
                      from
         | 
| 29 | 
            -
                      to
         | 
| 30 | 
            -
                      cc
         | 
| 31 | 
            -
                      bcc
         | 
| 32 | 
            -
                      subject
         | 
| 33 | 
            -
                      category
         | 
| 34 | 
            -
                      customvariables
         | 
| 35 | 
            -
                      contenttype
         | 
| 36 | 
            -
                    ].freeze
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    def prepare_addresses(addresses)
         | 
| 39 | 
            -
                      Array(addresses).map { |address| prepare_address(address) }
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                    def prepare_headers(message)
         | 
| 43 | 
            -
                      message
         | 
| 44 | 
            -
                        .header_fields
         | 
| 45 | 
            -
                        .reject { |header| PROCESSED_HEADERS.include?(header.name.downcase.delete('-')) }
         | 
| 46 | 
            -
                        .to_h { |header| [header.name, header.value] }
         | 
| 47 | 
            -
                        .compact
         | 
| 48 | 
            -
                    end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                    def prepare_address(address)
         | 
| 51 | 
            -
                      {
         | 
| 52 | 
            -
                        email: address.address,
         | 
| 53 | 
            -
                        name: address.display_name
         | 
| 54 | 
            -
                      }.compact
         | 
| 55 | 
            -
                    end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                    def prepare_attachments(attachments_list = [])
         | 
| 58 | 
            -
                      attachments_list.map do |attachment|
         | 
| 59 | 
            -
                        {
         | 
| 60 | 
            -
                          content: Base64.strict_encode64(attachment.body.decoded),
         | 
| 61 | 
            -
                          type: attachment.mime_type,
         | 
| 62 | 
            -
                          filename: attachment.filename,
         | 
| 63 | 
            -
                          disposition: attachment.header[:content_disposition]&.disposition_type,
         | 
| 64 | 
            -
                          content_id: attachment.header[:content_id]&.field&.content_id
         | 
| 65 | 
            -
                        }.compact
         | 
| 66 | 
            -
                      end
         | 
| 67 | 
            -
                    end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                    def prepare_html_part(message)
         | 
| 70 | 
            -
                      return message.body.decoded if message.mime_type == 'text/html'
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                      message.html_part&.decoded
         | 
| 73 | 
            -
                    end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                    def prepare_text_part(message)
         | 
| 76 | 
            -
                      return message.body.decoded if message.mime_type == 'text/plain' || message.mime_type.nil?
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                      message.text_part&.decoded
         | 
| 79 | 
            -
                    end
         | 
| 80 | 
            -
                  end
         | 
| 81 | 
            -
                end
         | 
| 82 | 
            -
              end
         | 
| 83 | 
            -
            end
         |