Class OregonCup
In: app/models/competitions/oregon_cup.rb
Parent: Competition

Year-long best rider competition for senior men and women. obra.org/oregon_cup

Methods

Public Instance methods

[Source]

    # File app/models/competitions/oregon_cup.rb, line 54
54:   def category_ids_for(race)
55:     ids = [race.category_id]
56:     ids = ids + race.category.descendants.map(&:id)
57:     if race.category == Category.find_or_create_by_name('Senior Women')
58:       cat_3_women = Category.find_or_create_by_name('Category 3 Women')
59:       ids = ids + [cat_3_women.id]
60:       ids = ids + cat_3_women.descendants.map(&:id)
61:     end
62:     ids.join(', ')
63:   end

[Source]

    # File app/models/competitions/oregon_cup.rb, line 65
65:   def create_races
66:     category = Category.find_or_create_by_name('Senior Men')
67:     races.create :category => category
68: 
69:     category = Category.find_or_create_by_name('Senior Women')
70:     races.create :category => category
71:   end

[Source]

   # File app/models/competitions/oregon_cup.rb, line 3
3:   def friendly_name
4:     'Oregon Cup'
5:   end

[Source]

    # File app/models/competitions/oregon_cup.rb, line 73
73:   def latest_event_with_results
74:     source_events.sort_by(&:date).each do |event|
75:       event.races.each do |race|
76:         if race.results.any?
77:           return event
78:         end
79:       end
80:     end
81:     nil
82:   end

Unreliable

[Source]

    # File app/models/competitions/oregon_cup.rb, line 85
85:   def more_events?(today = Date.today)
86:     !self.next_event(today).nil?
87:   end

Unreliable

[Source]

    # File app/models/competitions/oregon_cup.rb, line 90
90:   def next_event(today = Date.today)
91:     for event in source_events.sort_by(&:date)
92:       if event.date > today
93:         return event
94:       end
95:     end
96:     nil
97:   end

[Source]

   # File app/models/competitions/oregon_cup.rb, line 7
7:   def point_schedule
8:     [ 0, 100, 75, 60, 50, 45, 40, 35, 30, 25, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 ]
9:   end

Women are often raced together and then scored separately. Combined Women 1/2/3 results count for Oregon Cup. Mark Oregon Cup race by adding "Oregon Cup" to event name, race name, event notes, or race notes.

[Source]

    # File app/models/competitions/oregon_cup.rb, line 39
39:   def remove_duplicate_results(results)
40:     results.delete_if do |result|
41:       results.any? do |other_result|
42:         result != other_result &&
43:         result.race_id != other_result.race_id &&
44:         result.event.root == other_result.event.root &&
45:         (
46:           other_result.race.notes.include?("Oregon Cup") ||
47:           other_result.event.notes.include?("Oregon Cup") || 
48:           other_result.event.name.include?("Oregon Cup")
49:         )
50:       end
51:     end
52:   end

source_results must be in person-order

[Source]

    # File app/models/competitions/oregon_cup.rb, line 12
12:   def source_results(race)
13:     return [] if source_events(true).empty?
14:     
15:     event_ids = source_events.collect do |event|
16:       event.id
17:     end
18:     event_ids = event_ids.join(', ')
19:     
20:     results = Result.find_by_sql(
21:       %Q{SELECT results.* FROM results  
22:           LEFT OUTER JOIN races ON races.id = results.race_id 
23:           LEFT OUTER JOIN categories ON categories.id = races.category_id
24:           LEFT OUTER JOIN events ON races.event_id = events.id 
25:             WHERE races.category_id is not null 
26:               and place between 1 and 20
27:               and categories.id in (#{category_ids_for(race)})
28:               and (results.category_id is null or results.category_id in (#{category_ids_for(race)}))
29:               and (events.id in (#{event_ids}) or events.parent_id in (#{event_ids}))
30:          order by person_id
31:        }
32:     )
33:     remove_duplicate_results(results)
34:     results
35:   end

[Validate]