Class: Effective::Poll
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Effective::Poll
- Defined in:
- app/models/effective/poll.rb
Constant Summary collapse
- AUDIENCES =
['All Users', 'Individual Users', 'Selected Users']
Instance Method Summary collapse
- #audience_scope ⇒ Object
- #available? ⇒ Boolean
- #available_date ⇒ Object
- #available_for?(user) ⇒ Boolean
- #ended? ⇒ Boolean
-
#poll_results(poll_question: nil) ⇒ Object
Returns all completed_ballot_responses.
- #started? ⇒ Boolean
- #to_s ⇒ Object
- #users(except_completed: false) ⇒ Object
Instance Method Details
#audience_scope ⇒ Object
129 130 131 |
# File 'app/models/effective/poll.rb', line 129 def audience_scope Array(super) - [nil, ''] end |
#available? ⇒ Boolean
107 108 109 |
# File 'app/models/effective/poll.rb', line 107 def available? started? && !ended? end |
#available_date ⇒ Object
119 120 121 122 123 124 125 126 127 |
# File 'app/models/effective/poll.rb', line 119 def available_date if start_at && end_at && start_at.to_date == end_at.to_date "#{start_at.strftime('%F at %H:%M')} to #{end_at.strftime('%H:%M')}" elsif start_at && end_at "#{start_at.strftime('%F at %H:%M')} to #{end_at.strftime('%F %H:%M')}" elsif start_at "#{start_at.strftime('%F at %H:%M')}" end end |
#available_for?(user) ⇒ Boolean
81 82 83 84 |
# File 'app/models/effective/poll.rb', line 81 def available_for?(user) raise('expected a user') unless user.kind_of?(User) available? && users.include?(user) end |
#ended? ⇒ Boolean
115 116 117 |
# File 'app/models/effective/poll.rb', line 115 def ended? end_at.present? && end_at < Time.zone.now end |
#poll_results(poll_question: nil) ⇒ Object
Returns all completed_ballot_responses
134 135 136 137 |
# File 'app/models/effective/poll.rb', line 134 def poll_results(poll_question: nil) return completed_ballot_responses if poll_question.nil? completed_ballot_responses.select { |br| br.poll_question_id == poll_question.id } end |
#started? ⇒ Boolean
111 112 113 |
# File 'app/models/effective/poll.rb', line 111 def started? start_at_was.present? && Time.zone.now >= start_at_was end |
#to_s ⇒ Object
77 78 79 |
# File 'app/models/effective/poll.rb', line 77 def to_s title.presence || 'New Poll' end |
#users(except_completed: false) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/models/effective/poll.rb', line 86 def users(except_completed: false) users = case audience when 'All Users' User.all when 'Individual Users' User.where(id: audience_scope) when 'Selected Users' collection = User.none audience_scope.each { |scope| collection = collection.or(User.send(scope)) } collection else raise('unexpected audience') end if except_completed users.where.not(id: completed_ballots.select('user_id as id')) else users end end |