From 8a49e84e153e4797ed135165768d21c6b066aa3c Mon Sep 17 00:00:00 2001 From: Stephen Nelson Date: Thu, 2 Nov 2023 12:49:29 -0400 Subject: [PATCH] deserialize currency amounts as BigDeciaml --- lib/dnsimple/struct/charge.rb | 8 +++++--- spec/dnsimple/client/billing_spec.rb | 12 +++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/dnsimple/struct/charge.rb b/lib/dnsimple/struct/charge.rb index 0a31be07..5cdde300 100644 --- a/lib/dnsimple/struct/charge.rb +++ b/lib/dnsimple/struct/charge.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'bigdecimal' + module Dnsimple module Struct class Charge < Base @@ -25,7 +27,7 @@ class ChargeItem < Base # @param [String] amount # @return [void] def amount=(amount) - @amount = amount.to_f + @amount = BigDecimal(amount) end end @@ -67,7 +69,7 @@ def items=(charge_items) # @param [String] balance_amount # @return [void] def balance_amount=(balance_amount) - @balance_amount = balance_amount.to_f + @balance_amount = BigDecimal(balance_amount) end # Converts total_amount to a Float and sets it. @@ -75,7 +77,7 @@ def balance_amount=(balance_amount) # @param [String] total_amount # @return [void] def total_amount=(total_amount) - @total_amount = total_amount.to_f + @total_amount = BigDecimal(total_amount) end end diff --git a/spec/dnsimple/client/billing_spec.rb b/spec/dnsimple/client/billing_spec.rb index f6ded81f..9c257d1c 100644 --- a/spec/dnsimple/client/billing_spec.rb +++ b/spec/dnsimple/client/billing_spec.rb @@ -2,6 +2,8 @@ require 'spec_helper' +require 'bigdecimal/util' + describe Dnsimple::Client, ".billing" do subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").billing } @@ -40,16 +42,16 @@ response.data.each do |result| expect(result).to be_a(Dnsimple::Struct::Charge) - expect(result.balance_amount).to be_a(Float) + expect(result.balance_amount).to be_a(BigDecimal) expect(result.reference).to be_a(String) expect(result.items).to be_a(Array) expect(result.items[0]).to be_a(Dnsimple::Struct::Charge::ChargeItem) end - expect(response.data[0].total_amount).to be_a(Float) - expect(response.data[0].total_amount).to equal(14.5) - expect(response.data[0].items[0].amount).to be_a(Float) - expect(response.data[0].items[0].amount).to equal(14.5) + expect(response.data[0].total_amount).to be_a(BigDecimal) + expect(response.data[0].total_amount.to_s("F")).to eq("14.5") + expect(response.data[0].items[0].amount).to be_a(BigDecimal) + expect(response.data[0].items[0].amount.to_s("F")).to eq("14.5") end it "supports filters" do