Class: Effective::Poll

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/effective/poll.rb

Constant Summary collapse

AUDIENCES =
['All Users', 'Individual Users', 'Selected Users']

Instance Method Summary collapse

Instance Method Details

#audience_scopeObject



129
130
131
# File 'app/models/effective/poll.rb', line 129

def audience_scope
  Array(super) - [nil, '']
end

#available?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'app/models/effective/poll.rb', line 107

def available?
  started? && !ended?
end

#available_dateObject



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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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_sObject



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