i18n_alchemy 0.2.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: