Module: NaturalTime

Defined in:
lib/natural_time.rb,
lib/natural_time/version.rb

Overview

NaturalTime

NaturalTime outputs a duration in natural language.

Usage

Sentence

The to_sentence method will output the duration in time in natural language and formatted like a sentence.

NaturalTime.to_sentence(65)         #=> "1 minute and 5 seconds"

NaturalTime.to_sentence(120)        #=> "2 minutes"

NaturalTime.to_sentence(10000)      #=> "2 hours, 46 minutes, and 40 seconds"

String

The to_s command will separate the units with commas but with no "and":

NaturalTime.to_s(65)                #=> "1 minute, 5 seconds"

NaturalTime.to_s(10000)             #=> "2 hours, 46 minutes, 40 seconds"

Array

NaturalTime instances can also be output to an array with to_array:

NaturalTime.to_array(65)                #=> ["1 minutes", "5 seconds"]

NaturalTime.to_array(120)               #=> ["2 minutes"]

Precision

NaturalTime can return the amount of time to a specific precision. If all you want is the greatest unit:

NaturalTime.to_sentence(65, precision: 1)    #=> "1 minute"

NaturalTime.to_sentence(10000, precision: 1) #=> "2 hours"

NaturalTime.to_sentence(10000, precision: 2) #=> "2 hours and 46 minutes"

Distance

If you want to use NaturalTime to show an elapsed time and you don't care if it's in the past or the future, use the natural_time or to_sentence methods, or the to_array method if you need the units in an array.

If you're measuring distances that may be in the past or the future, the distance method will return a sentence indicating how long ago or in the future is your duration.

NaturalTime.distance(65)                      #=> "1 minute and 5 seconds from now"

NaturalTime.distance(-65)                     #=> "1 minute and 5 seconds ago"

It works with :precision too:

NaturalTime.distance(10000, precision: 1)     #=> "2 hours from now"

NaturalTime.distance(-10000, precision: 2)    #=> "2 hours and 46 minutes ago"

Constant Summary collapse

VERSION =
"0.4.1"

Class Method Summary collapse

Class Method Details

.distance(duration, precision: nil) ⇒ String

Return a natural-language representation of a distance in time, relative to now.

Examples:

If you're measuring distances that may be in the past or the future, the `distance`
method will return a sentence indicating how long ago or in the future is your duration.

NaturalTime.distance(65)                      #=> "1 minute and 5 seconds from now"

NaturalTime.distance(-65)                     #=> "1 minute and 5 seconds ago"
It works with `:precision` too:

NaturalTime.distance(10000, precision: 1)     #=> "2 hours from now"

NaturalTime.distance(-10000, precision: 2)    #=> "2 hours and 46 minutes ago"

Parameters:

  • duration (Integer)

    a duration in time

  • precision (Integer) (defaults to: nil)

    level of precision for the natural-language representation

Returns:

  • (String)


112
113
114
115
116
117
118
119
# File 'lib/natural_time.rb', line 112

def distance(duration, precision: nil)
  if duration < 1
    modifier = "ago"
  else
    modifier = "from now"
  end
  "#{to_sentence(duration, precision: precision)} #{modifier}"
end

.natural_time(duration, precision: nil) ⇒ String

Return a natural-language representation of a duration in time.

Examples:

NaturalTime.natural_time(65)         #=> "1 minute, 5 seconds"

NaturalTime.natural_time(120)        #=> "2 minutes"

NaturalTime.natural_time(10000)      #=> "2 hours, 46 minutes, 40 seconds"

Parameters:

  • duration (Integer)

    a duration in time

  • precision (Integer) (defaults to: nil)

    level of precision for the natural-language representation

Returns:

  • (String)


84
85
86
# File 'lib/natural_time.rb', line 84

def natural_time(duration, precision: nil)
  to_array(duration, precision: precision).join(", ")
end

.to_array(duration, precision: nil) ⇒ Array<String>

Return the natural-language elements of a duration in an array.

Examples:

NaturalTime.to_array(65)                #=> ["1 minutes", "5 seconds"]

NaturalTime.to_array(120)               #=> ["2 minutes"]

Parameters:

  • duration (Integer)

    a duration in time

  • precision (Integer) (defaults to: nil)

    level of precision for the natural-language representation

Returns:

  • (Array<String>)


171
172
173
# File 'lib/natural_time.rb', line 171

def to_array(duration, precision: nil)
  [elapsed_time(duration, precision: precision)].flatten
end

.to_sentence(duration, precision: nil) ⇒ String

Return the duration in time in natural-language and formatted like a sentence.

Examples:

NaturalTime.to_sentence(65)         #=> "1 minute and 5 seconds"

NaturalTime.to_sentence(120)        #=> "2 minutes"

NaturalTime.to_sentence(10000)      #=> "2 hours, 46 minutes, and 40 seconds"

Parameters:

  • duration (Integer)

    a duration in time

  • precision (Integer) (defaults to: nil)

    level of precision for the natural-language representation

Returns:

  • (String)


154
155
156
# File 'lib/natural_time.rb', line 154

def to_sentence(duration, precision: nil)
  to_array(duration, precision: precision).to_sentence
end

.to_string(duration, precision: nil) ⇒ String

Return a natural-language representation of a duration in time, separating the units with commas but with no "and".

Examples:

NaturalTime.to_s(65)                #=> "1 minute, 5 seconds"

NaturalTime.to_s(10000)             #=> "2 hours, 46 minutes, 40 seconds"

Parameters:

  • duration (Integer)

    a duration in time

  • precision (Integer) (defaults to: nil)

    level of precision for the natural-language representation

Returns:

  • (String)


135
136
137
# File 'lib/natural_time.rb', line 135

def to_string(duration, precision: nil)
  natural_time(duration, precision: precision)
end