i18n_alchemy 0.2.2 → 0.4.0

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: 68f198998d37ed939ead93b7a86d836fa73b8e7c
4
- data.tar.gz: 880e2dbb5699e4a714922e5fc40958929b3b7d48
2
+ SHA256:
3
+ metadata.gz: 2b448e3b19d00c30389b8fafe839c2840ba90b264022108c8f9e356e9441f2e3
4
+ data.tar.gz: 170fd843fe6f65d8a411c0362121e52ade33ca549a11ec028fb89026bc4216b4
5
5
  SHA512:
6
- metadata.gz: ca5de87fe772476d5f48507a1d0b8ae2cd9dc40521a878a1a61c0d24ccfb1f338a096fde002fbd38540eed82fd574b6055657d7717b338c2aaa71a5e96c64b51
7
- data.tar.gz: 9c5ceb2c9203ac97686f7f0f6b45bf3e27aa184985b22eb7451c5cc063b60b215763a2307a691375fd39f930433fd2fe420b035192b365167b36ff859fded590
6
+ metadata.gz: e3fa185c470cd2ce647f6c22d6e1f296681a940691181b8dda3f47dfdce93a7aaf7a7c9e0d2d7a62c47c38528bfb3b802d15e0dabed1d9d4c9dd8b081537df18
7
+ data.tar.gz: 494b9cb4974f6bc8a171c389498e21506be614200a751b097a4a5cf8e2e30d9f14f7b81b4c0931d50596bc3d5ccb750608bc5fb986024a48819c793f0a5f2e0b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## v0.4.0 - 2020-03-30
2
+
3
+ * Ruby 3.0 support
4
+ * Rails 6.1 support
5
+ * `update_attributes` and `update_attributes!` are not available through the localized proxy in Rails 6.1, following their removal from Rails.
6
+
7
+ ## v0.3.1 - 2020-02-11
8
+
9
+ * Ruby 2.6 & 2.7 support (no changes required)
10
+ * Rails 6 support ([@mayordwells](https://github.com/mayordwells))
11
+ * Add support for `update`/`update!` Active Record methods ([@tbk303](https://github.com/tbk303))
12
+
13
+ ## v0.3.0 - 2018-09-08
14
+
15
+ * Update I18n dependency to require >= 0.7, allowing to install more recent versions ([@nazarhussain](https://github.com/nazarhussain))
16
+ * Rails 5.2 support ([@sega](https://github.com/sega))
17
+ * Ruby 2.5 support (no changes required)
18
+ * Drop support to Rails 3.2 and Ruby 1.9.3/2.0.x/2.1.x
19
+
20
+ ## v0.2.4 - 2017-08-03
21
+
22
+ * Rails 5.1 and Ruby 2.4 support
23
+
24
+ ## v0.2.3 - 2016-12-19
25
+
26
+ * Rails 5.0 support ([@rodrigoulisses](https://github.com/rodrigoulisses))
27
+
1
28
  ## v0.2.2 - 2015-08-26
2
29
 
3
30
  * Rails 4.2 and Ruby 2.2 support (Rails 4.2.1+ support by [@Danielpk](https://github.com/Danielpk))
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ## I18nAlchemy
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/i18n_alchemy.png)](http://badge.fury.io/rb/i18n_alchemy)
4
- [![Build Status](https://api.travis-ci.org/carlosantoniodasilva/i18n_alchemy.png?branch=master)](http://travis-ci.org/carlosantoniodasilva/i18n_alchemy)
5
- [![Code Climate](https://codeclimate.com/github/carlosantoniodasilva/i18n_alchemy.png)](https://codeclimate.com/github/carlosantoniodasilva/i18n_alchemy)
3
+ [![Gem Version](https://badge.fury.io/rb/i18n_alchemy.svg)](http://badge.fury.io/rb/i18n_alchemy)
4
+ [![Build Status](https://api.travis-ci.org/carlosantoniodasilva/i18n_alchemy.svg?branch=master)](http://travis-ci.org/carlosantoniodasilva/i18n_alchemy)
5
+ [![Code Climate](https://codeclimate.com/github/carlosantoniodasilva/i18n_alchemy.svg)](https://codeclimate.com/github/carlosantoniodasilva/i18n_alchemy)
6
6
 
7
7
  I18n date/number parsing/localization
8
8
 
data/lib/i18n_alchemy.rb CHANGED
@@ -20,7 +20,7 @@ module I18n
20
20
 
21
21
  included do
22
22
  class_attribute :localized_methods,
23
- :instance_reader => false, :instance_writer => false
23
+ instance_reader: false, instance_writer: false
24
24
  self.localized_methods = {}
25
25
  end
26
26
 
@@ -1,5 +1,10 @@
1
1
  module I18n
2
2
  module Alchemy
3
+ def self.support_update_attributes?
4
+ # `update_attributes` and `update_attributes!` were removed in Rails 6.1.
5
+ ActiveSupport.version < Gem::Version.new("6.1")
6
+ end
7
+
3
8
  module AttributesParsing
4
9
  def attributes=(attributes)
5
10
  @target.attributes = parse_attributes(attributes)
@@ -9,12 +14,22 @@ module I18n
9
14
  @target.assign_attributes(parse_attributes(attributes))
10
15
  end
11
16
 
12
- def update_attributes(attributes)
13
- @target.update_attributes(parse_attributes(attributes))
17
+ if I18n::Alchemy.support_update_attributes?
18
+ def update_attributes(attributes)
19
+ @target.update_attributes(parse_attributes(attributes))
20
+ end
21
+
22
+ def update_attributes!(attributes)
23
+ @target.update_attributes!(parse_attributes(attributes))
24
+ end
25
+ end
26
+
27
+ def update(attributes)
28
+ @target.update(parse_attributes(attributes))
14
29
  end
15
30
 
16
- def update_attributes!(attributes)
17
- @target.update_attributes!(parse_attributes(attributes))
31
+ def update!(attributes)
32
+ @target.update!(parse_attributes(attributes))
18
33
  end
19
34
 
20
35
  def update_attribute(attribute, value)
@@ -28,7 +28,7 @@ module I18n
28
28
  end
29
29
 
30
30
  def i18n_format
31
- I18n.t(:default, :scope => [i18n_scope, :formats])
31
+ I18n.t(:default, scope: [i18n_scope, :formats])
32
32
  end
33
33
 
34
34
  def i18n_scope
@@ -34,7 +34,7 @@ module I18n
34
34
  end
35
35
 
36
36
  def translate(key)
37
- I18n.t(key, :scope => :"number.format")
37
+ I18n.t(key, scope: :"number.format")
38
38
  end
39
39
 
40
40
  def valid_for_localization?(value)
@@ -57,8 +57,15 @@ module I18n
57
57
  # Delegate all method calls that are not translated to the target object.
58
58
  # As the proxy does not have any other method, there is no need to
59
59
  # override :respond_to, just delegate it to the target as well.
60
- def method_missing(*args, &block)
61
- @target.send(*args, &block)
60
+ if ::RUBY_VERSION >= "2.7"
61
+ def method_missing(*args, **kwargs, &block)
62
+ @target.send(*args, **kwargs, &block)
63
+ end
64
+ ruby2_keywords :method_missing
65
+ else
66
+ def method_missing(*args, &block)
67
+ @target.send(*args, &block)
68
+ end
62
69
  end
63
70
 
64
71
  private
@@ -128,12 +135,12 @@ module I18n
128
135
  end
129
136
 
130
137
  def detect_parser_from_column(column)
131
- detect_parser(column.number? ? :number : column.type)
138
+ detect_parser(column.type)
132
139
  end
133
140
 
134
141
  def detect_parser(type_or_parser)
135
142
  case type_or_parser
136
- when :number
143
+ when :float, :decimal, :number
137
144
  NumericParser
138
145
  when :date
139
146
  DateParser
@@ -146,7 +153,7 @@ module I18n
146
153
 
147
154
  def skip_column?(column_name)
148
155
  column_name == @target_class.primary_key ||
149
- column_name.ends_with?("_id") ||
156
+ column_name.end_with?("_id") ||
150
157
  @localized_attributes.key?(column_name)
151
158
  end
152
159
  end
@@ -1,5 +1,5 @@
1
1
  module I18n
2
2
  module Alchemy
3
- VERSION = "0.2.2"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -3,13 +3,13 @@ require "action_pack"
3
3
 
4
4
  class ActionViewTest < I18n::Alchemy::TestCase
5
5
  def setup
6
- @template = ActionView::Base.new
6
+ @template = ActionView::Base.respond_to?(:empty) ? ActionView::Base.empty : ActionView::Base.new
7
7
  @product = Product.new(
8
- :name => "Potato",
9
- :quantity => 10,
10
- :price => 1.99,
11
- :released_at => Date.new(2011, 2, 28),
12
- :last_sale_at => Time.mktime(2011, 2, 28, 13, 25, 30)
8
+ name: "Potato",
9
+ quantity: 10,
10
+ price: 1.99,
11
+ released_at: Date.new(2011, 2, 28),
12
+ last_sale_at: Time.mktime(2011, 2, 28, 13, 25, 30)
13
13
  )
14
14
  @localized = @product.localized
15
15
 
@@ -48,7 +48,7 @@ class ActionViewTest < I18n::Alchemy::TestCase
48
48
  assert_includes [
49
49
  text_input_sorted_attributes(attribute, value),
50
50
  text_input_unsorted_attributes(attribute, value)
51
- ], @template.text_field(:product, attribute, :object => @localized)
51
+ ], @template.text_field(:product, attribute, object: @localized)
52
52
  end
53
53
 
54
54
  def text_input_sorted_attributes(attribute_name, value)
@@ -3,12 +3,12 @@ module MyCustomDateParser
3
3
  extend self
4
4
 
5
5
  def localize(value)
6
- I18n.localize value, :format => :custom
6
+ I18n.localize value, format: :custom
7
7
  end
8
8
 
9
9
  protected
10
10
 
11
11
  def i18n_format
12
- I18n.t(:custom, :scope => [:date, :formats])
12
+ I18n.t(:custom, scope: [:date, :formats])
13
13
  end
14
14
  end
@@ -1,6 +1,6 @@
1
1
  ActiveRecord::Base.establish_connection(
2
- :adapter => "sqlite3",
3
- :database => ":memory:"
2
+ adapter: "sqlite3",
3
+ database: ":memory:"
4
4
  )
5
5
 
6
6
  ActiveRecord::Schema.define do
@@ -4,7 +4,7 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
4
4
  # Attributes
5
5
  def test_initializes_proxy_with_attributes
6
6
  @localized = @product.localized(
7
- :name => "Banana", :price => "0,99", :released_at => "28/02/2011")
7
+ name: "Banana", price: "0,99", released_at: "28/02/2011")
8
8
 
9
9
  assert_equal 0.99, @product.price
10
10
  assert_equal "0,99", @localized.price
@@ -14,7 +14,7 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
14
14
  end
15
15
 
16
16
  def test_assign_attributes
17
- @localized.assign_attributes(:price => '1,99')
17
+ @localized.assign_attributes(price: '1,99')
18
18
  assert_equal "1,99", @localized.price
19
19
  end
20
20
 
@@ -31,7 +31,7 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
31
31
  end
32
32
 
33
33
  def test_attributes_assignment
34
- @localized.attributes = { :price => '1,99' }
34
+ @localized.attributes = { price: '1,99' }
35
35
  assert_equal "1,99", @localized.price
36
36
  end
37
37
 
@@ -41,27 +41,45 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
41
41
  end
42
42
  end
43
43
 
44
- def test_update_attributes
45
- @localized.update_attributes(:price => '2,88')
44
+ def test_update
45
+ @localized.update(price: '2,88')
46
46
  assert_equal '2,88', @localized.price
47
47
  assert_equal 2.88, @product.reload.price
48
48
  end
49
49
 
50
- def test_update_attributes_does_not_change_given_attributes_hash
50
+ def test_update_does_not_change_given_attributes_hash
51
51
  assert_attributes_hash_is_unchanged do |attributes|
52
- @localized.update_attributes(attributes)
52
+ @localized.update(attributes)
53
53
  end
54
54
  end
55
55
 
56
- def test_update_attributes!
57
- @localized.update_attributes!(:price => '2,88')
56
+ def test_update!
57
+ @localized.update!(price: '2,88')
58
58
  assert_equal '2,88', @localized.price
59
59
  assert_equal 2.88, @product.reload.price
60
60
  end
61
61
 
62
- def test_update_attributes_bang_does_not_change_given_attributes_hash
62
+ def test_update_bang_does_not_change_given_attributes_hash
63
63
  assert_attributes_hash_is_unchanged do |attributes|
64
- @localized.update_attributes!(attributes)
64
+ @localized.update!(attributes)
65
+ end
66
+ end
67
+
68
+ if I18n::Alchemy.support_update_attributes?
69
+ def test_update_attributes
70
+ silence_deprecations {
71
+ @localized.update_attributes(price: '2,88')
72
+ }
73
+ assert_equal '2,88', @localized.price
74
+ assert_equal 2.88, @product.reload.price
75
+ end
76
+
77
+ def test_update_attributes!
78
+ silence_deprecations {
79
+ @localized.update_attributes!(price: '2,88')
80
+ }
81
+ assert_equal '2,88', @localized.price
82
+ assert_equal 2.88, @product.reload.price
65
83
  end
66
84
  end
67
85
 
@@ -73,40 +91,40 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
73
91
 
74
92
  # Nested Attributes
75
93
  def test_should_assign_for_nested_attributes_for_collection_association
76
- @supplier_localized.assign_attributes(:products_attributes => [{:price => '1,99'}, {:price => '2,93'}])
94
+ @supplier_localized.assign_attributes(products_attributes: [{ price: '1,99' }, { price: '2,93' }])
77
95
  assert_equal 2, @supplier_localized.products.size
78
96
  assert_equal '1,99', @supplier_localized.products.first.localized.price
79
97
  assert_equal '2,93', @supplier_localized.products.last.localized.price
80
98
  end
81
99
 
82
100
  def test_should_assign_for_nested_attributes_passing_a_hash_for_collection_with_unique_keys
83
- @supplier_localized.assign_attributes(:products_attributes => {"0" => {:price => '2,93', "_destroy"=>"false"}, "1" => {:price => '2,85', "_destroy" => "false"}})
101
+ @supplier_localized.assign_attributes(products_attributes: { '0' => { price: '2,93', _destroy: 'false' }, '1' => { price: '2,85', _destroy: 'false' }})
84
102
  prices = @supplier.products.map { |p| p.localized.price }.sort
85
103
  assert_equal ['2,85', '2,93'], prices
86
104
  end
87
105
 
88
106
  def test_should_assign_for_nested_attributes_for_one_to_one_association
89
- @supplier_localized.assign_attributes(:account_attributes => {:account_number => 10, :total_money => '100,87'})
107
+ @supplier_localized.assign_attributes(account_attributes: { account_number: 10, total_money: '100,87' })
90
108
  account = @supplier_localized.account
91
109
  assert_equal '10', account.account_number.to_s
92
110
  assert_equal '100,87', account.localized.total_money
93
111
  end
94
112
 
95
- def test_update_attributes_for_nested_attributes
96
- @supplier_localized.update_attributes(:account_attributes => {:total_money => '99,87'})
113
+ def test_update_for_nested_attributes
114
+ @supplier_localized.update(account_attributes: { total_money: '99,87' })
97
115
  assert_equal '99,87', @supplier_localized.account.localized.total_money
98
116
  end
99
117
 
100
118
  def test_attributes_assignment_for_nested
101
- @supplier_localized.attributes = {:account_attributes => {:total_money => '88,12'}}
119
+ @supplier_localized.attributes = { account_attributes: { total_money: '88,12' }}
102
120
  assert_equal '88,12', @supplier_localized.account.localized.total_money
103
121
  end
104
122
 
105
123
  private
106
124
 
107
125
  def assert_attributes_hash_is_unchanged
108
- attributes = { :quantity => 1 }
126
+ attributes = { quantity: 1 }
109
127
  yield attributes
110
- assert_equal({ :quantity => 1 }, attributes)
128
+ assert_equal({ quantity: 1 }, attributes)
111
129
  end
112
130
  end
@@ -3,7 +3,7 @@ require "test_helper"
3
3
  class ProxyTest < I18n::Alchemy::ProxyTestCase
4
4
  def test_delegates_orm_methods_to_target_object
5
5
  assert @product.new_record?
6
- assert @localized.save!(:name => "foo", :price => 1.99)
6
+ assert @localized.save!(validate: false)
7
7
  assert !@product.new_record?
8
8
  end
9
9
 
@@ -32,6 +32,7 @@ class ProxyTest < I18n::Alchemy::ProxyTestCase
32
32
  end
33
33
 
34
34
  def test_to_param
35
+ @product.id = 1
35
36
  assert_equal @product.to_param, @localized.to_param
36
37
  end
37
38
 
@@ -1,9 +1,9 @@
1
1
  class Product < ActiveRecord::Base
2
2
  include I18n::Alchemy
3
- localize :total, :using => :number
4
- localize :estimated_delivery_at, :using => :date
5
- localize :estimated_last_comission_payment_at, :using => :timestamp
6
- localize :released_month, :using => MyCustomDateParser
3
+ localize :total, using: :number
4
+ localize :estimated_delivery_at, using: :date
5
+ localize :estimated_last_comission_payment_at, using: :timestamp
6
+ localize :released_month, using: MyCustomDateParser
7
7
 
8
8
  belongs_to :supplier
9
9
 
@@ -9,5 +9,5 @@ class Supplier < ActiveRecord::Base
9
9
  end
10
10
 
11
11
  class AnotherSupplier < Supplier
12
- localize :created_at, :using => :timestamp
12
+ localize :created_at, using: :timestamp
13
13
  end
data/test/models/user.rb CHANGED
@@ -2,5 +2,5 @@ class User
2
2
  include I18n::Alchemy
3
3
  attr_accessor :created_at
4
4
 
5
- localize :created_at, :using => :date
5
+ localize :created_at, using: :date
6
6
  end
data/test/test_helper.rb CHANGED
@@ -9,7 +9,7 @@ begin
9
9
  Minitest.autorun
10
10
  MiniTestCase = Minitest::Test
11
11
  rescue LoadError
12
- # Rails 4.0/3.2
12
+ # Rails 4.0
13
13
  require 'minitest/unit'
14
14
  MiniTest::Unit.autorun
15
15
  MiniTestCase = MiniTest::Unit::TestCase
@@ -49,5 +49,15 @@ module I18n::Alchemy
49
49
  def teardown
50
50
  I18n.locale = :en
51
51
  end
52
+
53
+ private
54
+
55
+ def silence_deprecations
56
+ old_silenced = ActiveSupport::Deprecation.silenced
57
+ ActiveSupport::Deprecation.silenced = true
58
+ yield
59
+ ensure
60
+ ActiveSupport::Deprecation.silenced = old_silenced
61
+ end
52
62
  end
53
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n_alchemy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Antonio da Silva
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-26 00:00:00.000000000 Z
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,74 +16,74 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 4.0.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 5.0.0
22
+ version: '7.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 3.2.0
29
+ version: 4.0.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 5.0.0
32
+ version: '7.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: i18n
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '0.6'
39
+ version: '0.7'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '0.6'
46
+ version: '0.7'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: actionpack
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 3.2.0
53
+ version: 4.0.0
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: 5.0.0
56
+ version: '7.0'
57
57
  type: :development
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 3.2.0
63
+ version: 4.0.0
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: 5.0.0
66
+ version: '7.0'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: activerecord
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 3.2.0
73
+ version: 4.0.0
74
74
  - - "<"
75
75
  - !ruby/object:Gem::Version
76
- version: 5.0.0
76
+ version: '7.0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 3.2.0
83
+ version: 4.0.0
84
84
  - - "<"
85
85
  - !ruby/object:Gem::Version
86
- version: 5.0.0
86
+ version: '7.0'
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: minitest
89
89
  requirement: !ruby/object:Gem::Requirement
@@ -102,14 +102,14 @@ dependencies:
102
102
  name: rake
103
103
  requirement: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - "~>"
105
+ - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '10.1'
108
108
  type: :development
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
- - - "~>"
112
+ - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: '10.1'
115
115
  description: I18n date/number parsing/localization
@@ -152,7 +152,7 @@ files:
152
152
  homepage: ''
153
153
  licenses: []
154
154
  metadata: {}
155
- post_install_message:
155
+ post_install_message:
156
156
  rdoc_options: []
157
157
  require_paths:
158
158
  - lib
@@ -167,9 +167,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  requirements: []
170
- rubyforge_project: i18n_alchemy
171
- rubygems_version: 2.4.5.1
172
- signing_key:
170
+ rubygems_version: 3.2.3
171
+ signing_key:
173
172
  specification_version: 4
174
173
  summary: I18n date/number parsing/localization
175
174
  test_files: