Class: Protip::Transformers::TimestampTransformer

Inherits:
DelegatingTransformer show all
Defined in:
lib/protip/transformers/timestamp_transformer.rb

Instance Method Summary collapse

Methods inherited from DelegatingTransformer

#merge!, #to_message, #to_object

Methods included from Protip::Transformer

#to_message, #to_object

Constructor Details

#initializeTimestampTransformer

Returns a new instance of TimestampTransformer.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/protip/transformers/timestamp_transformer.rb', line 7

def initialize
  super
  # TODO: single-message transformers are awkward to define
  transformer = Class.new do
    include Protip::Transformer

    def to_object(message, field)
      # Using a Rational prevents rounding errors, see
      # http://stackoverflow.com/questions/16326008/accuracy-of-nanosecond-component-in-ruby-time
      ::Time.at(message.seconds, Rational(message.nanos, 1000))
    end

    def to_message(object, field)
      object = object.to_time # No-op for ::Time objects
      field.subtype.msgclass.new(
        seconds: object.to_i,
        nanos: object.nsec,
      )
    end
  end.new
  self['google.protobuf.Timestamp'] = transformer
end