Sha256: 3c36edc43a0048b430810f48acabebaab413422681e04301a950328ac6dfd95d

Contents?: true

Size: 1.21 KB

Versions: 6

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

require 'base64'
require 'json'

module Mailtrap
  module Sending
    class Attachment
      attr_accessor :type, :filename, :disposition, :content_id
      attr_reader :content

      def initialize(content:, filename:, type: nil, disposition: nil, content_id: nil)
        self.content = content
        @type = type
        @filename = filename
        @disposition = disposition
        @content_id = content_id
      end

      def as_json
        {
          'content' => content,
          'type' => type,
          'filename' => filename,
          'disposition' => disposition,
          'content_id' => content_id
        }.compact
      end

      def content=(content)
        if content.respond_to?(:read)
          @content = encode(content)
        else
          raise AttachmentContentError unless base64?(content)

          @content = content
        end
      end

      private

      def encode(io)
        string = io.read.encode('UTF-8') unless io.respond_to?(:binmode?) && io.binmode?
        Base64.encode64(string).gsub(/\n/, '')
      end

      def base64?(string)
        string.is_a?(String) && Base64.strict_encode64(Base64.decode64(string)) == string
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mailtrap-1.2.2 lib/mailtrap/sending/attachment.rb
mailtrap-1.2.1 lib/mailtrap/sending/attachment.rb
mailtrap-1.2.0 lib/mailtrap/sending/attachment.rb
mailtrap-1.1.1 lib/mailtrap/sending/attachment.rb
mailtrap-1.1.0 lib/mailtrap/sending/attachment.rb
mailtrap-1.0.1 lib/mailtrap/sending/attachment.rb