Sha256: 3d47805d720dbafdf91d5fe3cb3a8b94a57a5c673e283065f2c4edd90ec173db

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Maily
  class Mailer
    cattr_accessor :collection
    attr_accessor :name, :emails, :klass

    def initialize(name)
      self.name   = name
      self.klass  = name.camelize.constantize
      self.emails = {}

      parse_emails

      self.class.collection ||= {}
      self.class.collection[name] = self
    end

    def self.all
      Maily.load_emails_and_hooks if collection.nil?
      collection
    end

    def self.list
      all.values.sort_by(&:name)
    end

    def self.find(mailer_name)
      all[mailer_name]
    end

    def find_email(email_name)
      emails[email_name.to_s]
    end

    def emails_list
      emails.values.sort_by(&:name)
    end

    def total_emails
      emails.size
    end

    def register_hook(email_name, *args)
      email = find_email(email_name)
      email && email.register_hook(args)
    end

    def hide_email(*email_names)
      email_names.each do |email_name|
        emails.delete(email_name.to_s)
      end
    end

    private

    def parse_emails
      _emails = klass.send(:public_instance_methods, false)

      _emails.map(&:to_s).each do |email|
        self.emails[email] = Maily::Email.new(email, self)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
maily-0.7.2 lib/maily/mailer.rb