Class: GBWorkDay::WorkWeek

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(work_days = 7, week_start = 1) ⇒ WorkWeek

Returns a new instance of WorkWeek.

Parameters:

  • work_days (#to_i) (defaults to: 7)

    Amount of working days in a week. Default value is 7.

  • week_start (#to_i) (defaults to: 1)

    Number of a week day, when work starts. Default value is 1 corresponding to Monday

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/gb_work_day/work_week.rb', line 7

def initialize(work_days=7, week_start=1)
  work_days = work_days.to_i
  week_start = week_start.to_i
  raise ArgumentError, 'Work days have to be between 0 and 7!' unless work_days >= 0 && work_days <= 7
  @work_days_per_week = work_days
  @week_start = week_start % 7
  @free_days_per_week = 7 - @work_days_per_week
  @work_days = []
  @work_days_per_week.times do
    day = week_start % 7
    @work_days << (day != 0 ? day : 7)
    week_start += 1
  end
  @work_days.sort!
  @free_days = (1..7).to_a - @work_days
end

Instance Attribute Details

#free_daysObject (readonly)

Returns the value of attribute free_days.



3
4
5
# File 'lib/gb_work_day/work_week.rb', line 3

def free_days
  @free_days
end

#free_days_per_weekObject (readonly)

Returns the value of attribute free_days_per_week.



3
4
5
# File 'lib/gb_work_day/work_week.rb', line 3

def free_days_per_week
  @free_days_per_week
end

#week_startObject (readonly)

Returns the value of attribute week_start.



3
4
5
# File 'lib/gb_work_day/work_week.rb', line 3

def week_start
  @week_start
end

#work_daysObject (readonly)

Returns the value of attribute work_days.



3
4
5
# File 'lib/gb_work_day/work_week.rb', line 3

def work_days
  @work_days
end

#work_days_per_weekObject (readonly)

Returns the value of attribute work_days_per_week.



3
4
5
# File 'lib/gb_work_day/work_week.rb', line 3

def work_days_per_week
  @work_days_per_week
end

Class Method Details

.currentObject



49
50
51
# File 'lib/gb_work_day/work_week.rb', line 49

def current
  Thread.current[:working_week] ||= self.new
end

.current=(new_week) ⇒ Object



53
54
55
# File 'lib/gb_work_day/work_week.rb', line 53

def current=(new_week)
  Thread.current[:working_week] = new_week if WorkWeek === new_week
end

Instance Method Details

#==(other) ⇒ Object

:nodoc:



40
41
42
# File 'lib/gb_work_day/work_week.rb', line 40

def ==(other) # :nodoc:
  work_days_per_week == other.work_days_per_week && week_start == other.week_start
end

#eql?(other) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


44
45
46
# File 'lib/gb_work_day/work_week.rb', line 44

def eql?(other) # :nodoc:
  work_days_per_week.eql?(other.work_days_per_week) && week_start.eql?(other.week_start)
end

#free_day?(day) ⇒ Boolean

Check if given day is a work day

Parameters:

Returns:

  • (Boolean)


34
35
36
37
38
# File 'lib/gb_work_day/work_week.rb', line 34

def free_day?(day)
  week_day = day.wday
  week_day = 7 if week_day == 0
  free_days.include? week_day
end

#work_day?(day) ⇒ Boolean

Check if given day is a work day

Parameters:

Returns:

  • (Boolean)


26
27
28
29
30
# File 'lib/gb_work_day/work_week.rb', line 26

def work_day?(day)
  week_day = day.wday
  week_day = 7 if week_day == 0
  work_days.include? week_day
end