Module: TimeReceive::ClassMethods

Included in:
TimeReceive
Defined in:
lib/time_receive.rb

Instance Method Summary collapse

Instance Method Details

#add_time_period(time, period) ⇒ Object

Raises:

  • (ArgumentError)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/time_receive.rb', line 75

def add_time_period(time, period)
  raise ArgumentError, "Invalid time: #{time}" unless time.is_a?(Time)

  case period
  when :hours
    time + 3600
  when :minutes
    time + 60
  when :days
    time + 86_400
  else
    raise ArgumentError, "Unsupported period: #{period}"
  end
end

#calculate_elapsed_time(start_time, end_time) ⇒ Object

Raises:

  • (ArgumentError)


90
91
92
93
94
95
96
97
98
99
# File 'lib/time_receive.rb', line 90

def calculate_elapsed_time(start_time, end_time)
  raise ArgumentError, "Invalid start_time: #{start_time}" unless start_time.is_a?(Time)
  raise ArgumentError, "Invalid end_time: #{end_time}" unless end_time.is_a?(Time)

  elapsed_seconds = (end_time - start_time).to_i
  hours = elapsed_seconds / 3600
  minutes = (elapsed_seconds % 3600) / 60

  "#{hours} hours and #{minutes} minutes"
end

#days_until(target_date) ⇒ Object

Raises:

  • (ArgumentError)


69
70
71
72
73
# File 'lib/time_receive.rb', line 69

def days_until(target_date)
  raise ArgumentError, "Invalid target_date: #{target_date}" unless target_date.is_a?(Date)

  (target_date - Date.today).to_i
end

#format_remaining_time(remaining_seconds) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/time_receive.rb', line 53

def format_remaining_time(remaining_seconds)
  hours = remaining_seconds / 3600
  minutes = (remaining_seconds % 3600) / 60
  seconds = remaining_seconds % 60

  hours_str = hours.to_s.rjust(2, "0")
  minutes_str = minutes.to_s.rjust(2, "0")
  seconds_str = seconds.to_s.rjust(2, "0")

  "#{hours_str}:#{minutes_str}:#{seconds_str}"
end

#now(format_string = nil) ⇒ Object



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

def now(format_string = nil)
  formatter = TimeFormatter.new(format_string || "%Y-%m-%d %H:%M:%S")
  formatter.format(Time.now)
end

#parse_time(time_string, format_string) ⇒ Object



27
28
29
30
31
# File 'lib/time_receive.rb', line 27

def parse_time(time_string, format_string)
  Time.strptime(time_string, format_string)
rescue ArgumentError
  raise TimeReceiveError, "Invalid time string: #{time_string}"
end

#timer(user_time, &block) ⇒ Object

Raises:

  • (ArgumentError)


33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/time_receive.rb', line 33

def timer(user_time, &block)
  raise ArgumentError, "Invalid user_time: #{user_time}" unless user_time.is_a?(Time)

  remaining_seconds = (user_time - Time.now).to_i

  loop do
    remaining_time_str = format_remaining_time(remaining_seconds)

    puts "Time until deadline: #{remaining_time_str}"

    sleep 1 / 1.9

    remaining_seconds -= 1

    break if remaining_seconds <= 0
  end

  block.call if block_given?
end

#today?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/time_receive.rb', line 65

def today?
  Date.today == Time.now.to_date
end