class Maily::Email
Constants
- DEFAULT_VERSION
Attributes
arguments[RW]
description[RW]
mailer[RW]
name[RW]
template_name[RW]
template_path[RW]
version[RW]
with_params[RW]
Public Class Methods
formatted_version(version)
click to toggle source
# File lib/maily/email.rb, line 13 def formatted_version(version) _version = version.presence || DEFAULT_VERSION _version&.parameterize&.underscore end
name_with_version(name, version = nil)
click to toggle source
# File lib/maily/email.rb, line 8 def name_with_version(name, version = nil) _version = formatted_version(version) [name, _version].join(':') end
new(name, mailer)
click to toggle source
# File lib/maily/email.rb, line 19 def initialize(name, mailer) self.name = name self.mailer = mailer self.arguments = nil self.with_params = nil self.template_path = mailer.name self.template_name = name self.description = nil end
Public Instance Methods
base_path(part)
click to toggle source
# File lib/maily/email.rb, line 98 def base_path(part) Dir["#{Rails.root}/app/views/#{template_path}/#{template_name}.#{part}.*"].first end
call()
click to toggle source
# File lib/maily/email.rb, line 88 def call *args = arguments && arguments.map { |arg| arg.respond_to?(:call) ? arg.call : arg } if args == [nil] parameterized_mailer_klass.public_send(name) else parameterized_mailer_klass.public_send(name, *args) end end
has_versions?()
click to toggle source
# File lib/maily/email.rb, line 131 def has_versions? versions.count > 1 end
mailer_klass()
click to toggle source
# File lib/maily/email.rb, line 29 def mailer_klass mailer.klass end
optional_arguments()
click to toggle source
# File lib/maily/email.rb, line 50 def optional_arguments parameters.select { |param| param.first == :opt }.map(&:last) end
parameterized_mailer_klass()
click to toggle source
# File lib/maily/email.rb, line 33 def parameterized_mailer_klass params = with_params && with_params.transform_values { |param| param.respond_to?(:call) ? param.call : param } mailer_klass.with(params) end
parameters()
click to toggle source
# File lib/maily/email.rb, line 38 def parameters mailer_klass.instance_method(name).parameters end
path(part = nil)
click to toggle source
# File lib/maily/email.rb, line 102 def path(part = nil) return base_path(part) if part html_part = base_path('html') if html_part && File.exist?(html_part) html_part else base_path('text') end end
register_hook(*args)
click to toggle source
# File lib/maily/email.rb, line 68 def register_hook(*args) if args.last.is_a?(Hash) self.description = args.last.delete(:description) self.with_params = args.last.delete(:with_params) self.version = Maily::Email.formatted_version(args.last.delete(:version)) if tpl_path = args.last.delete(:template_path) self.template_path = tpl_path end if tpl_name = args.last.delete(:template_name) self.template_name = tpl_name end args.pop end self.arguments = args end
require_hook?()
click to toggle source
# File lib/maily/email.rb, line 42 def require_hook? parameters.any? end
required_arguments()
click to toggle source
# File lib/maily/email.rb, line 46 def required_arguments parameters.select { |param| param.first == :req }.map(&:last) end
template(part = nil)
click to toggle source
# File lib/maily/email.rb, line 113 def template(part = nil) File.read(path(part)) end
update_template(new_content, part = nil)
click to toggle source
# File lib/maily/email.rb, line 117 def update_template(new_content, part = nil) File.open(path(part), 'w') do |f| f.write(new_content) end end
validate_arguments()
click to toggle source
# File lib/maily/email.rb, line 54 def validate_arguments from = required_arguments.size to = from + optional_arguments.size passed_by_hook = arguments && arguments.size || 0 if passed_by_hook < from [false, "#{name} email requires at least #{from} arguments, passed #{passed_by_hook}"] elsif passed_by_hook > to [false, "#{name} email requires at the most #{to} arguments, passed #{passed_by_hook}"] else [true, nil] end end
versions()
click to toggle source
# File lib/maily/email.rb, line 123 def versions regexp = Regexp.new("^#{self.name}:") mailer.emails.select do |email_key, _email| email_key.match?(regexp) end end