diff --git a/lib/core_ext/big_decimal.rb b/lib/core_ext/big_decimal.rb index 2f88fc6..959ea18 100644 --- a/lib/core_ext/big_decimal.rb +++ b/lib/core_ext/big_decimal.rb @@ -1,9 +1,14 @@ -require 'corrency/corrency_mixin' +require 'corrency/methods' class BigDecimal - include CorrencyMixin + include Corrency::Methods - def to_s(s = "%.2f") - sprintf(s, self) + old_to_s = instance_method(:to_s) + define_method(:to_s) do |s = nil| + if s.nil? + sprintf('%.2f', self) + else + old_to_s.bind(self).call(s) + end end end diff --git a/lib/core_ext/fixnum.rb b/lib/core_ext/fixnum.rb index c6cafd9..56882d9 100644 --- a/lib/core_ext/fixnum.rb +++ b/lib/core_ext/fixnum.rb @@ -1,5 +1,5 @@ -require 'corrency/corrency_mixin' +require 'corrency/methods' class Fixnum - include CorrencyMixin + include Corrency::Methods end diff --git a/lib/corrency/corrency_mixin.rb b/lib/corrency/corrency_mixin.rb deleted file mode 100644 index 7f4f73c..0000000 --- a/lib/corrency/corrency_mixin.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'bigdecimal' -require 'bigdecimal/util' - -module CorrencyMixin - def inc_vat - (self.to_d * vat_rate) - end - - def ex_vat - (self.to_d / vat_rate) - end - - def next_ninety_nine - self.ceil - BigDecimal.new("0.01") - end - - def add_margin(margin) - ((self.to_d / (100 - margin.to_d)) * 100).round(2) - end - - def margin(cost) - self_d = self.to_d - ((self_d - BigDecimal.new(cost)) / self_d) * 100 - end - - protected - def vat_rate - 1 + (Corrency::Config.vat_rate.to_d / 100) - end -end diff --git a/lib/corrency/methods.rb b/lib/corrency/methods.rb new file mode 100644 index 0000000..7d694a7 --- /dev/null +++ b/lib/corrency/methods.rb @@ -0,0 +1,32 @@ +require 'bigdecimal' +require 'bigdecimal/util' + +module Corrency + module Methods + def inc_vat + (self.to_d * vat_rate) + end + + def ex_vat + (self.to_d / vat_rate) + end + + def next_ninety_nine + self.ceil - BigDecimal.new("0.01") + end + + def add_margin(margin) + ((self.to_d / (100 - margin.to_d)) * 100).round(2) + end + + def margin(cost) + self_d = self.to_d + ((self_d - BigDecimal.new(cost)) / self_d) * 100 + end + + protected + def vat_rate + 1 + (Corrency::Config.vat_rate.to_d / 100) + end + end +end diff --git a/test/big_decimal_test.rb b/test/big_decimal_test.rb index d876219..b43971c 100644 --- a/test/big_decimal_test.rb +++ b/test/big_decimal_test.rb @@ -18,7 +18,7 @@ end it "should accept a format override" do - assert_equal '31.4159', BigDecimal.new('31.4159265358979').to_s('%.4f') + assert_equal '+314 15.926 53', BigDecimal.new('31415.92653').to_s('+3F') end end end