Class: Time

Inherits:
Object show all
Defined in:
lib/doing/good.rb,
lib/doing/time.rb

Overview

Date helpers

Instance Method Summary collapse

Instance Method Details

#good?Boolean

Tests if object is nil

Returns:

  • (Boolean)

    true if object is defined and has content



33
34
35
# File 'lib/doing/good.rb', line 33

def good?
  !nil?
end

#humanize(seconds) ⇒ String

Format seconds as a natural language string

Parameters:

  • seconds (Integer)

    number of seconds

Returns:

  • (String)

    Date formatted as "X days, X hours, X minutes, X seconds"



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/doing/time.rb', line 31

def humanize(seconds)
  s = seconds
  m = (s / 60).floor
  s = (s % 60).floor
  h = (m / 60).floor
  m = (m % 60).floor
  d = (h / 24).floor
  h = h % 24

  output = []
  output.push("#{d} #{'day'.to_p(d)}") if d.positive?
  output.push("#{h} #{'hour'.to_p(h)}") if h.positive?
  output.push("#{m} #{'minute'.to_p(m)}") if m.positive?
  output.push("#{s} #{'second'.to_p(s)}") if s.positive?
  output.join(', ')
end

#relative_dateString

Format time as a relative date. Dates from today get just a time, from the last week get a time and day, from the last year get a month/day/time, and older entries get month/day/year/time

Returns:



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/doing/time.rb', line 13

def relative_date
  if self > Date.today.to_time
    strftime(Doing.setting('shortdate_format.today', '%_I:%M%P', exact: true))
  elsif self > (Date.today - 6).to_time
    strftime(Doing.setting('shortdate_format.this_week', '%a %_I:%M%P', exact: true))
  elsif year == Date.today.year || (year + 1 == Date.today.year && month > Date.today.month)
    strftime(Doing.setting('shortdate_format.this_month', '%m/%d %_I:%M%P', exact: true))
  else
    strftime(Doing.setting('shortdate_format.older', '%m/%d/%y %_I:%M%P', exact: true))
  end
end

#time_agoString

Format date as "X hours ago"

Returns:



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/doing/time.rb', line 53

def time_ago
  if self > Date.today.to_time
    output = humanize(Time.now - self)
    "#{output} ago"
  elsif self > (Date.today - 1).to_time
    "Yesterday at #{strftime('%_I:%M:%S%P')}"
  elsif self > (Date.today - 6).to_time
    strftime('%a %I:%M:%S%P')
  elsif self.year == Date.today.year
    strftime('%m/%d %I:%M:%S%P')
  else
    strftime('%m/%d/%Y %I:%M:%S%P')
  end
end