Class: Tempus

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

Overview

Class to manipulate efficiently time

Example:

>> horas = Tempus.new()

> #<Tempus:0xb7016b40 @value=0.0>

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#valueObject

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

#convertObject



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

#hoursObject

Retorna o número de horas



81
82
83
# File 'lib/tempus.rb', line 81

def hours
  convert[0]
end

#humanObject



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

#inspectObject



166
167
168
# File 'lib/tempus.rb', line 166

def inspect
  "<Tempus seconds=#{value}, formated=#{to_s}>"
end

#minutesObject

Retorna o número de minutos



71
72
73
# File 'lib/tempus.rb', line 71

def minutes
  convert[1]
end

#negative?Boolean

Returns:

  • (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

Returns:

  • (Boolean)


158
159
160
# File 'lib/tempus.rb', line 158

def positive?
  to_i >= 0
end

#secondsObject

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_iObject



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_stringObject



85
86
87
# File 'lib/tempus.rb', line 85

def to_string
  self.to_s
end

#to_xls_timeObject



108
109
110
# File 'lib/tempus.rb', line 108

def to_xls_time
  self.value_in_days
end

#value_in_daysObject



104
105
106
# File 'lib/tempus.rb', line 104

def value_in_days
   @value.to_i / 1.day.to_f
end

#value_in_hoursObject

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_minutesObject

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_secondsObject

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