Class WeeklySeries
In: app/models/weekly_series.rb
Parent: Series

Methods

Constants

DAYS_OF_WEEK = ['Su', 'M', 'Tu', 'W', 'Th', 'F', 'Sa'] unless defined?(DAYS_OF_WEEK)   TODO Is this duplicated from Ruby core and standard lib?

Public Instance methods

0-based. Doesn‘t handle multiple days of the week. Method names here are confusing.

[Source]

    # File app/models/weekly_series.rb, line 7
 7:   def day_of_week
 8:     if children.empty?
 9:       date.wday
10:     else
11:       children.sort_by(&:date).first.date.wday
12:     end
13:   end

Array of Integers. Sunday is 0. Ordered. Duplicates removed. Caches result, even if date_range changes, and doesn‘t notice database changes.

[Source]

    # File app/models/weekly_series.rb, line 35
35:   def days_of_week(date_range, reload = false)
36:     if reload || @days_of_week.nil?
37:       @days_of_week = WeeklySeries.connection.select_values(%Q{
38:           select distinct (DAYOFWEEK(date) - 1) as day_of_week 
39:           from events 
40:           where parent_id=#{self.id} and date between '#{date_range.begin.to_s(:db)}' and '#{date_range.end.to_s(:db)}'
41:           order by day_of_week}
42:       )
43:       @days_of_week.map! { |day| day.to_i }
44:     end
45:     @days_of_week
46:   end

Formatted list. Examples:

  • Tuesday PIR: Tu
  • Track classes: M, W, F

[Source]

    # File app/models/weekly_series.rb, line 22
22:   def days_of_week_as_string(date_range, reload = false)
23:     case days_of_week(date_range, reload).size
24:     when 0
25:       ''
26:     when 1
27:       Time::RFC2822_DAY_NAME[days_of_week(false).first]
28:     else
29:       days_of_week(false).collect { |day| DAYS_OF_WEEK[day] }.join('/')
30:     end
31:   end

[Source]

    # File app/models/weekly_series.rb, line 15
15:   def earliest_day_of_week(date_range, reload = false)
16:     days_of_week(date_range, reload).min || -1
17:   end

[Source]

    # File app/models/weekly_series.rb, line 48
48:   def to_s
49:     "<#{self.class} #{id} #{discipline} #{name} #{date} #{children.size}>"
50:   end

[Validate]