Module Names::Nameable
In: app/models/names/nameable.rb

See Name

Methods

Public Class methods

[Source]

   # 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

Public Instance methods

Remember names from previous years. Keeps the correct name on old results without creating additional teams. This is a bit naive

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]