Why: Both Newsletters and Email Downloads need the same logic: To extract the emails from all the users in the segment that have newsletter flag active, removing all empty email values. How: 1- UserSegments#user_segment_emails holds that repeated logic and is used on both Newsletter & EmailDownload. 2- Rename Newsletter#list_of_recipients to list_of_recipient_emails as it is more descriptive. There is no need to pass entire Users around, only the emails are needed at Mailer#newsletter method. 3- Cleanup Newsletter#list_of_recipient_emails model spec scenario
29 lines
671 B
Ruby
29 lines
671 B
Ruby
class Newsletter < ActiveRecord::Base
|
|
|
|
validates :subject, presence: true
|
|
validates :segment_recipient, presence: true
|
|
validates :from, presence: true
|
|
validates :body, presence: true
|
|
validate :validate_segment_recipient
|
|
|
|
validates_format_of :from, :with => /@/
|
|
|
|
def list_of_recipient_emails
|
|
UserSegments.user_segment_emails(segment_recipient) if valid_segment_recipient?
|
|
end
|
|
|
|
def valid_segment_recipient?
|
|
segment_recipient && UserSegments.respond_to?(segment_recipient)
|
|
end
|
|
|
|
def draft?
|
|
sent_at.nil?
|
|
end
|
|
|
|
private
|
|
|
|
def validate_segment_recipient
|
|
errors.add(:segment_recipient, :invalid) unless valid_segment_recipient?
|
|
end
|
|
end
|