Class: Maily::Email
- Inherits:
-
Object
- Object
- Maily::Email
- Defined in:
- lib/maily/email.rb
Constant Summary collapse
- DEFAULT_VERSION =
'default'.freeze
Instance Attribute Summary collapse
-
#arguments ⇒ Object
Returns the value of attribute arguments.
-
#description ⇒ Object
Returns the value of attribute description.
-
#mailer ⇒ Object
Returns the value of attribute mailer.
-
#name ⇒ Object
Returns the value of attribute name.
-
#template_name ⇒ Object
Returns the value of attribute template_name.
-
#template_path ⇒ Object
Returns the value of attribute template_path.
-
#version ⇒ Object
Returns the value of attribute version.
-
#with_params ⇒ Object
Returns the value of attribute with_params.
Class Method Summary collapse
Instance Method Summary collapse
- #base_path(part) ⇒ Object
- #call ⇒ Object
- #has_versions? ⇒ Boolean
-
#initialize(name, mailer) ⇒ Email
constructor
A new instance of Email.
- #mailer_klass ⇒ Object
- #optional_arguments ⇒ Object
- #parameterized_mailer_klass ⇒ Object
- #parameters ⇒ Object
- #path(part = nil) ⇒ Object
- #register_hook(*args) ⇒ Object
- #require_hook? ⇒ Boolean
- #required_arguments ⇒ Object
- #template(part = nil) ⇒ Object
- #update_template(new_content, part = nil) ⇒ Object
- #validate_arguments ⇒ Object
- #versions ⇒ Object
Constructor Details
#initialize(name, mailer) ⇒ Email
Returns a new instance of Email.
19 20 21 22 23 24 25 26 27 |
# 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 |
Instance Attribute Details
#arguments ⇒ Object
Returns the value of attribute arguments.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def arguments @arguments end |
#description ⇒ Object
Returns the value of attribute description.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def description @description end |
#mailer ⇒ Object
Returns the value of attribute mailer.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def mailer @mailer end |
#name ⇒ Object
Returns the value of attribute name.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def name @name end |
#template_name ⇒ Object
Returns the value of attribute template_name.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def template_name @template_name end |
#template_path ⇒ Object
Returns the value of attribute template_path.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def template_path @template_path end |
#version ⇒ Object
Returns the value of attribute version.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def version @version end |
#with_params ⇒ Object
Returns the value of attribute with_params.
5 6 7 |
# File 'lib/maily/email.rb', line 5 def with_params @with_params end |
Class Method Details
.formatted_version(version) ⇒ Object
13 14 15 16 |
# 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) ⇒ Object
8 9 10 11 |
# File 'lib/maily/email.rb', line 8 def name_with_version(name, version = nil) _version = formatted_version(version) [name, _version].join(':') end |
Instance Method Details
#base_path(part) ⇒ Object
104 105 106 |
# File 'lib/maily/email.rb', line 104 def base_path(part) Dir["#{Rails.root}/app/views/#{template_path}/#{template_name}.#{part}.*"].first end |
#call ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# 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 ActionMailer::Base.preview_interceptors.each do |interceptor| interceptor.previewing_email() end end |
#has_versions? ⇒ Boolean
137 138 139 |
# File 'lib/maily/email.rb', line 137 def has_versions? versions.count > 1 end |
#mailer_klass ⇒ Object
29 30 31 |
# File 'lib/maily/email.rb', line 29 def mailer_klass mailer.klass end |
#optional_arguments ⇒ Object
50 51 52 |
# File 'lib/maily/email.rb', line 50 def optional_arguments parameters.select { |param| param.first == :opt }.map(&:last) end |
#parameterized_mailer_klass ⇒ Object
33 34 35 36 |
# 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 ⇒ Object
38 39 40 |
# File 'lib/maily/email.rb', line 38 def parameters mailer_klass.instance_method(name).parameters end |
#path(part = nil) ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/maily/email.rb', line 108 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) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# 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? ⇒ Boolean
42 43 44 |
# File 'lib/maily/email.rb', line 42 def require_hook? parameters.any? end |
#required_arguments ⇒ Object
46 47 48 |
# File 'lib/maily/email.rb', line 46 def required_arguments parameters.select { |param| param.first == :req }.map(&:last) end |
#template(part = nil) ⇒ Object
119 120 121 |
# File 'lib/maily/email.rb', line 119 def template(part = nil) File.read(path(part)) end |
#update_template(new_content, part = nil) ⇒ Object
123 124 125 126 127 |
# File 'lib/maily/email.rb', line 123 def update_template(new_content, part = nil) File.open(path(part), 'w') do |f| f.write(new_content) end end |
#validate_arguments ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# 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 ⇒ Object
129 130 131 132 133 134 135 |
# File 'lib/maily/email.rb', line 129 def versions regexp = Regexp.new("^#{self.name}:") mailer.emails.select do |email_key, _email| email_key.match?(regexp) end end |