Sha256: e7f65f86d893266ee0501f2243619bc27149de6473777932dcfb1c9f256ca86d

Contents?: true

Size: 1.12 KB

Versions: 5

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

require 'base64'
require 'json'

module Mailtrap
  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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mailtrap-2.3.0 lib/mailtrap/attachment.rb
mailtrap-2.2.0 lib/mailtrap/attachment.rb
mailtrap-2.1.2 lib/mailtrap/attachment.rb
mailtrap-2.1.1 lib/mailtrap/attachment.rb
mailtrap-2.1.0 lib/mailtrap/attachment.rb