Class: MailyHerald::OneTimeMailing
- Defined in:
- app/models/maily_herald/one_time_mailing.rb
Instance Attribute Summary
Attributes inherited from Dispatch
#absolute_delay, #conditions, #from, #list_id, #mailer_name, #name, #override_subscription, #period, #sequence_id, #state, #subject, #template, #title, #type
Instance Method Summary collapse
-
#processed_logs(entity) ⇒ Object
Returns collection of processed Logs for given entity.
-
#run ⇒ Object
Sends mailing to all subscribed entities.
-
#schedule_for(entity) ⇒ Object
Returns Log object which is the delivery schedule for given entity.
-
#schedules ⇒ Object
Returns collection of all delivery schedules (Log collection).
-
#set_schedule_for(entity) ⇒ Object
Sets the delivery schedule for given entity.
-
#set_schedules ⇒ Object
Sets delivery schedules of all entities in mailing scope.
-
#start_processing_time(entity) ⇒ Object
Returns processing time for given entity.
- #to_s ⇒ Object
Methods inherited from Mailing
#ad_hoc?, #build_mail, #conditions, #conditions=, #conditions_changed?, #conditions_met?, #destination, #general_scheduling?, #generic_mailer?, #has_conditions?, #has_conditions_proc?, #individual_scheduling?, #mailer, #mailer_name, #one_time?, #periodical?, #render_subject, #render_template, #sequence?, #test_conditions
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
#processed_logs(entity) ⇒ Object
Returns collection of processed Logs for given entity.
31 32 33 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 31 def processed_logs entity Log.ordered.for_entity(entity).for_mailing(self).processed end |
#run ⇒ Object
Sends mailing to all subscribed entities.
Performs actual sending of emails; should be called in background.
Returns array of Log with actual ‘Mail::Message` objects stored in Log.mail attributes.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 15 def run # TODO better scope here to exclude schedules for users outside context scope schedules.where("processing_at <= (?)", Time.now).collect do |schedule| if schedule.entity mail = deliver schedule schedule.reload schedule.mail = mail schedule else MailyHerald.logger.log_processing(schedule.mailing, {class: schedule.entity_type, id: schedule.entity_id}, prefix: "Removing schedule for non-existing entity") schedule.destroy end end end |
#schedule_for(entity) ⇒ Object
Returns Log object which is the delivery schedule for given entity.
80 81 82 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 80 def schedule_for entity schedules.for_entity(entity).first end |
#schedules ⇒ Object
Returns collection of all delivery schedules (Log collection).
85 86 87 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 85 def schedules Log.ordered.scheduled.for_mailing(self) end |
#set_schedule_for(entity) ⇒ Object
Sets the delivery schedule for given entity
New schedule will be created or existing one updated. Schedule is Log object of type “schedule”.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 39 def set_schedule_for entity if processed_logs(entity).last # this mailing is sent only once log = schedule_for(entity) log.try(:destroy) return end subscribed = self.list.subscribed?(entity) start_time = start_processing_time(entity) if !self.start_at || !enabled? || !start_time || !(self.override_subscription? || subscribed) log = schedule_for(entity) log.try(:destroy) return end log = schedule_for(entity) log ||= Log.new log.with_lock do log.set_attributes_for(self, entity, { status: :scheduled, processing_at: start_time, }) log.save! end log end |
#set_schedules ⇒ Object
Sets delivery schedules of all entities in mailing scope.
New schedules will be created or existing ones updated.
72 73 74 75 76 77 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 72 def set_schedules self.list.context.scope_with_subscription(self.list, :outer).each do |entity| MailyHerald.logger.debug "Updating schedule of #{self} one-time for entity ##{entity.id} #{entity}" set_schedule_for entity end end |
#start_processing_time(entity) ⇒ Object
Returns processing time for given entity.
This is the time when next mailing should be sent based on Dispatch#start_at mailing attribute.
93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 93 def start_processing_time entity subscription = self.list.subscription_for(entity) if has_start_at_proc? start_at.call(entity, subscription) else evaluator = Utils::MarkupEvaluator.new(self.list.context.drop_for(entity, subscription)) evaluator.evaluate_start_at(self.start_at) end end |
#to_s ⇒ Object
105 106 107 |
# File 'app/models/maily_herald/one_time_mailing.rb', line 105 def to_s "<OneTimeMailing: #{self.title || self.name}>" end |