diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-12-02 22:12:36 -0200 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-12-02 22:12:36 -0200 |
commit | d3b93e403b3d0c11607e037770ad91c062b2e897 (patch) | |
tree | 1fe5f112d215cf72887835b6190f50400767e4dc /activesupport/lib/active_support/number_helper/number_to_currency_converter.rb | |
parent | fc73ebf332c4dbd36dcf7e7a39a0e120b7680bd2 (diff) | |
download | rails-d3b93e403b3d0c11607e037770ad91c062b2e897.tar.gz rails-d3b93e403b3d0c11607e037770ad91c062b2e897.tar.bz2 rails-d3b93e403b3d0c11607e037770ad91c062b2e897.zip |
Make load of NumberHelper thread safe
Diffstat (limited to 'activesupport/lib/active_support/number_helper/number_to_currency_converter.rb')
-rw-r--r-- | activesupport/lib/active_support/number_helper/number_to_currency_converter.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/number_helper/number_to_currency_converter.rb b/activesupport/lib/active_support/number_helper/number_to_currency_converter.rb new file mode 100644 index 0000000000..113e557415 --- /dev/null +++ b/activesupport/lib/active_support/number_helper/number_to_currency_converter.rb @@ -0,0 +1,48 @@ +module ActiveSupport + module NumberHelper + class NumberToCurrencyConverter < NumberConverter # :nodoc: + + self.namespace = :currency + + def convert + number = @number.to_s.strip + format = options[:format] + + if is_negative?(number) + format = options[:negative_format] + number = absolute_value(number) + end + + rounded_number = NumberToRoundedConverter.new(number, options).execute + format.gsub('%n', rounded_number).gsub('%u', options[:unit]) + end + + private + + def is_negative?(number) + number.to_f.phase != 0 + end + + def absolute_value(number) + number.respond_to?("abs") ? number.abs : number.sub(/\A-/, '') + end + + def options + @options ||= begin + defaults = default_format_options.merge(i18n_opts) + # Override negative format if format options is given + defaults[:negative_format] = "-#{opts[:format]}" if opts[:format] + defaults.merge(opts) + end + end + + def i18n_opts + # Set International negative format if not exists + i18n = i18n_format_options + i18n[:negative_format] ||= "-#{i18n[:format]}" if i18n[:format] + i18n + end + + end + end +end |