Class CombinedTimeTrialResults
In: app/models/combined_time_trial_results.rb
Parent: Event

All categories’ results in a time trial by time Adds combined_results if Time Trial Event. Destroy combined_results if they exist, but should not All the calculation happens synchronously, which isn‘t ideal. Logic overlaps heavily with Competition as well.

Methods

Public Class methods

[Source]

    # File app/models/combined_time_trial_results.rb, line 76
76:   def self.allows_combined_results?(event)
77:     event.discipline == "Time Trial"
78:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 80
80:   def self.create_combined_results(event)
81:     event.create_combined_results unless event.combined_results
82:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 45
45:   def self.create_or_destroy_for!(event)
46:     return event.combined_results unless event.notification_enabled?
47:     event.disable_notification!
48: 
49:     if destroy_combined_results?(event)
50:       destroy_combined_results(event)
51:     elsif requires_combined_results?(event)
52:       create_combined_results(event)
53:       destroy_combined_results(event) unless event.combined_results.has_results?
54:     end
55: 
56:     event.enable_notification!
57:     event.combined_results
58:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 64
64:   def self.destroy_combined_results(event)
65:     if event.combined_results
66:       event.combined_results.destroy_races
67:       event.combined_results(true).destroy
68:       event.combined_results = nil
69:     end
70:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 60
60:   def self.destroy_combined_results?(event)
61:     !requires_combined_results?(event) || (event.combined_results(true) && !event.combined_results.has_results?)
62:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 72
72:   def self.requires_combined_results?(event)
73:     allows_combined_results?(event) && event.auto_combined_results? && event.has_results?(true)
74:   end

Public Instance methods

[Source]

     # File app/models/combined_time_trial_results.rb, line 84
 84:   def calculate!
 85:     destroy_races
 86:     combined_race = races.create!(:category => Category.find_or_create_by_name("Combined"))
 87:     parent.races.each do |race|
 88:       race.results.each do |result|
 89:         if result.place.to_i > 0 && result.time && result.time > 0
 90:           combined_race.results.create!(
 91:             :person => result.person,
 92:             :team => result.team,
 93:             :time => result.time,
 94:             :category => race.category
 95:           )
 96:         end
 97:       end
 98:     end
 99:     combined_race.results.sort! do |x, y|
100:       if x.time
101:         if y.time
102:           x.time <=> y.time
103:         else
104:           1
105:         end
106:       else
107:         -1
108:       end
109:     end
110:     place = 1
111:     combined_race.results.each do |result|
112:       result.update_attribute(:place, place.to_s)
113:       place = place + 1
114:     end
115:     true
116:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 11
11:   def default_bar_points
12:     0
13:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 15
15:   def default_discipline
16:     "Time Trial"
17:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 19
19:   def default_ironman
20:     false
21:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 23
23:   def default_name
24:     "Combined"
25:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 31
31:   def disable_notification!
32:     false
33:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 27
27:   def enable_notification!
28:     false
29:   end

[Source]

    # File app/models/combined_time_trial_results.rb, line 35
35:   def set_mandatory_defaults
36:     self.bar_points = default_bar_points
37:     self.discipline = default_discipline
38:     self.ironman = default_ironman
39:     self.name = default_name
40:     self.auto_combined_results = false
41:     self.notification = false
42:     true
43:   end

[Validate]