Class: Date

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

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.closest_wday(wday) ⇒ Object



104
105
106
107
108
109
# File 'lib/timecop/time_extensions.rb', line 104

def closest_wday(wday)
  today = Date.today
  result = today - today.wday
  result += 1 until wday == result.wday
  result
end

.mock_dateObject



33
34
35
# File 'lib/timecop/time_extensions.rb', line 33

def mock_date
  mocked_time_stack_item.nil? ? nil : mocked_time_stack_item.date(self)
end

.mocked_time_stack_itemObject



100
101
102
# File 'lib/timecop/time_extensions.rb', line 100

def mocked_time_stack_item
  Timecop.top_stack_item
end

.parse_with_mock_date(*args) ⇒ Object Also known as: parse



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/timecop/time_extensions.rb', line 78

def parse_with_mock_date(*args)
  parsed_date = parse_without_mock_date(*args)
  return parsed_date unless mocked_time_stack_item
  date_hash = Date._parse(*args)

  case
  when date_hash[:year] && date_hash[:mon]
    parsed_date
  when date_hash[:mon] && date_hash[:mday]
    Date.new(mocked_time_stack_item.year, date_hash[:mon], date_hash[:mday])
  when date_hash[:mday]
    Date.new(mocked_time_stack_item.year, mocked_time_stack_item.month, date_hash[:mday])
  when date_hash[:wday]
    closest_wday(date_hash[:wday])
  else
    parsed_date + mocked_time_stack_item.travel_offset_days
  end
end

.strptime_with_mock_date(str = '-4712-01-01', fmt = '%F', start = Date::ITALY) ⇒ Object Also known as: strptime



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/timecop/time_extensions.rb', line 47

def strptime_with_mock_date(str = '-4712-01-01', fmt = '%F', start = Date::ITALY)
  #If date is not valid the following line raises
  Date.strptime_without_mock_date(str, fmt, start)

  d = Date._strptime(str, fmt)
  now = Time.now.to_date
  year = d[:year] || now.year
  mon = d[:mon] || now.mon
  if d.keys == [:year]
    Date.new(year, 1, 1, start)
  elsif d[:mday]
    Date.new(year, mon, d[:mday], start)
  elsif d[:wday]
    Date.new(year, mon, now.mday, start) + (d[:wday] - now.wday)
  elsif d[:yday]
    Date.new(year, 1, 1, start).next_day(d[:yday] - 1)
  elsif d[:cwyear] && d[:cweek]
    if d[:cwday]
      Date.commercial(d[:cwyear], d[:cweek], d[:cwday], start)
    else
      Date.commercial(d[:cwyear], d[:cweek], 1, start)
    end
  elsif d[:seconds]
    Time.at(d[:seconds]).to_date
  else
    Date.new(year, mon, 1, start)
  end
end

.today_with_mock_dateObject Also known as: today



39
40
41
# File 'lib/timecop/time_extensions.rb', line 39

def today_with_mock_date
  mock_date || today_without_mock_date
end