Class: MailyHerald::Mailing
- Includes:
- Autonaming, TemplateRenderer
- Defined in:
- app/models/maily_herald/mailing.rb
Direct Known Subclasses
AdHocMailing, OneTimeMailing, PeriodicalMailing, SequenceMailing
Instance Attribute Summary
Attributes inherited from Dispatch
#absolute_delay, #from, #list_id, #name, #override_subscription, #period, #sequence_id, #state, #subject, #template, #title, #type
Instance Method Summary collapse
- #ad_hoc? ⇒ Boolean
-
#build_mail(schedule) ⇒ Object
Builds ‘Mail::Message` object for given entity.
-
#conditions ⇒ Object
Returns time as string with Liquid expression or Proc.
-
#conditions=(v) ⇒ Object
Sets mailing conditions.
- #conditions_changed? ⇒ Boolean
-
#conditions_met?(entity) ⇒ Boolean
Checks whether entity meets conditions of this Mailing.
-
#destination(entity) ⇒ Object
Returns destination email address for given entity.
- #general_scheduling? ⇒ Boolean
-
#generic_mailer? ⇒ Boolean
Checks whether Mailing uses generic mailer.
-
#has_conditions? ⇒ Boolean
Checks whether Mailig has conditions defined.
- #has_conditions_proc? ⇒ Boolean
- #individual_scheduling? ⇒ Boolean
-
#mailer ⇒ Object
Returns Mailer class used by this Mailing.
- #mailer_name ⇒ Object
- #one_time? ⇒ Boolean
- #periodical? ⇒ Boolean
-
#render_subject(entity) ⇒ Object
Renders email subject line for given entity.
-
#render_template(entity) ⇒ Object
Renders email body for given entity.
- #sequence? ⇒ Boolean
-
#test_conditions(entity) ⇒ Object
Checks whether conditions evaluate properly for given entity.
Methods included from Autonaming
Methods included from TemplateRenderer
Methods inherited from Dispatch
#archive, #archive!, #archived?, #disable, #disable!, #disabled?, #enable, #enable!, #enabled?, #has_start_at_proc?, #in_scope?, #list=, #locked?, #processable?, #start_at, #start_at=, #start_at_changed?, #subscription_valid?
Instance Method Details
#ad_hoc? ⇒ Boolean
80 81 82 |
# File 'app/models/maily_herald/mailing.rb', line 80 def ad_hoc? self.class == AdHocMailing end |
#build_mail(schedule) ⇒ Object
Builds ‘Mail::Message` object for given entity.
Depending on #mailer_name value it uses either generic mailer (from MailyHerald::Mailer class) or custom mailer.
178 179 180 181 182 183 184 |
# File 'app/models/maily_herald/mailing.rb', line 178 def build_mail schedule if generic_mailer? Mailer.generic(schedule, self) else self.mailer.send(self.name, schedule) end end |
#conditions ⇒ Object
Returns time as string with Liquid expression or Proc.
54 55 56 |
# File 'app/models/maily_herald/mailing.rb', line 54 def conditions @conditions_proc || MailyHerald.conditions_procs[self.id] || read_attribute(:conditions) end |
#conditions=(v) ⇒ Object
Sets mailing conditions.
45 46 47 48 49 50 51 |
# File 'app/models/maily_herald/mailing.rb', line 45 def conditions= v if v.respond_to? :call @conditions_proc = v else write_attribute(:conditions, v) end end |
#conditions_changed? ⇒ Boolean
62 63 64 65 66 67 68 |
# File 'app/models/maily_herald/mailing.rb', line 62 def conditions_changed? if has_conditions_proc? @conditions_proc != MailyHerald.conditions_procs[self.id] else super end end |
#conditions_met?(entity) ⇒ Boolean
Checks whether entity meets conditions of this Mailing.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'app/models/maily_herald/mailing.rb', line 122 def conditions_met? entity subscription = Subscription.get_from(entity) || self.list.subscription_for(entity) if has_conditions_proc? !!conditions.call(entity, subscription) else if self.list.context.attributes evaluator = Utils::MarkupEvaluator.new(self.list.context.drop_for(entity, subscription)) evaluator.evaluate_conditions(self.conditions) else true end end end |
#destination(entity) ⇒ Object
Returns destination email address for given entity.
146 147 148 |
# File 'app/models/maily_herald/mailing.rb', line 146 def destination entity self.list.context.destination_for(entity) end |
#general_scheduling? ⇒ Boolean
70 71 72 73 74 |
# File 'app/models/maily_herald/mailing.rb', line 70 def general_scheduling? self.start_at.is_a?(String) && Time.parse(self.start_at).is_a?(Time) rescue false end |
#generic_mailer? ⇒ Boolean
Checks whether Mailing uses generic mailer.
110 111 112 |
# File 'app/models/maily_herald/mailing.rb', line 110 def generic_mailer? self.mailer_name == :generic end |
#has_conditions? ⇒ Boolean
Checks whether Mailig has conditions defined.
115 116 117 |
# File 'app/models/maily_herald/mailing.rb', line 115 def has_conditions? self.conditions && (has_conditions_proc? || !self.conditions.empty?) end |
#has_conditions_proc? ⇒ Boolean
58 59 60 |
# File 'app/models/maily_herald/mailing.rb', line 58 def has_conditions_proc? @conditions_proc || MailyHerald.conditions_procs[self.id] end |
#individual_scheduling? ⇒ Boolean
76 77 78 |
# File 'app/models/maily_herald/mailing.rb', line 76 def individual_scheduling? !general_scheduling? end |
#mailer ⇒ Object
Returns MailyHerald::Mailer class used by this Mailing.
101 102 103 104 105 106 107 |
# File 'app/models/maily_herald/mailing.rb', line 101 def mailer if generic_mailer? MailyHerald::Mailer else self.mailer_name.to_s.constantize end end |
#mailer_name ⇒ Object
96 97 98 |
# File 'app/models/maily_herald/mailing.rb', line 96 def mailer_name read_attribute(:mailer_name).to_sym end |
#one_time? ⇒ Boolean
88 89 90 |
# File 'app/models/maily_herald/mailing.rb', line 88 def one_time? self.class == OneTimeMailing end |
#periodical? ⇒ Boolean
84 85 86 |
# File 'app/models/maily_herald/mailing.rb', line 84 def periodical? self.class == PeriodicalMailing end |
#render_subject(entity) ⇒ Object
Renders email subject line for given entity.
Reads Dispatch#subject attribute and renders it using Liquid within the context for provided entity.
166 167 168 169 170 171 172 |
# File 'app/models/maily_herald/mailing.rb', line 166 def render_subject entity subscription = self.list.subscription_for(entity) return unless subscription drop = self.list.context.drop_for entity, subscription perform_template_rendering drop, self.subject end |
#render_template(entity) ⇒ Object
Renders email body for given entity.
Reads Dispatch#template attribute and renders it using Liquid within the context for provided entity.
154 155 156 157 158 159 160 |
# File 'app/models/maily_herald/mailing.rb', line 154 def render_template entity subscription = self.list.subscription_for(entity) return unless subscription drop = self.list.context.drop_for entity, subscription perform_template_rendering drop, self.template end |
#sequence? ⇒ Boolean
92 93 94 |
# File 'app/models/maily_herald/mailing.rb', line 92 def sequence? self.class == SequenceMailing end |
#test_conditions(entity) ⇒ Object
Checks whether conditions evaluate properly for given entity.
138 139 140 141 142 143 |
# File 'app/models/maily_herald/mailing.rb', line 138 def test_conditions entity conditions_met?(entity) true rescue StandardError => e false end |