Class: HumanDuration::Duration

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

Overview

docs to do

Class Method Summary collapse

Class Method Details

.add_time(value, name, plural = true) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/human_duration.rb', line 58

def self.add_time(value, name, plural = true)
    return if value < 1 && $type != 'full'

    $output_buffer << if plural
                          format('%<value>s %<name>s%<plural>s', value: value, name: name, plural: pluralize(value))
                      else
                          format('%<value>s %<name>s', value: value, name: name)
                      end
    $item_count -= 1
    $output_buffer << comma_or_not($item_count)
end

.add_time_longObject



87
88
89
90
91
# File 'lib/human_duration.rb', line 87

def self.add_time_long
    $time_values.reverse_each do |name, value|
        add_time(value, name)
    end
end

.add_time_shortObject



93
94
95
96
97
# File 'lib/human_duration.rb', line 93

def self.add_time_short
    $time_values.reverse_each do |name, value|
        add_time(value, SHORT_NAME_MAP[name], false)
    end
end

.comma_or_not(count) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/human_duration.rb', line 50

def self.comma_or_not(count)
    return ', ' if count > 1
    return ' & ' if count == 1 && $type == 'short'
    return ' and ' if count == 1

    ''
end

.count_itemsObject



81
82
83
84
85
# File 'lib/human_duration.rb', line 81

def self.count_items
    $time_values.each do |_name, value|
        $item_count += 1 if value > 0 || $type == 'full'
    end
end

.display_type(type = 'compact') ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
# File 'lib/human_duration.rb', line 19

def self.display_type(type = 'compact')
    raise ArgumentError.new('Invalid type - Valid options are:- compact, short and full') unless VALID_TYPES.include? type

    $type = type
end

.generate_outputObject



99
100
101
102
103
104
105
# File 'lib/human_duration.rb', line 99

def self.generate_output
    if $type == 'short'
        add_time_short
    else
        add_time_long
    end
end

.human_duration(seconds) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/human_duration.rb', line 25

def self.human_duration(seconds)
    reset

    return 'negative' if seconds < 0
    return 'now' if seconds.zero?

    split_seconds(seconds)
    count_items
    generate_output

    $output_buffer
end

.pluralize(number) ⇒ Object



44
45
46
47
48
# File 'lib/human_duration.rb', line 44

def self.pluralize(number)
    return 's' unless number == 1

    ''
end

.resetObject



38
39
40
41
42
# File 'lib/human_duration.rb', line 38

def self.reset
    $time_values = {}
    $item_count = 0
    $output_buffer = ''
end

.split_seconds(seconds) ⇒ Object



70
71
72
73
74
75
76
77
78
79
# File 'lib/human_duration.rb', line 70

def self.split_seconds(seconds)
    SPLIT_TYPES.map do |count, name|
        if seconds > 0
            seconds, n = seconds.divmod(count)
            $time_values[name] = n
        else
            $time_values[name] = 0
        end
    end
end