protip 0.30.5 → 0.30.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a10a4eb93f79aa7fe56de1217cd27ae431a46232
4
- data.tar.gz: 5847fed82b56670f7bd9a813374d8e0c908e9915
3
+ metadata.gz: e8ea8a8d2f1e92c3bcebb676f2e40d591b9a2138
4
+ data.tar.gz: 7195b1267a211416473fc2ef3b750964c8725486
5
5
  SHA512:
6
- metadata.gz: 6a15ec580d5f122a244767e9c6589bbb2f136c8687ebc34752cae8897e29ada1d147dd9c64581fb8726f84dbcb56e5462969a3de4b4692fc39992b521b9ce546
7
- data.tar.gz: 1eb2142c60d6db130339aa0d22b15a6c9524074292e2a5382aef7371376b338f0db7f9578c025ce03d4e3a8c43e71d0020c1bb8fbacbb94d680107b4179d5f48
6
+ metadata.gz: c73b37b4f1f904d0600649f7cc2f7111b61171d725c7a9f06dc6b723b202e05b83d4f5a8bdeba9d9de78e67a547fcf6ba82c23073c12e63002dc04eb48fb06f2
7
+ data.tar.gz: 69129ed10031078627b54ae3a947bf5bbb6142b98af076ff20ea1c7126ebb32c4e8f806aef82604b8cacffcfdf85ffcc594215ecb387349e579cd0ad6baa447c
@@ -3,5 +3,7 @@ syntax = "proto3";
3
3
  package protip.messages;
4
4
 
5
5
  message BigDecimalValue {
6
- bytes serialized = 1;
6
+ int64 numerator = 1;
7
+ uint64 denominator = 2;
8
+ uint32 precision = 3;
7
9
  }
@@ -5,7 +5,9 @@ require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
7
  add_message "protip.messages.BigDecimalValue" do
8
- optional :serialized, :bytes, 1
8
+ optional :numerator, :int64, 1
9
+ optional :denominator, :uint64, 2
10
+ optional :precision, :uint32, 3
9
11
  end
10
12
  end
11
13
 
@@ -1,4 +1,5 @@
1
1
  require 'bigdecimal'
2
+ require 'bigdecimal/util' # Pulls in the rational -> bigdecimal conversion
2
3
 
3
4
  require 'protip/transformer'
4
5
  require 'protip/transformers/delegating_transformer'
@@ -11,11 +12,17 @@ module Protip
11
12
  self['protip.messages.BigDecimalValue'] = (Class.new do
12
13
  include Protip::Transformer
13
14
  def to_object(message, field)
14
- BigDecimal._load(message.serialized)
15
+ Rational(message.numerator, message.denominator).to_d(message.precision)
15
16
  end
16
17
 
17
18
  def to_message(object, field)
18
- field.subtype.msgclass.new(serialized: BigDecimal.new(object)._dump)
19
+ object = BigDecimal.new(object)
20
+ rational = object.to_r
21
+ field.subtype.msgclass.new(
22
+ numerator: rational.numerator,
23
+ denominator: rational.denominator,
24
+ precision: object.precs[0], # This is the current precision of the decimal
25
+ )
19
26
  end
20
27
  end).new
21
28
  end
@@ -21,12 +21,13 @@ describe Protip::Transformers::BigDecimalTransformer do
21
21
  expected_value ||= value
22
22
  it "transforms #{name} values" do
23
23
  message = transformer.to_message(value, field)
24
- assert_equal expected_value, transformer.to_object(message, field)
24
+ object = transformer.to_object(message, field)
25
+ assert_equal BigDecimal, object.class
26
+ assert_equal expected_value, object
25
27
  end
26
28
  end
27
29
  describe 'for BigDecimal arguments' do
28
30
  it_transforms 'integer', BigDecimal.new(104, 1)
29
- it_transforms 'infinity', (BigDecimal.new(1, 1) / 0)
30
31
  it_transforms 'fractions', BigDecimal.new(100.5, 5)
31
32
  it_transforms 'rational numbers', BigDecimal.new(Rational(2, 3), 3)
32
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.5
4
+ version: 0.30.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - AngelList
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-24 00:00:00.000000000 Z
11
+ date: 2016-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel