Class: Tempus
- Inherits:
-
Object
- Object
- Tempus
- Defined in:
- lib/tempus.rb
Overview
Class to manipulate efficiently time
Example:
>> horas = Tempus.new()
> #<Tempus:0xb7016b40 @value=0.0>
Instance Attribute Summary collapse
-
#value ⇒ Object
Returns the value of attribute value.
Instance Method Summary collapse
-
#+(v) ⇒ Object
Soma valores ao objeto.
-
#-(v) ⇒ Object
Subtrai valores ao objeto.
- #==(object) ⇒ Object
- #convert ⇒ Object
-
#hours ⇒ Object
Retorna o número de horas.
- #human ⇒ Object
-
#initialize(value = 0, count_all_time = false) ⇒ Tempus
constructor
A new instance of Tempus.
- #inspect ⇒ Object
-
#minutes ⇒ Object
Retorna o número de minutos.
- #negative? ⇒ Boolean
- #operation(value, operation, other_value) ⇒ Object
- #positive? ⇒ Boolean
-
#seconds ⇒ Object
Retorna o número de segundos.
-
#set(value = 0, count_all_time = false) ⇒ Object
Atribui o valor para o objeto Os valores podem ser passados em inteiros/floats ou Time.
- #to_i ⇒ Object
-
#to_s(format = "%H:%M:%S") ⇒ Object
Formata o horário para HH:MM:SS .
- #to_string ⇒ Object
- #to_xls_time ⇒ Object
- #value_in_days ⇒ Object
-
#value_in_hours ⇒ Object
Criando método para conversão para horas.
-
#value_in_minutes ⇒ Object
Criando método para conversão para horas.
-
#value_in_seconds ⇒ Object
Criando método para conversão para segundos.
Constructor Details
#initialize(value = 0, count_all_time = false) ⇒ Tempus
Returns a new instance of Tempus.
10 11 12 |
# File 'lib/tempus.rb', line 10 def initialize(value=0,count_all_time=false) set(value, count_all_time) end |
Instance Attribute Details
#value ⇒ Object
Returns the value of attribute value.
8 9 10 |
# File 'lib/tempus.rb', line 8 def value @value end |
Instance Method Details
#+(v) ⇒ Object
Soma valores ao objeto
113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/tempus.rb', line 113 def + v if(v.class == Tempus) Tempus.new(@value + v.value_in_seconds) elsif(v.class == NilClass) self elsif(v.class == String) Tempus.new(@value + v.to_tempus.value_in_seconds) else Tempus.new(@value + v) end end |
#-(v) ⇒ Object
Subtrai valores ao objeto
126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/tempus.rb', line 126 def - v if(v.class == Tempus) Tempus.new(@value - v.value_in_seconds) elsif(v.class == NilClass) self elsif(v.class == String) Tempus.new(@value - v.to_tempus.value_in_seconds) else Tempus.new(@value - v) end end |
#==(object) ⇒ Object
170 171 172 173 174 175 176 |
# File 'lib/tempus.rb', line 170 def ==(object) if object.is_a?(Tempus) value == object.value else false end end |
#convert ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/tempus.rb', line 61 def convert valor = @value.to_f h = (valor.to_f / 1.hour.to_f ).to_i valor = valor.to_f - h.hours.to_f m = (valor.to_f / 1.minute.to_f).to_i s = (valor.to_f - m.minutes.to_f).to_i return h,m,s end |
#hours ⇒ Object
Retorna o número de horas
81 82 83 |
# File 'lib/tempus.rb', line 81 def hours convert[0] end |
#human ⇒ Object
162 163 164 |
# File 'lib/tempus.rb', line 162 def human "#{"menos " if negative?}#{hours.abs} horas #{minutes.abs} minutos e #{seconds.abs} segundos" end |
#inspect ⇒ Object
166 167 168 |
# File 'lib/tempus.rb', line 166 def inspect "<Tempus seconds=#{value}, formated=#{to_s}>" end |
#minutes ⇒ Object
Retorna o número de minutos
71 72 73 |
# File 'lib/tempus.rb', line 71 def minutes convert[1] end |
#negative? ⇒ Boolean
154 155 156 |
# File 'lib/tempus.rb', line 154 def negative? to_i < 0 end |
#operation(value, operation, other_value) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/tempus.rb', line 138 def operation(value, operation, other_value) if(value.class == Tempus) value = Tempus.new(@value - v.value_in_seconds) elsif(value.class == NilClass) self elsif(v.class == String) Tempus.new(@value - v.to_tempus.value_in_seconds) else Tempus.new(@value - v) end end |
#positive? ⇒ Boolean
158 159 160 |
# File 'lib/tempus.rb', line 158 def positive? to_i >= 0 end |
#seconds ⇒ Object
Retorna o número de segundos
76 77 78 |
# File 'lib/tempus.rb', line 76 def seconds convert[2] end |
#set(value = 0, count_all_time = false) ⇒ Object
Atribui o valor para o objeto Os valores podem ser passados em inteiros/floats ou Time. O parâmetro count_all_time se falso serve para transformar apenas a hora de um objeto da classe Time, desconsiderando a data.
17 18 19 20 21 22 23 |
# File 'lib/tempus.rb', line 17 def set(value=0, count_all_time=false) if(value.class == Time && !count_all_time) @value = (value - value.beginning_of_day).to_f else @value = value.to_f end end |
#to_i ⇒ Object
150 151 152 |
# File 'lib/tempus.rb', line 150 def to_i value_in_seconds end |
#to_s(format = "%H:%M:%S") ⇒ Object
Formata o horário para HH:MM:SS .
Exemplo:
>> horas = Tempus.new(30.hours + 5.minutes + 3.seconds)
> #<Tempus:0xb6e4b860 @value=108303.0>
>> horas.to_s
> “30:05:03”
>> horas = Tempus.new(-30.hours - 5.minutes - 3.seconds)
> #<Tempus:0xb6e4b860 @value=-108303.0>
>> horas.to_s
> “-30:05:03”
>> horas.to_s(“%H:%M”)
> “-30:05”
>> horas.to_s(“%H*%M*%S”)
> “-30*05*03”
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/tempus.rb', line 39 def to_s(format="%H:%M:%S") h, m, s = ("%02d" % hours.to_i.abs), ("%02d" % minutes.to_i.abs), ("%02d" % seconds.to_i.abs) text = format.to_s [ ["%h", "%H"], ["%m", "%M"], ["%s", "%S"], ["%hh", "%H"], ["%mm", "%M"], ["%ss", "%S"], ["%H", h], ["%HH", h], ["%M", m], ["%MM", m], ["%S", s], ["%SS", s] ].each{|string, replace|text.gsub!(string,replace) } return (negative? ? "-" : "") + text unless(text=="") text end |
#to_string ⇒ Object
85 86 87 |
# File 'lib/tempus.rb', line 85 def to_string self.to_s end |
#to_xls_time ⇒ Object
108 109 110 |
# File 'lib/tempus.rb', line 108 def to_xls_time self.value_in_days end |
#value_in_days ⇒ Object
104 105 106 |
# File 'lib/tempus.rb', line 104 def value_in_days @value.to_i / 1.day.to_f end |
#value_in_hours ⇒ Object
Criando método para conversão para horas.
95 96 97 |
# File 'lib/tempus.rb', line 95 def value_in_hours @value.to_i / 1.hour.to_f end |
#value_in_minutes ⇒ Object
Criando método para conversão para horas.
100 101 102 |
# File 'lib/tempus.rb', line 100 def value_in_minutes @value.to_i / 1.minute.to_f end |
#value_in_seconds ⇒ Object
Criando método para conversão para segundos.
90 91 92 |
# File 'lib/tempus.rb', line 90 def value_in_seconds @value.to_i end |