Class: Protip::Transformers::BigDecimalTransformer

Inherits:
DelegatingTransformer show all
Defined in:
lib/protip/transformers/big_decimal_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

#initializeBigDecimalTransformer

Returns a new instance of BigDecimalTransformer.



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

def initialize
  super
  self['protip.messages.BigDecimalValue'] = (Class.new do
      include Protip::Transformer
      def to_object(message, field)
        Rational(message.numerator, message.denominator).to_d(message.precision)
      end

      def to_message(object, field)
        object = BigDecimal(object)
        rational = object.to_r
        field.subtype.msgclass.new(
          numerator: rational.numerator,
          denominator: rational.denominator,
          precision: object.precs[0], # This is the current precision of the decimal
        )
      end
    end).new
end