| Module | Names::Nameable |
| In: |
app/models/names/nameable.rb
|
# File app/models/names/nameable.rb, line 4 4: def self.included(base) 5: base.before_save :add_name 6: base.has_many :names, :order => "year", :as => :nameable 7: end
Remember names from previous years. Keeps the correct name on old results without creating additional teams. This is a bit naive
# File app/models/names/nameable.rb, line 29
29: def add_name
30: last_year = Date.today.year - 1
31: if @old_name.present? && results_before_this_year? && self.names.none? { |name| name.year == last_year }
32: name = names.build(:name => @old_name, :year => last_year)
33: if self.respond_to?(:first_name)
34: name.first_name = first_name_was
35: end
36: if self.respond_to?(:last_name)
37: name.last_name = last_name_was
38: end
39: name.save!
40: end
41: end
# File app/models/names/nameable.rb, line 9
9: def name(date_or_year = nil)
10: name_record_for_year(parse_year(date_or_year)).try(:name) || read_attribute(:name)
11: end
Returns Name record, not String
# File app/models/names/nameable.rb, line 14
14: def name_record_for_year(year)
15: return nil if year.blank? || year >= Date.today.year || names.none?
16:
17: # Assume names always sorted
18: if year <= names.first.year
19: return names.first
20: elsif year >= names.last.year
21: return names.last
22: end
23:
24: names.detect { |n| n.year == year }
25: end
# File app/models/names/nameable.rb, line 43
43: def results_before_this_year?
44: # Exists? doesn't support joins
45: count = self.class.count_by_sql([%Q{
46: select results.id from #{self.class.table_name}, results, races, events
47: where #{self.class.table_name}.id = ? and #{self.class.table_name}.id = results.#{self.class.name.downcase}_id
48: and results.race_id = races.id
49: and races.event_id = events.id and events.date < ? limit 1
50: }, id, Date.today.beginning_of_year])
51: count > 0
52: end