Class: WeekPeriod

Inherits:
Object
  • Object
show all
Defined in:
lib/week_period.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(week_number:, year:) ⇒ WeekPeriod

Returns a new instance of WeekPeriod.



11
12
13
14
15
16
17
# File 'lib/week_period.rb', line 11

def initialize(week_number:, year:)
  @week_number = week_number.to_i
  @year = year.to_i
  validate_week_number
  validate_year
  @date_on_first_day_of_week = Date.commercial(@year, @week_number)
end

Instance Attribute Details

#date_on_first_day_of_weekObject (readonly)

Returns the value of attribute date_on_first_day_of_week.



4
5
6
# File 'lib/week_period.rb', line 4

def date_on_first_day_of_week
  @date_on_first_day_of_week
end

#week_numberObject (readonly)

Returns the value of attribute week_number.



4
5
6
# File 'lib/week_period.rb', line 4

def week_number
  @week_number
end

#yearObject (readonly)

Returns the value of attribute year.



4
5
6
# File 'lib/week_period.rb', line 4

def year
  @year
end

Class Method Details

.from_date(date) ⇒ Object



6
7
8
9
# File 'lib/week_period.rb', line 6

def self.from_date(date)
  date = date.to_date
  new(week_number: date.cweek, year: date.cwyear)
end

Instance Method Details

#last_day_of_weekObject

The date of last day of the week (a Sunday)



37
38
39
# File 'lib/week_period.rb', line 37

def last_day_of_week
  @last_day_of_week ||= (date_on_first_day_of_week + 1.week - 1.minute).to_date
end

#nextObject



19
20
21
# File 'lib/week_period.rb', line 19

def next
  self.class.from_date(date_on_first_day_of_week + 1.week)
end

#previousObject



23
24
25
# File 'lib/week_period.rb', line 23

def previous
  self.class.from_date(date_on_first_day_of_week - 1.week)
end

#to_aObject



27
28
29
# File 'lib/week_period.rb', line 27

def to_a
  [week_number, year]
end

#to_hObject



51
52
53
54
55
56
# File 'lib/week_period.rb', line 51

def to_h
  {
    year: year,
    week_number: week_number
  }
end

#to_sObject



31
32
33
34
# File 'lib/week_period.rb', line 31

def to_s
  "#{I18n.l(date_on_first_day_of_week, format: :long)} " \
  "to #{I18n.l(last_day_of_week, format: :long)}"
end

#validate_week_numberObject



41
42
43
44
45
# File 'lib/week_period.rb', line 41

def validate_week_number
  if week_number < 1 || week_number > 53
    raise(ArgumentError, "invalid date: week_number must be 1-53")
  end
end

#validate_yearObject

Raises:

  • (ArgumentError)


47
48
49
# File 'lib/week_period.rb', line 47

def validate_year
  raise(ArgumentError, "invalid date year must be >= 2000") if year <= 2000
end