lib/maily/mailer.rb in maily-0.6.3 vs lib/maily/mailer.rb in maily-0.7.0
- old
+ new
@@ -1,37 +1,55 @@
module Maily
class Mailer
cattr_accessor :collection
- attr_accessor :name, :emails
+ attr_accessor :name, :emails, :klass
- def initialize(name, methods)
- self.collection ||= []
- self.name = name
- self.emails = self.class.build_emails(methods, name)
- self.collection << self
+ 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.find(mailer_name)
- all.find { |mailer| mailer.name == mailer_name }
+ all[mailer_name]
end
- def self.build_emails(methods, mailer)
- methods.map do |email|
- Maily::Email.new(email, mailer)
- end
+ def find_email(email_name)
+ emails[email_name.to_s]
end
+ def total_emails
+ emails.size
+ end
+
def register_hook(email_name, *args)
email = find_email(email_name)
- email.register_hook(args)
+ email && email.register_hook(args)
end
- def find_email(email_name)
- emails.find { |email| email.name == email_name.to_s }
+ 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
\ No newline at end of file