This rule was added in rubocop 1.44.0. It's useful to avoid accidental `unless !condition` clauses. Note we aren't replacing `unless zero?` with `if nonzero?` because we never use `nonzero?`; using it sounds like `if !zero?`. Replacing `unless any?` with `if none?` is only consistent if we also replace `unless present?` with `if blank?`, so we're also adding this case. For consistency, we're also replacing `unless blank?` with `if present?`. We're also simplifying code dealing with `> 0` conditions in order to make the code (hopefully) easier to understand. Also for consistency, we're enabling the `Style/InverseMethods` rule, which follows a similar idea.
50 lines
1.1 KiB
Ruby
50 lines
1.1 KiB
Ruby
class AdminNotification < ApplicationRecord
|
|
include Notifiable
|
|
|
|
translates :title, touch: true
|
|
translates :body, touch: true
|
|
include Globalizable
|
|
|
|
validates_translation :title, presence: true
|
|
validates_translation :body, presence: true
|
|
validates :segment_recipient, presence: true
|
|
validate :validate_segment_recipient
|
|
|
|
before_validation :complete_link_url
|
|
|
|
def list_of_recipients
|
|
UserSegments.recipients(segment_recipient) if valid_segment_recipient?
|
|
end
|
|
|
|
def valid_segment_recipient?
|
|
UserSegments.valid_segment?(segment_recipient)
|
|
end
|
|
|
|
def draft?
|
|
sent_at.nil?
|
|
end
|
|
|
|
def list_of_recipients_count
|
|
list_of_recipients&.count || 0
|
|
end
|
|
|
|
def deliver
|
|
list_of_recipients.each { |user| Notification.add(user, self) }
|
|
update!(sent_at: Time.current, recipients_count: list_of_recipients.count)
|
|
end
|
|
|
|
private
|
|
|
|
def validate_segment_recipient
|
|
errors.add(:segment_recipient, :invalid) unless valid_segment_recipient?
|
|
end
|
|
|
|
def complete_link_url
|
|
return if link.blank?
|
|
|
|
unless link =~ /\A(http:\/\/|https:\/\/|\/)/
|
|
self.link = "http://#{link}"
|
|
end
|
|
end
|
|
end
|