Class: SpreeCmCommissioner::VotingSession
- Defined in:
- app/models/spree_cm_commissioner/voting_session.rb
Class Method Summary collapse
-
.current_or_next_upcoming(now = Time.current) ⇒ Object
Priority 1: Current session (Status = 0) wins over Upcoming session (Status = 1).
Instance Method Summary collapse
- #can_vote? ⇒ Boolean
- #effective_fraud_config ⇒ Object
- #effective_voting_config ⇒ Object
- #find_or_create_voting_contestant(show_contestant) ⇒ Object
- #max_votes_per_user ⇒ Object
- #rate_limit_max_votes ⇒ Object
- #rate_limit_window ⇒ Object
- #show ⇒ Object
Class Method Details
.current_or_next_upcoming(now = Time.current) ⇒ Object
Priority 1: Current session (Status = 0) wins over Upcoming session (Status = 1). Priority 2: Follow manual position (Managed by acts_as_list).
25 26 27 28 29 30 31 32 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 25 def self.current_or_next_upcoming(now = Time.current) sql_now = { now: now } current(now).or(upcoming(now)) .order( Arel.sql(sanitize_sql_array(['CASE WHEN opens_at <= :now AND closes_at >= :now THEN 0 ELSE 1 END', sql_now])), :position ) end |
Instance Method Details
#can_vote? ⇒ Boolean
60 61 62 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 60 def can_vote? enabled? && Time.current.between?(opens_at, closes_at) end |
#effective_fraud_config ⇒ Object
52 53 54 55 56 57 58 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 52 def effective_fraud_config return {} unless show config = parse_json_config(fraud_config) show_config = show.effective_fraud_config config.reverse_merge(show_config || {}) end |
#effective_voting_config ⇒ Object
44 45 46 47 48 49 50 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 44 def effective_voting_config return {} unless show config = parse_json_config(voting_config) show_config = show.effective_voting_config config.reverse_merge(show_config || {}) end |
#find_or_create_voting_contestant(show_contestant) ⇒ Object
38 39 40 41 42 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 38 def find_or_create_voting_contestant(show_contestant) voting_contestants.find_or_create_by!(show_contestant: show_contestant) do |vc| vc.show_id = show.id end end |
#max_votes_per_user ⇒ Object
64 65 66 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 64 def max_votes_per_user effective_voting_config['max_votes_per_user'] || 10 end |
#rate_limit_max_votes ⇒ Object
72 73 74 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 72 def rate_limit_max_votes effective_voting_config['rate_limit_max_votes'] || 5 end |
#rate_limit_window ⇒ Object
68 69 70 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 68 def rate_limit_window effective_voting_config['rate_limit_window'] || 60 end |
#show ⇒ Object
34 35 36 |
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 34 def show episode&.event end |