Class: SpreeCmCommissioner::VotingSession

Inherits:
Base
  • Object
show all
Defined in:
app/models/spree_cm_commissioner/voting_session.rb

Class Method Summary collapse

Instance Method Summary collapse

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

Returns:

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



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_configObject



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_userObject



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_votesObject



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_windowObject



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

#showObject



34
35
36
# File 'app/models/spree_cm_commissioner/voting_session.rb', line 34

def show
  episode&.event
end