i18n-complements 0.0.12 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e315e195eaf2ffc7641dafa65b29f64daf5270cf
4
- data.tar.gz: ade2b242b65632eb4164c42ae859af019604f4d1
2
+ SHA256:
3
+ metadata.gz: cdd3051546defefbdea07a93d272b73e439afed392c5d122cabae378e85ce74b
4
+ data.tar.gz: ce785fa0d3bd1807751dfb744eca066904823afe5280a40dea8bccda8ac19178
5
5
  SHA512:
6
- metadata.gz: 03d540be38622615ed373e3f48aeb9288b58c16b12fbb5bb5aba1e9bd4e1270806b9ac04faeda0e7596b1a7ea61cf54165549970295ed5e19328e7c1ac3fe07a
7
- data.tar.gz: 9fe8dc68f570ca829850deebdf3fd1f5bac7c5afbbb3c7bc0aaa8650412dbb1bb2b5ce8b95f631cfe41faffbc9a027077bb81c777835bdd89f747910feed8d7d
6
+ metadata.gz: fe42ba93dc9828cb432e713cba3dda7134a04dd4f0574dd5dd6849f71a3f8c62f906948172859a94cb3b43637b3c21b3682e5e96fe391bf2f986db3e39682dbd
7
+ data.tar.gz: 73eb8bc1073b0c877eec418e93457369a5449bd827834bb89091d66d73edb1ffe6d11bbad8915244eb942a5964504e500e7b5dbf58685c6130b29077b7ed1c04
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = I18nComplements
1
+ = I18n::Complements
2
2
  {<img src="https://badge.fury.io/rb/i18n-complements.png" alt="Gem Version" />}[http://badge.fury.io/rb/i18n-complements]
3
3
  {<img src="https://api.travis-ci.org/ekylibre/i18n-complements.png?branch=master"/>}[https://travis-ci.org/ekylibre/i18n-complements]
4
4
  {<img src="https://gemnasium.com/ekylibre/i18n-complements.png"/>}[https://gemnasium.com/ekylibre/i18n-complements]
@@ -1,15 +1 @@
1
- require 'i18n'
2
- require 'i18n-complements/numisma'
3
- require 'i18n-complements/localize_extension'
4
- require 'i18n-complements/core_extension'
5
- require 'i18n-complements/version'
6
-
7
- module I18n
8
-
9
- class InvalidCurrency < ArgumentError
10
- end
11
-
12
- end
13
-
14
- module I18nComplements
15
- end
1
+ require 'i18n/complements'
@@ -0,0 +1,14 @@
1
+ require 'i18n'
2
+
3
+ module I18n
4
+ class InvalidCurrency < ArgumentError
5
+ end
6
+
7
+ module Complements
8
+ end
9
+ end
10
+
11
+ require 'i18n/complements/numisma'
12
+ require 'i18n/complements/localize_extension'
13
+ require 'i18n/complements/core_extension'
14
+ require 'i18n/complements/version'
@@ -4,12 +4,12 @@ class ::String
4
4
  def translate(options = {})
5
5
  I18n.translate(self, options)
6
6
  end
7
- alias :t :translate
7
+ alias t translate
8
8
 
9
9
  def localize(options = {})
10
10
  I18n.localize(self, options)
11
11
  end
12
- alias :l :localize
12
+ alias l localize
13
13
 
14
14
  def to_currency
15
15
  I18n.currencies(self)
@@ -20,10 +20,10 @@ class ::Symbol
20
20
  def translate(options = {})
21
21
  I18n.translate(self, options)
22
22
  end
23
- alias :t :translate
23
+ alias t translate
24
24
 
25
25
  def to_currency
26
- I18n.currencies(self.to_s)
26
+ I18n.currencies(to_s)
27
27
  end
28
28
  end
29
29
 
@@ -31,40 +31,40 @@ class ::TrueClass
31
31
  def localize(options = {})
32
32
  I18n.localize(self, options)
33
33
  end
34
- alias :l :localize
34
+ alias l localize
35
35
  end
36
36
 
37
37
  class ::FalseClass
38
38
  def localize(options = {})
39
39
  I18n.localize(self, options)
40
40
  end
41
- alias :l :localize
41
+ alias l localize
42
42
  end
43
43
 
44
44
  class ::Numeric
45
45
  def localize(options = {})
46
46
  I18n.localize(self, options)
47
47
  end
48
- alias :l :localize
48
+ alias l localize
49
49
  end
50
50
 
51
51
  class ::Date
52
52
  def localize(options = {})
53
53
  I18n.localize(self, options)
54
54
  end
55
- alias :l :localize
55
+ alias l localize
56
56
  end
57
57
 
58
58
  class ::DateTime
59
59
  def localize(options = {})
60
60
  I18n.localize(self, options)
61
61
  end
62
- alias :l :localize
62
+ alias l localize
63
63
  end
64
64
 
65
65
  class ::Time
66
66
  def localize(options = {})
67
67
  I18n.localize(self, options)
68
68
  end
69
- alias :l :localize
69
+ alias l localize
70
70
  end
@@ -0,0 +1,55 @@
1
+ module I18n
2
+ module Backend
3
+ class Simple
4
+ def localize_with_complements(locale, object, format = nil, options = {})
5
+ if object.respond_to?(:strftime)
6
+ format ||= :default
7
+ return localize_without_complements(locale, object, format, options)
8
+ elsif object.respond_to?(:abs)
9
+ if currency = options[:currency]
10
+ raise I18n::InvalidCurrency, "Currency #{currency} does not exist." unless I18n::Complements::Numisma[currency.to_s]
11
+ return I18n::Complements::Numisma[currency.to_s].localize(object, locale: locale)
12
+ else
13
+ formatter = I18n.translate('number.format'.to_sym, locale: locale, default: {})
14
+ if formatter.is_a?(Proc)
15
+ return formatter[object]
16
+ elsif formatter.is_a?(Hash)
17
+ formatter = { format: '%n', separator: '.', delimiter: '', precision: 3 }.merge(formatter).merge(options)
18
+ format = formatter[:format]
19
+ negative_format = formatter[:negative_format] || '-' + format
20
+
21
+ if object.to_f < 0
22
+ format = negative_format
23
+ object = object.abs
24
+ end
25
+
26
+ formatter[:delimiter] = "\u{00A0}" if formatter[:delimiter] == ' '
27
+
28
+ value = object.to_s.split(/\./)
29
+ integrals = value[0].to_s
30
+ decimals = value[1].to_s
31
+ value = integrals.gsub(/^0+[1-9]+/, '').gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{formatter[:delimiter]}")
32
+ decimals = '0' if decimals.to_s.match(/^\s*$/) && object.is_a?(Float)
33
+ unless decimals.to_s =~ /^\s*$/
34
+ after = decimals.gsub(/0+$/, '').ljust(formatter[:precision], '0').scan(/.{1,3}/).join('')
35
+ unless after =~ /\A[[:space:]]*\z/
36
+ value << formatter[:separator] + after
37
+ end
38
+ end
39
+ return format.gsub(/%n/, value).gsub(/%s/, "\u{00A0}")
40
+ end
41
+ end
42
+ elsif object.is_a?(TrueClass) || object.is_a?(FalseClass)
43
+ return I18n.translate("boolean.human.#{object}_class", locale: locale)
44
+ elsif object.is_a?(String)
45
+ return object
46
+ else
47
+ raise ArgumentError, "Object must be a Numeric, TrueClass, FalseClass, String, Date, DateTime or Time object. #{object.class.name}:#{object.inspect} given."
48
+ end
49
+ end
50
+
51
+ alias localize_without_complements localize
52
+ alias localize localize_with_complements
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,124 @@
1
+ # This module aimed to structure and controls currencies through the application
2
+ # It represents the international monetary system with all its currencies like specified in ISO 4217
3
+ # Numisma comes from latin: It designs here the "science of money"
4
+ require 'net/http'
5
+ require 'yaml'
6
+ require 'i18n/complements/numisma/currency'
7
+
8
+ module I18n
9
+ module Complements
10
+ module Numisma
11
+ class << self
12
+ def currencies
13
+ @@currencies
14
+ end
15
+
16
+ # Returns the path to currencies file
17
+ def currencies_file
18
+ # Rails.root.join("config", "currencies.yml")
19
+ File.join(File.dirname(__FILE__), 'numisma', 'currencies.yml')
20
+ end
21
+
22
+ # Returns a hash with active currencies only
23
+ def active_currencies
24
+ x = {}
25
+ @@currencies.each do |code, currency|
26
+ x[code] = currency if currency.active
27
+ end
28
+ x
29
+ end
30
+
31
+ # Shorcut to get currency
32
+ def [](currency_code)
33
+ @@currencies[currency_code]
34
+ end
35
+
36
+ def fixed_currency_rate(from, to)
37
+ rates = @@fixed_currency_rates[from]
38
+ return nil unless rates
39
+ rates[to]
40
+ end
41
+
42
+ def currency_rate(from, to)
43
+ if Numisma[from].nil?
44
+ raise InvalidCurrency, ":from currency is unknown (#{from.class}:#{from.inspect})"
45
+ end
46
+ if Numisma[to].nil?
47
+ raise InvalidCurrency, ":to currency is unknown (#{to.class}:#{to.inspect})"
48
+ end
49
+ rate = fixed_currency_rate(from, to)
50
+ return rate if rate
51
+ begin
52
+ uri = URI('http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate')
53
+ response = Net::HTTP.post_form(uri, 'FromCurrency' => from, 'ToCurrency' => to)
54
+ doc = ::LibXML::XML::Parser.string(response.body).parse
55
+ rate = doc.root.content.to_f
56
+ rescue
57
+ uri = URI("http://download.finance.yahoo.com/d/quotes.csv?s=#{from}#{to}=X&f=l1")
58
+ response = Net::HTTP.get(uri)
59
+ rate = response.strip.to_f
60
+ end
61
+ rate
62
+ end
63
+
64
+ # Load currencies
65
+ def load_currencies
66
+ @@currencies = {}
67
+ yaml = YAML.load_file(currencies_file)
68
+ yaml.each do |code, attributes|
69
+ currency = Currency.new(code, attributes.inject({}) { |h, p| h[p[0].to_sym] = p[1]; h })
70
+ @@currencies[currency.code] = currency
71
+ end
72
+ end
73
+
74
+ # Load fixed currency rates with reverse rates too.
75
+ def load_fixed_currency_rates
76
+ @@fixed_currency_rates = {}
77
+ yaml = YAML.load_file(File.join(File.dirname(__FILE__), 'numisma', 'fixed_currency_rates.yml'))
78
+ yaml.each do |from, rates|
79
+ @@fixed_currency_rates[from] ||= {}
80
+ rates.each do |to, rate|
81
+ @@fixed_currency_rates[from][to] = rate
82
+ @@fixed_currency_rates[to] ||= {}
83
+ @@fixed_currency_rates[to][from] = 1 / rate
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ # Finally load all currencies
90
+ load_currencies
91
+ load_fixed_currency_rates
92
+ end
93
+ end
94
+
95
+ class << self
96
+ def currencies(currency_code)
97
+ I18n::Complements::Numisma.currencies[currency_code.to_s]
98
+ end
99
+
100
+ def active_currencies
101
+ I18n::Complements::Numisma.active_currencies
102
+ end
103
+
104
+ def available_currencies
105
+ I18n::Complements::Numisma.currencies
106
+ end
107
+
108
+ def currency_label(currency_code)
109
+ if currency = I18n::Complements::Numisma.currencies[currency_code.to_s]
110
+ currency.label
111
+ else
112
+ return "Unknown currency: #{currency_code}"
113
+ end
114
+ end
115
+
116
+ def currency_rate(from, to)
117
+ I18n::Complements::Numisma.currency_rate(from, to)
118
+ end
119
+
120
+ def currencies_file
121
+ I18n::Complements::Numisma.currencies_file
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,81 @@
1
+ module I18n
2
+ module Complements
3
+ module Numisma
4
+ class Currency
5
+ attr_reader :code, :active, :cash, :countries, :number, :precision, :unit
6
+
7
+ def initialize(code, options = {})
8
+ @code = code.strip # .upcase
9
+ @active = (options[:active] ? true : false)
10
+ @cash = options[:cash].to_a.collect(&:to_f).sort
11
+ @countries = options[:countries].to_a.collect(&:to_s).sort.collect(&:to_sym)
12
+ @number = options[:number].to_i
13
+ @precision = options[:precision].to_i
14
+ @unit = (options[:unit].nil? ? nil : options[:unit].to_s)
15
+ end
16
+
17
+ def name
18
+ ::I18n.translate("currencies.#{code}")
19
+ end
20
+
21
+ def label
22
+ ::I18n.translate('labels.currency_with_code', code: code, name: name, default: '%{name} (%{code})')
23
+ end
24
+
25
+ def round(value, _options = {})
26
+ precision = self.precision
27
+ if RUBY_VERSION =~ /^1\.8/
28
+ magnitude = 10**precision
29
+ return (value * magnitude).to_i.to_f * magnitude
30
+ else
31
+ return value.round(precision)
32
+ end
33
+ end
34
+
35
+ def ==(other_currency)
36
+ code == other_currency.code
37
+ end
38
+
39
+ def to_currency
40
+ self
41
+ end
42
+
43
+ # Produces a amount of the currency with the locale parameters
44
+ # TODO: Find a better way to specify number formats which are more complex that the default Rails use
45
+ def localize(amount, options = {})
46
+ return unless amount
47
+
48
+ # options.symbolize_keys!
49
+
50
+ defaults = I18n.translate('number.format'.to_sym, locale: options[:locale], default: {})
51
+ defaultt = I18n.translate('number.currency.format'.to_sym, locale: options[:locale], default: {})
52
+ defaultt[:negative_format] ||= ('-' + defaultt[:format]) if defaultt[:format]
53
+ formatcy = I18n.translate("number.currency.formats.#{code}".to_sym, locale: options[:locale], default: {})
54
+ formatcy[:negative_format] ||= '-' + formatcy[:format] if formatcy[:format]
55
+
56
+ formatter = {}
57
+ formatter[:separator] = formatcy[:separator] || defaultt[:separator] || defaults[:separator] || ','
58
+ formatter[:delimiter] = formatcy[:delimiter] || defaultt[:delimiter] || defaults[:delimiter] || ''
59
+ formatter[:precision] = formatcy[:precision] || precision || defaultt[:precision] || 3
60
+ format = formatcy[:format] || defaultt[:format] || '%n-%u' # defaults[:format] ||
61
+ negative_format = formatcy[:negative_format] || defaultt[:negative_format] || defaults[:negative_format] || '-' + format
62
+ unit = formatcy[:unit] || self.unit || code
63
+
64
+ if amount.to_f < 0
65
+ format = negative_format # options.delete(:negative_format)
66
+ amount = amount.respond_to?('abs') ? amount.abs : amount.sub(/^-/, '')
67
+ end
68
+
69
+ value = amount.to_s
70
+ integers, decimals = value.split(/\./)
71
+ value = integers.gsub(/^0+[1-9]+/, '').gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{formatter[:delimiter]}")
72
+ unless decimals.to_s =~ /^\s*$/
73
+ value << formatter[:separator]
74
+ value << decimals.gsub(/0+$/, '').ljust(formatter[:precision], '0').scan(/.{1,3}/).join(formatter[:delimiter])
75
+ end
76
+ format.gsub(/%n/, value).gsub(/%u/, unit).gsub(/%s/, "\u{00A0}")
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,20 @@
1
+ EUR:
2
+ EEK: 15.6466
3
+ SKK: 30.126
4
+ GRD: 340.75
5
+ PTE: 200.482
6
+ NLG: 2.20371
7
+ BEF: 40.3399
8
+ FRF: 6.55957
9
+ LUF: 40.3399
10
+ LVL: 0.702804
11
+ ITL: 1936.27
12
+ MTL: 0.4293
13
+ LTL: 3.4528
14
+ CYP: 0.585274
15
+ IEP: 0.787564
16
+ DEM: 1.95583
17
+ FIM: 5.94573
18
+ ESP: 166.386
19
+ ATS: 13.7603
20
+ SIT: 239.64
@@ -0,0 +1,5 @@
1
+ module I18n
2
+ module Complements
3
+ VERSION = '1.1.1'.freeze
4
+ end
5
+ end
data/test/helper.rb CHANGED
@@ -2,13 +2,35 @@ require 'coveralls'
2
2
  Coveralls.wear!
3
3
 
4
4
  require 'bundler/setup'
5
- require 'test/unit'
5
+ require 'minitest/autorun'
6
6
 
7
7
  $LOAD_PATH.unshift(File.dirname(__FILE__))
8
8
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
9
 
10
10
  require 'i18n-complements'
11
11
 
12
- for file in Dir[File.join(File.dirname(__FILE__), "locales", "*.yml")]
12
+ Dir[File.join(File.dirname(__FILE__), 'locales', '*.yml')].each do |file|
13
13
  I18n.backend.load_translations(file)
14
14
  end
15
+
16
+ module I18n
17
+ module Complements
18
+ class TestCase < Minitest::Test
19
+ def setup
20
+ I18n.locale = ENV['LOCALE'] || :eng
21
+ end
22
+
23
+ def assert_nothing_raised(*_args)
24
+ yield
25
+ end
26
+
27
+ def assert_raise(exception)
28
+ yield
29
+ rescue Exception => e
30
+ assert_equal exception, e.class
31
+ else
32
+ refute
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,8 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestBooleans < Test::Unit::TestCase
5
-
4
+ class TestBooleans < I18n::Complements::TestCase
6
5
  def test_localization
7
6
  assert_nothing_raised do
8
7
  I18n.localize(true)
@@ -20,15 +19,14 @@ class TestBooleans < Test::Unit::TestCase
20
19
 
21
20
  assert_nothing_raised do
22
21
  false.localize
23
- end
22
+ end
24
23
 
25
24
  assert_nothing_raised do
26
25
  true.l
27
26
  end
28
-
27
+
29
28
  assert_nothing_raised do
30
29
  false.l
31
- end
30
+ end
32
31
  end
33
-
34
32
  end
@@ -1,67 +1,65 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestCurrencies < Test::Unit::TestCase
5
-
4
+ class TestCurrencies < I18n::Complements::TestCase
6
5
  def test_localization_with_currency
7
6
  assert_nothing_raised do
8
- ::I18n.localize(14.5, :currency => :JPY)
7
+ ::I18n.localize(14.5, currency: :JPY)
9
8
  end
10
9
 
11
10
  assert_nothing_raised do
12
- ::I18n.localize(14.5, :currency => "JPY")
11
+ ::I18n.localize(14.5, currency: 'JPY')
13
12
  end
14
-
13
+
15
14
  assert_raise(I18n::InvalidCurrency) do
16
- ::I18n.localize(14.5, :currency => "jPY")
15
+ ::I18n.localize(14.5, currency: 'jPY')
17
16
  end
18
17
  end
19
18
 
20
19
  def test_localization_with_currency_with_core_extensions
21
20
  assert_nothing_raised do
22
- 14.5.localize(:currency => :JPY)
21
+ 14.5.localize(currency: :JPY)
23
22
  end
24
23
 
25
24
  assert_nothing_raised do
26
- 14.5.l(:currency => :JPY)
25
+ 14.5.l(currency: :JPY)
27
26
  end
28
27
 
29
28
  assert_nothing_raised do
30
- 13546.localize(:currency => :JPY)
29
+ 13_546.localize(currency: :JPY)
31
30
  end
32
-
31
+
33
32
  assert_nothing_raised do
34
- 13546.l(:currency => :JPY)
33
+ 13_546.l(currency: :JPY)
35
34
  end
36
-
35
+
37
36
  assert_raise(I18n::InvalidCurrency) do
38
- 14.5.l(:currency => "jPY")
39
- end
37
+ 14.5.l(currency: 'jPY')
38
+ end
40
39
 
41
40
  assert_raise(I18n::InvalidCurrency) do
42
- 14.5.l(:currency => "JPYXX")
43
- end
41
+ 14.5.l(currency: 'JPYXX')
42
+ end
44
43
  end
45
-
44
+
46
45
  def test_number_formatting_with_currency
47
- number = 413500
48
- assert_equal "¥413,500", ::I18n.localize(number, :locale => :eng, :currency => "JPY")
49
- assert_equal "413\u{00A0}500\u{00A0}¥", ::I18n.localize(number, :locale => :fra, :currency => "JPY")
50
- assert_equal "413,500円", ::I18n.localize(number, :locale => :jpn, :currency => "JPY")
51
- assert_equal "€0.325,1", ::I18n.localize(0.3251, :locale => :eng, :currency => "EUR")
52
- assert_equal "0,325\u{00A0}1\u{00A0}F", ::I18n.localize(0.3251, :locale => :fra, :currency => "FRF")
53
- assert_equal "€123,852.325,1", ::I18n.localize(123852.3251, :locale => :eng, :currency => "EUR")
46
+ number = 413_500
47
+ assert_equal '¥413,500', ::I18n.localize(number, locale: :eng, currency: 'JPY')
48
+ assert_equal "413\u{00A0}500\u{00A0}¥", ::I18n.localize(number, locale: :fra, currency: 'JPY')
49
+ assert_equal '413,500円', ::I18n.localize(number, locale: :jpn, currency: 'JPY')
50
+ assert_equal '€0.325,1', ::I18n.localize(0.3251, locale: :eng, currency: 'EUR')
51
+ assert_equal "0,325\u{00A0}1\u{00A0}F", ::I18n.localize(0.3251, locale: :fra, currency: 'FRF')
52
+ assert_equal '€123,852.325,1', ::I18n.localize(123_852.3251, locale: :eng, currency: 'EUR')
54
53
  end
55
54
 
56
55
  def test_number_formatting_with_currency_with_core_extensions
57
- for locale in [:eng, :fra, :jpn]
58
- for money in [[413500, "JPY"], [1425.23, "USD"], [0.96, "EUR"]]
59
- assert_equal(money[0].l(:locale => money[1]), ::I18n.localize(money[0], :locale => money[1]))
56
+ [:eng, :fra, :jpn].each do |locale|
57
+ [[413_500, 'JPY'], [1425.23, 'USD'], [0.96, 'EUR']].each do |money|
58
+ assert_equal(money[0].l(locale: locale, currency: money[1]), ::I18n.localize(money[0], locale: locale, currency: money[1]))
60
59
  end
61
60
  end
62
61
  end
63
62
 
64
-
65
63
  def test_listing_of_currencies
66
64
  assert_nothing_raised do
67
65
  ::I18n.active_currencies
@@ -71,32 +69,32 @@ class TestCurrencies < Test::Unit::TestCase
71
69
  ::I18n.available_currencies
72
70
  end
73
71
 
74
- assert ::I18n.active_currencies.size <= ::I18n.available_currencies.size, "Available currencies cannot be less numerous than active currencies"
72
+ assert ::I18n.active_currencies.size <= ::I18n.available_currencies.size, 'Available currencies cannot be less numerous than active currencies'
75
73
  end
76
74
 
77
75
  def test_currency_properties
78
76
  assert !::I18n.currencies(:JPY).nil?
79
- assert !::I18n.currencies("JPY").nil?
80
- assert ::I18n.currencies("JPy").nil?
77
+ assert !::I18n.currencies('JPY').nil?
78
+ assert ::I18n.currencies('JPy').nil?
81
79
 
82
- assert !::I18n.currencies("USD").nil?
83
- assert !::I18n.currencies("EUR").nil?
80
+ assert !::I18n.currencies('USD').nil?
81
+ assert !::I18n.currencies('EUR').nil?
84
82
 
85
- assert ::I18n.currencies("JPYXX").nil?
83
+ assert ::I18n.currencies('JPYXX').nil?
86
84
 
87
85
  assert_nothing_raised do
88
- ::I18n.currency_label("JPY")
86
+ ::I18n.currency_label('JPY')
89
87
  end
90
- assert !::I18n.currency_label("JPY").match(/Unknown/)
88
+ assert !::I18n.currency_label('JPY').match(/Unknown/)
91
89
  end
92
-
90
+
93
91
  def test_currency_properties_with_core_extensions
94
92
  assert_nothing_raised do
95
93
  :JPY.to_currency.name
96
94
  end
97
-
95
+
98
96
  assert_nothing_raised do
99
- "USD".to_currency.name
97
+ 'USD'.to_currency.name
100
98
  end
101
99
 
102
100
  assert_nothing_raised do
@@ -106,15 +104,12 @@ class TestCurrencies < Test::Unit::TestCase
106
104
  assert_nothing_raised do
107
105
  :JPY.to_currency.to_currency.to_currency.name
108
106
  end
109
-
107
+
110
108
  assert_equal :JPY.to_currency, :JPY.to_currency.to_currency
111
109
 
112
110
  currency = :JPY.to_currency
113
-
111
+
114
112
  assert_equal currency, currency.to_currency
115
113
  assert_equal currency.to_currency, currency.to_currency.to_currency
116
114
  end
117
-
118
-
119
-
120
115
  end
@@ -1,31 +1,32 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestCurrencies < Test::Unit::TestCase
5
-
4
+ class TestCurrencies < I18n::Complements::TestCase
6
5
  def test_conversion_rate
6
+ rate = I18n::Complements::Numisma.currency_rate('EUR', 'FRF')
7
+ assert !rate.zero?, 'Rate should not be zero'
7
8
 
8
- assert_raise ArgumentError do
9
- I18nComplements::Numisma.currency_rate(:EUR, "JPY")
10
- end
11
-
12
- assert_raise ArgumentError do
13
- I18nComplements::Numisma.currency_rate("EUR", :JPY)
14
- end
15
-
16
- assert_raise ArgumentError do
17
- I18nComplements::Numisma.currency_rate(:EUR, :JPY)
9
+ assert rate == 6.55957
10
+
11
+ assert_raise I18n::InvalidCurrency do
12
+ I18n::Complements::Numisma.currency_rate(:EUR, 'JPY')
18
13
  end
19
14
 
20
- r1 = I18nComplements::Numisma.currency_rate("EUR", "JPY")
21
- r2 = I18nComplements::Numisma.currency_rate("JPY", "EUR")
22
- assert 0.01 >= 1 - (r1 * r2).round(2)
23
-
24
- assert_nothing_raised do
25
- I18nComplements::Numisma.currency_rate("EUR", "JPY")
15
+ assert_raise I18n::InvalidCurrency do
16
+ I18n::Complements::Numisma.currency_rate('EUR', :JPY)
26
17
  end
27
18
 
28
- end
19
+ assert_raise I18n::InvalidCurrency do
20
+ I18n::Complements::Numisma.currency_rate(:EUR, :JPY)
21
+ end
29
22
 
23
+ r1 = I18n::Complements::Numisma.currency_rate('EUR', 'JPY')
24
+ r2 = I18n::Complements::Numisma.currency_rate('JPY', 'EUR')
25
+ rounded_one = (r1 * r2).round(2)
26
+ assert rounded_one >= 0.99, "EUR -> JPY: #{r1}, JPY -> EUR: #{r2}, #{r1 * r2}, #{rounded_one}"
30
27
 
28
+ rate = I18n::Complements::Numisma.currency_rate('EUR', 'JPY')
29
+ assert !rate.nil?, 'Rate cannot be nil'
30
+ assert rate != 0, 'Rate cannot be null'
31
+ end
31
32
  end
@@ -1,29 +1,27 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestExtensions < Test::Unit::TestCase
5
-
4
+ class TestExtensions < I18n::Complements::TestCase
6
5
  def setup
7
6
  I18n.locale = :eng
8
7
  end
9
8
 
10
9
  def test_string_translation
11
- assert_equal "My example is so short", I18n.translate("my_example")
12
- assert_equal I18n.translate("my_example"), "my_example".translate
13
- assert_equal I18n.translate("my_example"), "my_example".t
10
+ assert_equal 'My example is so short', I18n.translate('my_example')
11
+ assert_equal I18n.translate('my_example'), 'my_example'.translate
12
+ assert_equal I18n.translate('my_example'), 'my_example'.t
14
13
 
15
- assert_equal "My example is short", I18n.translate("my.example")
16
- assert_equal I18n.translate("my.example"), "my.example".translate
17
- assert_equal I18n.translate("my.example"), "my.example".t
14
+ assert_equal 'My example is short', I18n.translate('my.example')
15
+ assert_equal I18n.translate('my.example'), 'my.example'.translate
16
+ assert_equal I18n.translate('my.example'), 'my.example'.t
18
17
  end
19
18
 
20
19
  def test_symbol_translation
21
- assert_equal "My example is so short", I18n.translate(:my_example)
20
+ assert_equal 'My example is so short', I18n.translate(:my_example)
22
21
  assert_equal I18n.translate(:my_example), :my_example.translate
23
22
  assert_equal I18n.translate(:my_example), :my_example.t
24
23
  end
25
24
 
26
-
27
25
  def test_date_localization
28
26
  date = Date.civil(1999, 12, 31)
29
27
 
@@ -71,5 +69,4 @@ class TestExtensions < Test::Unit::TestCase
71
69
 
72
70
  assert_equal I18n.localize(time), time.l
73
71
  end
74
-
75
72
  end
data/test/test_numbers.rb CHANGED
@@ -1,15 +1,14 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestNumbers < Test::Unit::TestCase
5
-
4
+ class TestNumbers < I18n::Complements::TestCase
6
5
  def test_localization
7
6
  assert_nothing_raised do
8
7
  I18n.localize(14.5)
9
8
  end
10
9
 
11
10
  assert_nothing_raised do
12
- I18n.localize(413500)
11
+ I18n.localize(413_500)
13
12
  end
14
13
  end
15
14
 
@@ -19,72 +18,75 @@ class TestNumbers < Test::Unit::TestCase
19
18
  end
20
19
 
21
20
  assert_nothing_raised do
22
- 413500.localize
23
- end
21
+ 413_500.localize
22
+ end
24
23
 
25
24
  assert_nothing_raised do
26
25
  14.5.l
27
26
  end
28
27
 
29
28
  assert_nothing_raised do
30
- 413500.l
31
- end
29
+ 413_500.l
30
+ end
32
31
  end
33
-
32
+
34
33
  def test_number_formatting
35
34
  # Integer
36
35
  number = 3
37
- assert_equal "3", I18n.localize(number, :locale => :eng)
38
- assert_equal "3", I18n.localize(number, :locale => :fra)
36
+ assert_equal '3', I18n.localize(number, locale: :eng)
37
+ assert_equal '3', I18n.localize(number, locale: :fra)
39
38
 
40
39
  # Integer > 1000
41
- number = 21145
42
- assert_equal "21,145", I18n.localize(number, :locale => :eng)
43
- assert_equal "21\u{00A0}145", I18n.localize(number, :locale => :fra)
40
+ number = 21_145
41
+ assert_equal '21,145', I18n.localize(number, locale: :eng)
42
+ assert_equal "21\u{00A0}145", I18n.localize(number, locale: :fra)
44
43
 
45
44
  # Float without integers with decimals
46
45
  number = 0.5
47
- assert_equal "0.500", I18n.localize(number, :locale => :eng)
48
- assert_equal "0,500", I18n.localize(number, :locale => :fra)
46
+ assert_equal '0.500', I18n.localize(number, locale: :eng)
47
+ assert_equal '0,500', I18n.localize(number, locale: :fra)
49
48
 
50
49
  # Float without decimals
51
50
  number = 3.0
52
- assert_equal "3.000", I18n.localize(number, :locale => :eng)
53
- assert_equal "3,000", I18n.localize(number, :locale => :fra)
51
+ assert_equal '3.000', I18n.localize(number, locale: :eng)
52
+ assert_equal '3,000', I18n.localize(number, locale: :fra)
53
+
54
+ # Float without decimals and no precision
55
+ number = 5.0
56
+ assert_equal '5', I18n.localize(number, locale: :eng, precision: 0)
57
+ assert_equal '5', I18n.localize(number, locale: :fra, precision: 0)
54
58
 
55
59
  # Float
56
60
  number = 14.53
57
- assert_equal "14.530", I18n.localize(number, :locale => :eng)
58
- assert_equal "14,530", I18n.localize(number, :locale => :fra)
61
+ assert_equal '14.530', I18n.localize(number, locale: :eng)
62
+ assert_equal '14,530', I18n.localize(number, locale: :fra)
59
63
 
60
64
  # Float > 1000
61
65
  number = 2114.5
62
- assert_equal "2,114.500", I18n.localize(number, :locale => :eng)
63
- assert_equal "2\u{00A0}114,500", I18n.localize(number, :locale => :fra)
66
+ assert_equal '2,114.500', I18n.localize(number, locale: :eng)
67
+ assert_equal "2\u{00A0}114,500", I18n.localize(number, locale: :fra)
64
68
 
65
69
  # Float without integers with decimals < 0.001
66
70
  number = 0.41421356
67
- assert_equal "0.414,213,56", I18n.localize(number, :locale => :eng)
68
- assert_equal "0,414\u{00A0}213\u{00A0}56", I18n.localize(number, :locale => :fra)
71
+ assert_equal '0.414,213,56', I18n.localize(number, locale: :eng)
72
+ assert_equal "0,414\u{00A0}213\u{00A0}56", I18n.localize(number, locale: :fra)
69
73
 
70
74
  # Float without integers with decimals < 0.001
71
75
  number = 3.1415926
72
- assert_equal "3.141,592,6", I18n.localize(number, :locale => :eng)
73
- assert_equal "3,141\u{00A0}592\u{00A0}6", I18n.localize(number, :locale => :fra)
76
+ assert_equal '3.141,592,6', I18n.localize(number, locale: :eng)
77
+ assert_equal "3,141\u{00A0}592\u{00A0}6", I18n.localize(number, locale: :fra)
74
78
 
75
79
  # Float without integers with decimals < 0.001
76
- number = 62951413.1415926
77
- assert_equal "62,951,413.141,592,6", I18n.localize(number, :locale => :eng)
78
- assert_equal "62\u{00A0}951\u{00A0}413,141\u{00A0}592\u{00A0}6", I18n.localize(number, :locale => :fra)
80
+ number = 62_951_413.1415926
81
+ assert_equal '62,951,413.141,592,6', I18n.localize(number, locale: :eng)
82
+ assert_equal "62\u{00A0}951\u{00A0}413,141\u{00A0}592\u{00A0}6", I18n.localize(number, locale: :fra)
79
83
  end
80
84
 
81
85
  def test_number_formatting_with_core_extensions
82
86
  for locale in [:eng, :fra, :jpn]
83
- for number in [3, 21145, 0.5, 3.0, 14.53, 2144.5, 0.41421356, 3.1415926, 62951413.1415926]
84
- assert_equal(number.l(:locale => locale), I18n.localize(number, :locale => locale))
87
+ for number in [3, 21_145, 0.5, 3.0, 14.53, 2144.5, 0.41421356, 3.1415926, 62_951_413.1415926]
88
+ assert_equal(number.l(locale: locale), I18n.localize(number, locale: locale))
85
89
  end
86
90
  end
87
-
88
91
  end
89
-
90
92
  end
data/test/test_strings.rb CHANGED
@@ -1,11 +1,10 @@
1
1
  # encoding: utf-8
2
2
  require 'helper'
3
3
 
4
- class TestStrings < Test::Unit::TestCase
5
-
4
+ class TestStrings < I18n::Complements::TestCase
6
5
  def test_localization
7
6
  assert_nothing_raised do
8
- I18n.localize("This is a test sentence")
7
+ I18n.localize('This is a test sentence')
9
8
  end
10
9
 
11
10
  assert_nothing_raised do
@@ -13,26 +12,25 @@ class TestStrings < Test::Unit::TestCase
13
12
  end
14
13
 
15
14
  assert_nothing_raised do
16
- I18n.localize("")
15
+ I18n.localize('')
17
16
  end
18
17
  end
19
18
 
20
19
  def test_localization_with_core_extensions
21
20
  assert_nothing_raised do
22
- "This is a test sentence".localize
21
+ 'This is a test sentence'.localize
23
22
  end
24
23
 
25
24
  assert_nothing_raised do
26
25
  "C'est une phrase d'exemple axée sur les caractères spéciaux".localize
27
- end
26
+ end
28
27
 
29
28
  assert_nothing_raised do
30
- "This is a test sentence".l
29
+ 'This is a test sentence'.l
31
30
  end
32
31
 
33
32
  assert_nothing_raised do
34
33
  "C'est une phrase d'exemple axée sur les caractères spéciaux".l
35
- end
34
+ end
36
35
  end
37
-
38
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-complements
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brice Texier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-12 00:00:00.000000000 Z
11
+ date: 2021-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -28,16 +28,44 @@ dependencies:
28
28
  name: coveralls
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.6.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.6.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: term-ansicolor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +80,7 @@ dependencies:
52
80
  - - ">"
53
81
  - !ruby/object:Gem::Version
54
82
  version: '10'
55
- description:
83
+ description:
56
84
  email: burisu@oneiros.fr
57
85
  executables: []
58
86
  extensions: []
@@ -63,12 +91,14 @@ files:
63
91
  - LICENSE
64
92
  - README.rdoc
65
93
  - lib/i18n-complements.rb
66
- - lib/i18n-complements/core_extension.rb
67
- - lib/i18n-complements/localize_extension.rb
68
- - lib/i18n-complements/numisma.rb
69
- - lib/i18n-complements/numisma/currencies.yml
70
- - lib/i18n-complements/numisma/currency.rb
71
- - lib/i18n-complements/version.rb
94
+ - lib/i18n/complements.rb
95
+ - lib/i18n/complements/core_extension.rb
96
+ - lib/i18n/complements/localize_extension.rb
97
+ - lib/i18n/complements/numisma.rb
98
+ - lib/i18n/complements/numisma/currencies.yml
99
+ - lib/i18n/complements/numisma/currency.rb
100
+ - lib/i18n/complements/numisma/fixed_currency_rates.yml
101
+ - lib/i18n/complements/version.rb
72
102
  - test/helper.rb
73
103
  - test/locales/eng.yml
74
104
  - test/locales/fra.yml
@@ -83,7 +113,7 @@ homepage: http://github.com/burisu/i18n-complements
83
113
  licenses:
84
114
  - MIT
85
115
  metadata: {}
86
- post_install_message:
116
+ post_install_message:
87
117
  rdoc_options: []
88
118
  require_paths:
89
119
  - lib
@@ -98,9 +128,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
128
  - !ruby/object:Gem::Version
99
129
  version: '0'
100
130
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.2.2
103
- signing_key:
131
+ rubygems_version: 3.0.3
132
+ signing_key:
104
133
  specification_version: 4
105
134
  summary: I18n missing functionnalities
106
135
  test_files:
@@ -1,53 +0,0 @@
1
- module I18n
2
- module Backend
3
-
4
- class Simple
5
-
6
- def localize_with_complements(locale, object, format = :default, options = {})
7
-
8
- if object.respond_to?(:strftime)
9
- return localize_without_complements(locale, object, format, options)
10
- elsif object.respond_to?(:abs)
11
- if currency = options[:currency]
12
- raise I18n::InvalidCurrency.new("Currency #{currency.to_s} does not exist.") unless I18nComplements::Numisma[currency.to_s]
13
- return I18nComplements::Numisma[currency.to_s].localize(object, :locale => locale)
14
- else
15
- formatter = I18n.translate('number.format'.to_sym, :locale => locale, :default => {})
16
- if formatter.is_a?(Proc)
17
- return formatter[object]
18
- elsif formatter.is_a?(Hash)
19
- formatter = {:format => "%n", :separator => '.', :delimiter => '', :precision => 3}.merge(formatter).merge(options)
20
- format = formatter[:format]
21
- negative_format = formatter[:negative_format] || "-" + format
22
-
23
- if object.to_f < 0
24
- format = negative_format
25
- object = object.abs
26
- end
27
-
28
- value = object.to_s.split(/\./)
29
- integrals, decimals = value[0].to_s, value[1].to_s
30
- value = integrals.gsub(/^0+[1-9]+/, '').gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{formatter[:delimiter]}")
31
- decimals = "0" if decimals.to_s.match(/^\s*$/) and object.is_a?(Float)
32
- unless decimals.to_s.match(/^\s*$/)
33
- value << formatter[:separator]
34
- value << decimals.gsub(/0+$/, '').ljust(formatter[:precision], '0').scan(/.{1,3}/).join(formatter[:delimiter])
35
- end
36
- return format.gsub(/%n/, value).gsub(/%s/, "\u{00A0}")
37
- end
38
- end
39
- elsif object.is_a?(TrueClass) or object.is_a?(FalseClass)
40
- return I18n.translate("boolean.formats.#{format}.#{object.to_s}")
41
- elsif object.is_a?(String)
42
- return object
43
- else
44
- raise ArgumentError, "Object must be a Numeric, TrueClass, FalseClass, String, Date, DateTime or Time object. #{object.class.name}:#{object.inspect} given."
45
- end
46
- end
47
-
48
- alias_method(:localize_without_complements, :localize)
49
- alias_method(:localize, :localize_with_complements)
50
-
51
- end
52
- end
53
- end
@@ -1,107 +0,0 @@
1
- # This module aimed to structure and controls currencies through the application
2
- # It represents the international monetary system with all its currencies like specified in ISO 4217
3
- # Numisma comes from latin: It designs here the "science of money"
4
- require 'net/http'
5
- require 'yaml'
6
- require 'i18n-complements/numisma/currency'
7
-
8
- module I18nComplements
9
- module Numisma
10
-
11
- class << self
12
-
13
- def currencies
14
- @@currencies
15
- end
16
-
17
-
18
- # Returns the path to currencies file
19
- def currencies_file
20
- # Rails.root.join("config", "currencies.yml")
21
- File.join(File.dirname(__FILE__), "numisma", "currencies.yml")
22
- end
23
-
24
- # Returns a hash with active currencies only
25
- def active_currencies
26
- x = {}
27
- for code, currency in @@currencies
28
- x[code] = currency if currency.active
29
- end
30
- return x
31
- end
32
-
33
- # Shorcut to get currency
34
- def [](currency_code)
35
- @@currencies[currency_code]
36
- end
37
-
38
- def currency_rate(from, to)
39
- raise ArgumentError.new(":from currency is unknown (#{from.class}:#{from.inspect})") if Numisma[from].nil?
40
- raise ArgumentError.new(":to currency is unknown (#{to.class}:#{to.inspect})") if Numisma[to].nil?
41
- rate = nil
42
- begin
43
- uri = URI("http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate")
44
- response = Net::HTTP.post_form(uri, 'FromCurrency' => from, 'ToCurrency' => to)
45
- doc = ::LibXML::XML::Parser.string(response.body).parse
46
- rate = doc.root.content.to_f
47
- rescue
48
- uri = URI("http://download.finance.yahoo.com/d/quotes.csv?s=#{from}#{to}=X&f=l1")
49
- response = Net::HTTP.get(uri)
50
- rate = response.strip.to_f
51
- end
52
- return rate
53
- end
54
-
55
-
56
- # Load currencies
57
- def load_currencies
58
- @@currencies = {}
59
- for code, details in YAML.load_file(self.currencies_file)
60
-
61
- currency = Currency.new(code, details.inject({}){|h, p| h[p[0].to_sym] = p[1]; h})
62
- @@currencies[currency.code] = currency
63
- end
64
- end
65
- end
66
-
67
- # Finally load all currencies
68
- load_currencies
69
- end
70
- end
71
-
72
-
73
- module ::I18n
74
-
75
- class << self
76
-
77
- def currencies(currency_code)
78
- I18nComplements::Numisma.currencies[currency_code.to_s]
79
- end
80
-
81
- def active_currencies
82
- I18nComplements::Numisma.active_currencies
83
- end
84
-
85
- def available_currencies
86
- I18nComplements::Numisma.currencies
87
- end
88
-
89
- def currency_label(currency_code)
90
- if currency = I18nComplements::Numisma.currencies[currency_code.to_s]
91
- currency.label
92
- else
93
- return "Unknown currency: #{currency_code}"
94
- end
95
- end
96
-
97
- def currency_rate(from, to)
98
- I18nComplements::Numisma.currency_rate(from, to)
99
- end
100
-
101
- def currencies_file
102
- I18nComplements::Numisma.currencies_file
103
- end
104
-
105
- end
106
-
107
- end
@@ -1,82 +0,0 @@
1
- module I18nComplements
2
- module Numisma
3
-
4
- class Currency
5
- attr_reader :code, :active, :cash, :countries, :number, :precision, :unit
6
-
7
- def initialize(code, options = {})
8
- @code = code.strip # .upcase
9
- @active = (options[:active] ? true : false)
10
- @cash = options[:cash].to_a.collect{|x| x.to_f}.sort
11
- @countries = options[:countries].to_a.collect{|x| x.to_s}.sort.collect{|x| x.to_sym}
12
- @number = options[:number].to_i
13
- @precision = options[:precision].to_i
14
- @unit = (options[:unit].nil? ? nil : options[:unit].to_s)
15
- end
16
-
17
- def name
18
- ::I18n.translate("currencies.#{self.code}")
19
- end
20
-
21
- def label
22
- ::I18n.translate("labels.currency_with_code", :code=>self.code, :name=>self.name, :default=>"%{name} (%{code})")
23
- end
24
-
25
- def round(value, options={})
26
- precision = self.precision
27
- if RUBY_VERSION.match(/^1\.8/)
28
- magnitude = 10**precision
29
- return (value * magnitude).to_i.to_f*magnitude
30
- else
31
- return value.round(precision)
32
- end
33
- end
34
-
35
- def ==(other_currency)
36
- self.code == other_currency.code
37
- end
38
-
39
- def to_currency
40
- self
41
- end
42
-
43
- # Produces a amount of the currency with the locale parameters
44
- # TODO: Find a better way to specify number formats which are more complex that the default Rails use
45
- def localize(amount, options={})
46
- return unless amount
47
-
48
- # options.symbolize_keys!
49
-
50
- defaults = I18n.translate('number.format'.to_sym, :locale => options[:locale], :default => {})
51
- defaultt = I18n.translate('number.currency.format'.to_sym, :locale => options[:locale], :default => {})
52
- defaultt[:negative_format] ||= ("-" + defaultt[:format]) if defaultt[:format]
53
- formatcy = I18n.translate("number.currency.formats.#{self.code}".to_sym, :locale => options[:locale], :default => {})
54
- formatcy[:negative_format] ||= "-" + formatcy[:format] if formatcy[:format]
55
-
56
- formatter = {}
57
- formatter[:separator] = formatcy[:separator] || defaultt[:separator] || defaults[:separator] || ','
58
- formatter[:delimiter] = formatcy[:delimiter] || defaultt[:delimiter] || defaults[:delimiter] || ''
59
- formatter[:precision] = formatcy[:precision] || self.precision || defaultt[:precision] || 3
60
- format = formatcy[:format] || defaultt[:format] || "%n-%u" # defaults[:format] ||
61
- negative_format = formatcy[:negative_format] || defaultt[:negative_format] || defaults[:negative_format] || "-" + format
62
- unit = formatcy[:unit] || self.unit || self.code
63
-
64
- if amount.to_f < 0
65
- format = negative_format # options.delete(:negative_format)
66
- amount = amount.respond_to?("abs") ? amount.abs : amount.sub(/^-/, '')
67
- end
68
-
69
- value = amount.to_s
70
- integers, decimals = value.split(/\./)
71
- value = integers.gsub(/^0+[1-9]+/, '').gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{formatter[:delimiter]}")
72
- unless decimals.to_s.match(/^\s*$/)
73
- value << formatter[:separator]
74
- value << decimals.gsub(/0+$/, '').ljust(formatter[:precision], '0').scan(/.{1,3}/).join(formatter[:delimiter])
75
- end
76
- return format.gsub(/%n/, value).gsub(/%u/, unit).gsub(/%s/, "\u{00A0}")
77
- end
78
-
79
- end
80
-
81
- end
82
- end
@@ -1,3 +0,0 @@
1
- module I18nComplements
2
- VERSION = "0.0.12"
3
- end