def self.time_unit ( unit_name, value_in_seconds )
value_in_seconds = value_in_seconds.to_f
unit = TimeUnit.new unit_name, value_in_seconds
@@time_units << unit
current_size = @@time_units.size
to_unit_name = "to_#{unit_name}"
to_unit_plural = "to_#{unit.plural}"
unless method_defined? to_unit_name
define_method(to_unit_name) { delta / value_in_seconds }
end
unless method_defined? to_unit_plural
alias_method to_unit_plural, to_unit_name
end
unless method_defined? unit_name
define_method(unit_name) do
next_unit = @@time_units[current_size]
modulo = (next_unit.nil?)? 1 : next_unit.value_in_seconds
((delta.abs % modulo) / value_in_seconds).to_i
end
end
unless method_defined? unit.plural
alias_method unit.plural, unit_name
end
unless Numeric.method_defined? unit_name
Numeric.send(:define_method, unit_name) { DTime.new(self * value_in_seconds) }
end
unless Numeric.method_defined? unit.plural
Numeric.send(:alias_method, unit.plural, unit_name)
end
end