| 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
# 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
# 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
# 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
# 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
# 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
# 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.
# 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
# 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