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?
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
end
def poll_options
- if !object.poll.expired? && object.poll.hide_totals?
- object.poll.unloaded_options
- else
- object.poll.loaded_options
- end
+ object.poll.loaded_options
end
def poll_and_multiple?
attributes :id, :expires_at, :expired,
:multiple, :votes_count
- has_many :dynamic_options, key: :options
+ has_many :loaded_options, key: :options
attribute :voted, if: :current_user?
object.id.to_s
end
- def dynamic_options
- if !object.expired? && object.hide_totals?
- object.unloaded_options
- else
- object.loaded_options
- end
- end
-
def expired
object.expired?
end
def voted
- object.votes.where(account: current_user.account).exists?
+ object.voted?(current_user.account)
end
def current_user?
-- options = (!poll.expired? && poll.hide_totals?) ? poll.unloaded_options : poll.loaded_options
-- voted = user_signed_in? && poll.votes.where(account: current_account).exists?
-- show_results = voted || poll.expired?
+- show_results = (user_signed_in? && poll.voted?(current_account)) || poll.expired?
.poll
%ul
- - options.each do |option|
+ - poll.loaded_options.each do |option|
%li
- if show_results
- percent = poll.votes_count > 0 ? 100 * option.votes_count / poll.votes_count : 0