class GrpcKit::GrpcTime

Constants

MAX

Public Class Methods

new(value) click to toggle source

@param value [String,Integer]

# File lib/grpc_kit/grpc_time.rb, line 8
def initialize(value)
  @unit = nil
  @value = nil

  if value.is_a?(String)
    from_string(value)
  elsif value.is_a?(Integer)
    from_integer(value)
  else
    raise ArgumentError, "unsupported value: #{value}, class=#{value.class}"
  end
end

Public Instance Methods

to_absolute_time() click to toggle source

@return [Time]

# File lib/grpc_kit/grpc_time.rb, line 47
def to_absolute_time
  case @unit
  when 'S'
    Time.now + @value
  when 'H'
    Time.now + @value * 60 * 60
  when 'M'
    Time.now + @value * 60
  when 'm'
    t = Time.now
    Time.at(t.to_i, (t.nsec * (10**-3)) + (@value * 10**3))
  when 'u'
    t = Time.now
    Time.at(t.to_i, (t.nsec * (10**-3)) + @value)
  when 'n'
    t = Time.now
    Time.at(t.to_i, (t.nsec * (10**-3)) + (@value * 10**-3))
  else
    raise 'This case would never happen'
  end
end
to_f() click to toggle source

@return [Float]

# File lib/grpc_kit/grpc_time.rb, line 22
def to_f
  case @unit
  when 'S'
    @value * 1.0
  when 'H'
    @value * 60 * 60.0
  when 'M'
    @value * 60.0
  when 'm'
    @value * 10**-3
  when 'u'
    @value * 10**-6
  when 'n'
    @value * 10**-9
  else
    raise 'This case would never happen'
  end
end
to_s() click to toggle source

@return [String]

# File lib/grpc_kit/grpc_time.rb, line 42
def to_s
  "#{@value}#{@unit}"
end

Private Instance Methods

from_integer(value) click to toggle source
# File lib/grpc_kit/grpc_time.rb, line 71
def from_integer(value)
  @value = value < 0 ? MAX : value
  @unit = 'S'
end
from_string(value) click to toggle source
# File lib/grpc_kit/grpc_time.rb, line 76
def from_string(value)
  size = value.size
  if size < 2
    raise ArgumentError, "Invalid format: too short #{value}"
  end

  if size > 9
    raise ArgumentError, "Invalid format: too long #{value}"
  end

  unit = value.byteslice(-1, 1)
  value = Integer(value.byteslice(0, size - 1))
  case unit
  when 'H', 'M', 'S', 'm', 'u', 'n'
    @value = value
    @unit = unit
  else
    raise ArgumentError, "Invalid unit `#{unit}`: #{value}"
  end
end