Class OregonJuniorCyclocrossSeries
In: app/models/competitions/oregon_junior_cyclocross_series.rb
Parent: Competition

Methods

Public Instance methods

By default, does nothing. Useful to apply rule like:

  • Any results after the first four only get 50-point bonus
  • Drop lowest-scoring result

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 35
35:   def after_create_competition_results_for(race)
36:     race.results.each do |result|
37:       # Don't bother sorting scores unless we need to drop some
38:       if result.scores.size > 6
39:         result.scores.sort! { |x, y| y.points <=> x.points }
40:         lowest_scores = result.scores[6, 2]
41:         lowest_scores.each do |lowest_score|
42:           result.scores.destroy(lowest_score)
43:         end
44:         # Rails destroys Score in database, but doesn't update the current association
45:         result.scores(true)
46:       end
47:     
48:       if preliminary?(result)
49:         result.preliminary = true       
50:       end    
51:     end
52:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 54
54:   def create_races
55:     [ "Boys 10-12", "Girls 10-12", "Boys 13-14", "Girls 13-14", "Boys 15-16", "Girls 15-16", "Boys 17-18", "Girls 17-18" ].each do |category|
56:       races.create! :category => Category.find_or_create_by_name(category)
57:     end
58:   end

[Source]

   # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 2
2:   def friendly_name
3:     "Oregon Junior Cyclocross Series"
4:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 28
28:   def members_only?
29:     false
30:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 60
60:   def minimum_events
61:     4
62:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 24
24:   def point_schedule
25:     [ 0, 30, 28, 26, 24, 22, 20, 18, 17, 16, 15, 14, 13, 12, 11, 10 ]
26:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 85
85:   def preliminary?(result)
86:     minimum_events && parent.children_with_results.size > minimum_events && !parent.completed? && !raced_minimum_events?(result.person, result.race)
87:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 64
64:   def raced_minimum_events?(person, race)
65:     return true if minimum_events.nil?
66:     return false if parent.children.empty? || person.nil?
67: 
68:     event_ids = parent.children.collect(&:id).join(", ")
69:     category_ids = category_ids_for(race)
70: 
71:     count = Result.count_by_sql(
72:       %Q{ SELECT count(*) FROM results  
73:           JOIN races ON races.id = results.race_id 
74:           JOIN categories ON categories.id = races.category_id 
75:           JOIN events ON races.event_id = events.id 
76:           WHERE categories.id in (#{category_ids})
77:               and events.id in (#{event_ids})
78:               and results.person_id = #{person.id}
79:        }
80:     )
81:     count >= minimum_events
82:   end

[Source]

    # File app/models/competitions/oregon_junior_cyclocross_series.rb, line 6
 6:   def source_results(race)
 7:     return [] if source_events.empty?
 8:     
 9:     Result.find_by_sql(
10:       %Q{ SELECT results.* FROM results  
11:           LEFT JOIN races ON races.id = results.race_id 
12:           LEFT JOIN categories ON categories.id = races.category_id 
13:           LEFT JOIN events ON races.event_id = events.id 
14:           WHERE events.id in (#{source_events.map(&:id)})
15:             and (place > 0 or place is null or place = '')
16:             and categories.id in (#{category_ids_for(race)})
17:             and events.type = "SingleDayEvent"
18:             and events.date between '#{year}-01-01' and '#{year}-12-31'
19:           order by person_id
20:        }
21:     )
22:   end

[Validate]