i18n_alchemy 0.3.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/i18n_alchemy.rb +1 -1
- data/lib/i18n_alchemy/attributes_parsing.rb +8 -0
- data/lib/i18n_alchemy/date_parser.rb +1 -1
- data/lib/i18n_alchemy/numeric_parser.rb +1 -1
- data/lib/i18n_alchemy/version.rb +1 -1
- data/test/action_view_test.rb +7 -7
- data/test/custom_parsers/my_custom_date_parser.rb +2 -2
- data/test/db/test_schema.rb +2 -2
- data/test/i18n_alchemy/proxy/attributes_parsing_test.rb +35 -19
- data/test/i18n_alchemy/proxy_test.rb +1 -1
- data/test/models/product.rb +4 -4
- data/test/models/supplier.rb +1 -1
- data/test/models/user.rb +1 -1
- data/test/test_helper.rb +10 -0
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7ebc2bc7b34e395b62ef11905c03ab5103350a569c4bc4f5d4d429441c3af19
|
4
|
+
data.tar.gz: 2e1b00aa921aa7467a808a0984bf851f21d63d4e1e85a526d675d119c388d261
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 521869a7aca148cc53a0fd64f05c7563d4065989cd0332c4ec5ec7a0ecbc36554b3acd085349385c76aebd78e701f3b07ebf76ade0682057a3faca0145420263
|
7
|
+
data.tar.gz: d673f02a4c9e275697021e7cb99d88829454d4fc1659c0c2369c6780ad8ac2ccb67bf2488a696df549a89539d31d84235e4cff17df0f7613711a86f5184446eb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## v0.3.1 - 2020-02-11
|
2
|
+
|
3
|
+
* Ruby 2.6 & 2.7 support (no changes required)
|
4
|
+
* Rails 6 support ([@mayordwells](https://github.com/mayordwells))
|
5
|
+
* Add support for `update`/`update!` Active Record methods ([@tbk303](https://github.com/tbk303))
|
6
|
+
|
1
7
|
## v0.3.0 - 2018-09-08
|
2
8
|
|
3
9
|
* Update I18n dependency to require >= 0.7, allowing to install more recent versions ([@nazarhussain](https://github.com/nazarhussain))
|
data/lib/i18n_alchemy.rb
CHANGED
@@ -17,6 +17,14 @@ module I18n
|
|
17
17
|
@target.update_attributes!(parse_attributes(attributes))
|
18
18
|
end
|
19
19
|
|
20
|
+
def update(attributes)
|
21
|
+
@target.update(parse_attributes(attributes))
|
22
|
+
end
|
23
|
+
|
24
|
+
def update!(attributes)
|
25
|
+
@target.update!(parse_attributes(attributes))
|
26
|
+
end
|
27
|
+
|
20
28
|
def update_attribute(attribute, value)
|
21
29
|
attributes = parse_attributes(attribute => value)
|
22
30
|
@target.update_attribute(attribute, attributes.values.first)
|
data/lib/i18n_alchemy/version.rb
CHANGED
data/test/action_view_test.rb
CHANGED
@@ -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
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
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, :
|
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, :
|
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, :
|
12
|
+
I18n.t(:custom, scope: [:date, :formats])
|
13
13
|
end
|
14
14
|
end
|
data/test/db/test_schema.rb
CHANGED
@@ -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
|
-
:
|
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(:
|
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 = { :
|
34
|
+
@localized.attributes = { price: '1,99' }
|
35
35
|
assert_equal "1,99", @localized.price
|
36
36
|
end
|
37
37
|
|
@@ -41,30 +41,46 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
@localized.
|
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
|
50
|
+
def test_update_does_not_change_given_attributes_hash
|
51
51
|
assert_attributes_hash_is_unchanged do |attributes|
|
52
|
-
@localized.
|
52
|
+
@localized.update(attributes)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
def test_update_attributes
|
57
|
-
|
56
|
+
def test_update_attributes
|
57
|
+
silence_deprecations {
|
58
|
+
@localized.update_attributes(price: '2,88')
|
59
|
+
}
|
60
|
+
assert_equal '2,88', @localized.price
|
61
|
+
assert_equal 2.88, @product.reload.price
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_update!
|
65
|
+
@localized.update!(price: '2,88')
|
58
66
|
assert_equal '2,88', @localized.price
|
59
67
|
assert_equal 2.88, @product.reload.price
|
60
68
|
end
|
61
69
|
|
62
|
-
def
|
70
|
+
def test_update_bang_does_not_change_given_attributes_hash
|
63
71
|
assert_attributes_hash_is_unchanged do |attributes|
|
64
|
-
@localized.
|
72
|
+
@localized.update!(attributes)
|
65
73
|
end
|
66
74
|
end
|
67
75
|
|
76
|
+
def test_update_attributes!
|
77
|
+
silence_deprecations {
|
78
|
+
@localized.update_attributes!(price: '2,88')
|
79
|
+
}
|
80
|
+
assert_equal '2,88', @localized.price
|
81
|
+
assert_equal 2.88, @product.reload.price
|
82
|
+
end
|
83
|
+
|
68
84
|
def test_update_attribute
|
69
85
|
@localized.update_attribute(:price, '2,88')
|
70
86
|
assert_equal '2,88', @localized.price
|
@@ -73,40 +89,40 @@ class ProxyAttributesParsingTest < I18n::Alchemy::ProxyTestCase
|
|
73
89
|
|
74
90
|
# Nested Attributes
|
75
91
|
def test_should_assign_for_nested_attributes_for_collection_association
|
76
|
-
@supplier_localized.assign_attributes(:
|
92
|
+
@supplier_localized.assign_attributes(products_attributes: [{ price: '1,99' }, { price: '2,93' }])
|
77
93
|
assert_equal 2, @supplier_localized.products.size
|
78
94
|
assert_equal '1,99', @supplier_localized.products.first.localized.price
|
79
95
|
assert_equal '2,93', @supplier_localized.products.last.localized.price
|
80
96
|
end
|
81
97
|
|
82
98
|
def test_should_assign_for_nested_attributes_passing_a_hash_for_collection_with_unique_keys
|
83
|
-
@supplier_localized.assign_attributes(:
|
99
|
+
@supplier_localized.assign_attributes(products_attributes: { '0' => { price: '2,93', _destroy: 'false' }, '1' => { price: '2,85', _destroy: 'false' }})
|
84
100
|
prices = @supplier.products.map { |p| p.localized.price }.sort
|
85
101
|
assert_equal ['2,85', '2,93'], prices
|
86
102
|
end
|
87
103
|
|
88
104
|
def test_should_assign_for_nested_attributes_for_one_to_one_association
|
89
|
-
@supplier_localized.assign_attributes(:
|
105
|
+
@supplier_localized.assign_attributes(account_attributes: { account_number: 10, total_money: '100,87' })
|
90
106
|
account = @supplier_localized.account
|
91
107
|
assert_equal '10', account.account_number.to_s
|
92
108
|
assert_equal '100,87', account.localized.total_money
|
93
109
|
end
|
94
110
|
|
95
|
-
def
|
96
|
-
@supplier_localized.
|
111
|
+
def test_update_for_nested_attributes
|
112
|
+
@supplier_localized.update(account_attributes: { total_money: '99,87' })
|
97
113
|
assert_equal '99,87', @supplier_localized.account.localized.total_money
|
98
114
|
end
|
99
115
|
|
100
116
|
def test_attributes_assignment_for_nested
|
101
|
-
@supplier_localized.attributes = {:
|
117
|
+
@supplier_localized.attributes = { account_attributes: { total_money: '88,12' }}
|
102
118
|
assert_equal '88,12', @supplier_localized.account.localized.total_money
|
103
119
|
end
|
104
120
|
|
105
121
|
private
|
106
122
|
|
107
123
|
def assert_attributes_hash_is_unchanged
|
108
|
-
attributes = { :
|
124
|
+
attributes = { quantity: 1 }
|
109
125
|
yield attributes
|
110
|
-
assert_equal({ :
|
126
|
+
assert_equal({ quantity: 1 }, attributes)
|
111
127
|
end
|
112
128
|
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!(:
|
6
|
+
assert @localized.save!(name: "foo", price: 1.99)
|
7
7
|
assert !@product.new_record?
|
8
8
|
end
|
9
9
|
|
data/test/models/product.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
class Product < ActiveRecord::Base
|
2
2
|
include I18n::Alchemy
|
3
|
-
localize :total, :
|
4
|
-
localize :estimated_delivery_at, :
|
5
|
-
localize :estimated_last_comission_payment_at, :
|
6
|
-
localize :released_month, :
|
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
|
|
data/test/models/supplier.rb
CHANGED
data/test/models/user.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -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.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Antonio da Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 4.0.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: '6.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 4.0.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: '6.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: i18n
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
version: 4.0.0
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
56
|
+
version: '6.1'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,7 +63,7 @@ dependencies:
|
|
63
63
|
version: 4.0.0
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: '6.1'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: activerecord
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
version: 4.0.0
|
74
74
|
- - "<"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: '6.1'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
version: 4.0.0
|
84
84
|
- - "<"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
86
|
+
version: '6.1'
|
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
|
@@ -167,8 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
|
-
|
171
|
-
rubygems_version: 2.7.6
|
170
|
+
rubygems_version: 3.0.3
|
172
171
|
signing_key:
|
173
172
|
specification_version: 4
|
174
173
|
summary: I18n date/number parsing/localization
|