|
|
|
@ -28,7 +28,7 @@ class Poll < ApplicationRecord |
|
|
|
|
|
|
|
|
|
validates :options, presence: true |
|
|
|
|
validates :expires_at, presence: true, if: :local? |
|
|
|
|
validates_with PollValidator, if: :local? |
|
|
|
|
validates_with PollValidator, on: :create, if: :local? |
|
|
|
|
|
|
|
|
|
scope :attached, -> { where.not(status_id: nil) } |
|
|
|
|
scope :unattached, -> { where(status_id: nil) } |
|
|
|
@ -41,17 +41,17 @@ class Poll < ApplicationRecord |
|
|
|
|
after_commit :reset_parent_cache, on: :update |
|
|
|
|
|
|
|
|
|
def loaded_options |
|
|
|
|
options.map.with_index { |title, key| Option.new(self, key.to_s, title, cached_tallies[key]) } |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def unloaded_options |
|
|
|
|
options.map.with_index { |title, key| Option.new(self, key.to_s, title, nil) } |
|
|
|
|
options.map.with_index { |title, key| Option.new(self, key.to_s, title, show_totals_now? ? cached_tallies[key] : nil) } |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def possibly_stale? |
|
|
|
|
remote? && last_fetched_before_expiration? && time_passed_since_last_fetch? |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def voted?(account) |
|
|
|
|
account.id == account_id || votes.where(account: account).exists? |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
delegate :local?, to: :account |
|
|
|
|
|
|
|
|
|
def remote? |
|
|
|
@ -95,4 +95,8 @@ class Poll < ApplicationRecord |
|
|
|
|
def time_passed_since_last_fetch? |
|
|
|
|
last_fetched_at.nil? || last_fetched_at < 1.minute.ago |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def show_totals_now? |
|
|
|
|
expired? || !hide_totals? |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|