Sha256: c044f2f1ed21a4a2f9a82742db83eb0c61749972d7b4e4b6f884371546730e24

Contents?: true

Size: 1.12 KB

Versions: 1

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

1 entries across 1 versions & 1 rubygems

Version Path
mailtrap-2.0.0 lib/mailtrap/attachment.rb