Class: Koyomi::Week

Inherits:
Period show all
Defined in:
lib/koyomi/week.rb

Constant Summary collapse

DEFAULT_START =

——————–# constants

:mon
WDAYS =
[:sun, :mon, :tue, :wed, :thu, :fri, :sat]
DAYS =
WDAYS.size
START_RANGE =
(0..(DAYS - 1))

Instance Attribute Summary

Attributes inherited from Period

#range

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(date = nil, start_wday = nil) ⇒ Week

initialize method

Parameters:

  • date (Date) (defaults to: nil)

    optional, default use Date.today.

  • start_wday (Object) (defaults to: nil)

    optionail, default use Koyomi::Week::DEFAULT_START



76
77
78
79
80
# File 'lib/koyomi/week.rb', line 76

def initialize(date = nil, start_wday = nil)
  super()
  self.date = date||self.created_at
  self.start_wday = start_wday||DEFAULT_START
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (private)



131
132
133
134
135
136
137
138
# File 'lib/koyomi/week.rb', line 131

def method_missing(name, *args, &block)
  case
  when WDAYS.include?(name.to_s.to_sym)
    self.wday(name,*args, &block)
  else
    super
  end
end

Class Method Details

.ends?(date, start_wday = nil) ⇒ Boolean

week end?

Parameters:

  • date (Date)
  • start_wday (Object) (defaults to: nil)

    week start

Returns:

  • (Boolean)


64
65
66
67
# File 'lib/koyomi/week.rb', line 64

def self.ends?(date, start_wday = nil)
  start_wday ||= DEFAULT_START
  (date + 1).wday == self.windex(start_wday)
end

.starts?(date, start_wday = nil) ⇒ Boolean

week starts?

Parameters:

  • date (Date)
  • start_wday (Object) (defaults to: nil)

    week start

Returns:

  • (Boolean)


54
55
56
57
# File 'lib/koyomi/week.rb', line 54

def self.starts?(date, start_wday = nil)
  start_wday ||= DEFAULT_START
  (date).wday == self.windex(start_wday)
end

.wday_name(value) ⇒ Symbol

week day name

Parameters:

  • value (Object)

Returns:

  • (Symbol)


45
46
47
# File 'lib/koyomi/week.rb', line 45

def self.wday_name(value)
  WDAYS.at(self.windex(value))
end

.windex(value) ⇒ Integer

week index

Parameters:

  • value (Object)

Returns:

  • (Integer)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/koyomi/week.rb', line 24

def self.windex(value)
  case value
  when Numeric
    index = value
  when Date
    index = value.wday
  when String, Symbol
    value = value.to_s.downcase[0, 3].to_sym
    raise "Range invalid, required #{WDAYS}." unless WDAYS.include?(value)
    index = WDAYS.index(value)
  else
    index = value.to_s.to_i
  end
  raise "Range overflow, required (#{START_RANGE})." unless START_RANGE.cover?(index)
  index
end

Instance Method Details

#endsDate

end date

Returns:



102
103
104
# File 'lib/koyomi/week.rb', line 102

def ends
  self.range.last
end

#startsDate

start date

Returns:



95
96
97
# File 'lib/koyomi/week.rb', line 95

def starts
  self.range.first
end

#wday(wday_name) ⇒ Date

sepified week day

Parameters:

  • wday_name (Object)

Returns:



86
87
88
89
90
# File 'lib/koyomi/week.rb', line 86

def wday(wday_name)
  diff = self.class.windex(wday_name) - self.class.windex(self.start_wday)
  factor = diff + ((diff < 0) ? DAYS : 0)
  self.range.first + factor
end