Sha256: 4c2bc19be1e0aeaf84acf9f1678dbf90bf964e99715e427138b84b998b6bc10e

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

require_relative 'slack_mailer/configuration'
require_relative 'slack_mailer/delivery_worker'
require 'slack-notifier'

module Slack
  class Mailer

    class << self
      def method_missing(method, *args)
        self.new.send(method, *args)
      end

      def send_message(channel = '', name = '', message = '')
        return if channel.empty? || name.empty? || message.empty?
        Slack::Mailer::DeliveryWorker.perform_async(name: name, message: message, channel: channel)
      end

      def send_direct_message(channel = '', name = '', message = '')
        return if channel.empty? || name.empty? || message.empty?
        Slack::Notifier.new(Slack::Mailer::Configuration.slack_hook_url, username: name, channel: channel, link_names: 1)
          .ping(message)
      end
    end

    def mail(to: nil, template: nil, use_sidekiq: true)
      channel = '#' << to
      instance_variables = self.instance_variables.map { |instance_variable|
        { instance_variable => self.instance_variable_get(instance_variable) }
      }.reduce(:merge)
      message = collect_message(template, instance_variables)
      method = use_sidekiq ? :send_message : :send_direct_message
      self.class.send(method, channel, "#{self.class.name}##{template}", message)
    end

    def collect_message(template, instance_variables)
      template = "#{template}.#{Slack::Mailer::Configuration.config.templates_type}"
      template + '.erb' if Slack::Mailer::Configuration.config.erb_in_templates
      ActionView::Base.new("#{Slack::Mailer::Configuration.config.templates_path}/#{self.class.name.underscore}",
                           {}, ActionController::Base.new).render(file: template, locals: instance_variables || {})
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slack_mailer-0.1.3 lib/slack_mailer.rb