Sha256: df334b27f04b843e2bfcae5e154a13cc500d7d8f4cd684b01d1e11b86b49dc52

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

require 'mail'
require 'active_support/inflector'
require 'ditty/services/logger'
require 'ditty/services/settings'

module Ditty
  module Services
    module Email
      class << self
        include ActiveSupport::Inflector

        attr_writer :config

        def config!
          cfg = config
          Mail.defaults do
            delivery_method cfg[:delivery_method].to_sym, (cfg[:options] || {})
          end
        end

        def deliver(email, to = nil, options = {})
          config!
          options[:to] ||= to unless to.nil?
          options[:from] ||= config[:from] unless config[:from].nil?
          email = from_symbol(email, options) if email.is_a? Symbol
          email.deliver!
        end

        private

        def config
          @config ||= default.merge Ditty::Services::Settings.values(:email) || {}
        end

        def default
          {
            delivery_method: :logger,
            logger: Ditty::Services::Logger.instance
          }
        end

        def from_symbol(email, options)
          require "ditty/emails/#{email}"
          constantize("Ditty::Emails::#{classify(email)}").new(options)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ditty-0.8.0 lib/ditty/services/email.rb