globalize 6.0.0.alpha.1 → 6.1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Appraisals +22 -6
- data/CHANGELOG.md +12 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +69 -38
- data/README.md +5 -0
- data/docker-compose.yml +22 -0
- data/globalize.gemspec +37 -0
- data/issue_template.rb +38 -0
- data/lib/globalize/active_record/act_macro.rb +2 -2
- data/lib/globalize/active_record/adapter_dirty.rb +35 -5
- data/lib/globalize/active_record/class_methods.rb +2 -2
- data/lib/globalize/active_record/instance_methods.rb +54 -14
- data/lib/globalize/active_record/migration.rb +23 -7
- data/lib/globalize/active_record/translated_attributes_query.rb +1 -1
- data/lib/globalize/version.rb +1 -1
- data/lib/globalize.rb +32 -2
- data/lib/patches/active_record/query_method.rb +2 -2
- data/lib/patches/active_record/rails6_1/uniqueness_validator.rb +45 -0
- data/lib/patches/active_record/relation.rb +9 -2
- data/lib/patches/active_record/serialization.rb +2 -2
- data/lib/patches/active_record/uniqueness_validator.rb +6 -4
- data/lib/patches/active_support/inflections.rb +14 -0
- data.tar.gz.sig +0 -0
- metadata +44 -13
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 70e3196446a295412903e65b76e6a1d834904abb732a7692232936fa782f4a9a
|
|
4
|
+
data.tar.gz: 672eddfec21d2d7205d36bbbe176f646f84511c51a5508056cea828d2d8f2751
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 90f9f98183c545e5f255dd57b48367f6e7b1bba0bde85962c7613e8957086e16757432b56f84acaea36dcbd222ca07d2b0188278bebea7d065ccdb80a052ff22
|
|
7
|
+
data.tar.gz: e6a718305ce3fd62835ceed0fefdadf4cb19b2e9499a7955acf19763f655b406b468e951f22e6d15edc147ec22906ec17d3792b66fd5bff8eef3ab17071907a3
|
checksums.yaml.gz.sig
ADDED
|
Binary file
|
data/Appraisals
CHANGED
|
@@ -1,19 +1,35 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
RAILS_VERSIONS = %w[
|
|
4
|
-
4.2.
|
|
5
|
-
5.1.
|
|
6
|
-
5.2.
|
|
4
|
+
4.2.11.3
|
|
5
|
+
5.1.7
|
|
6
|
+
5.2.5
|
|
7
|
+
6.0.3.6
|
|
8
|
+
6.1.3.1
|
|
9
|
+
7.0.0
|
|
7
10
|
]
|
|
8
11
|
|
|
9
12
|
RAILS_VERSIONS.each do |version|
|
|
10
13
|
appraise "rails_#{version}" do
|
|
11
14
|
gem 'activemodel', version
|
|
12
15
|
gem 'activerecord', version
|
|
16
|
+
|
|
17
|
+
if version =~ /^4/
|
|
18
|
+
gem 'sqlite3', '~> 1.3.6', platforms: [:ruby, :rbx]
|
|
19
|
+
elsif version =~ /^5/
|
|
20
|
+
gem 'sqlite3', '~> 1.3', '>= 1.3.6', platforms: [:ruby, :rbx]
|
|
21
|
+
else
|
|
22
|
+
gem 'sqlite3', '~> 1.4', platforms: [:ruby, :rbx]
|
|
23
|
+
end
|
|
13
24
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
if !ENV['CI'] || %w(postgres postgresql).include?(ENV['DB'])
|
|
26
|
+
group :postgres, :postgresql do
|
|
27
|
+
if version =~ /^4/
|
|
28
|
+
gem 'pg', '< 1.0', platforms: [:ruby, :rbx]
|
|
29
|
+
else
|
|
30
|
+
gem 'pg', '~> 1.1', platforms: [:ruby, :rbx]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
17
33
|
end
|
|
18
34
|
|
|
19
35
|
platforms :jruby do
|
data/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
# Globalize Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 6.0.1 (2021-06-23)
|
|
4
|
+
|
|
5
|
+
* Fix errors with Rails 6.1 and Ruby 3.0 [#778](https://github.com/globalize/globalize/pull/778) by [Andrew White](https://github.com/pixeltrix)
|
|
6
|
+
* Track `saved_changes` for Rails 5.1 and above [#780](https://github.com/globalize/globalize/pull/780) by [Peter Postma](https://github.com/ppostma)
|
|
7
|
+
|
|
8
|
+
## 6.0.0 (2021-01-11)
|
|
4
9
|
|
|
5
10
|
* Add `create_source_columns` option for migrations. [#715](https://github.com/globalize/globalize/pull/715) by [IlyasValiullov](https://github.com/IlyasValiullov)
|
|
6
|
-
* Autosave is now configurable, but defaults to false. [#736](https://github.com/globalize/globalize/pull/736) by [James Hart](https://github.com/hjhart)
|
|
11
|
+
* Autosave is now configurable, but defaults to false. [#736](https://github.com/globalize/globalize/pull/736) by [James Hart](https://github.com/hjhart)
|
|
12
|
+
* Fix foreign keys translation. [#769](https://github.com/globalize/globalize/pull/769) by [Sergey Tokarenko](https://github.com/stokarenko)
|
|
13
|
+
|
|
14
|
+
## 5.3.1 (2021-01-11)
|
|
15
|
+
|
|
16
|
+
* Fix foreign keys translation. [#773](https://github.com/globalize/globalize/pull/773) by [Sergey Tokarenko](https://github.com/stokarenko)
|
|
7
17
|
|
|
8
18
|
## 5.3.0 (2019-05-14)
|
|
9
19
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,66 +1,96 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
globalize (
|
|
5
|
-
activemodel (>= 4.2, <
|
|
6
|
-
activerecord (>= 4.2, <
|
|
4
|
+
globalize (6.0.1)
|
|
5
|
+
activemodel (>= 4.2, < 7.0)
|
|
6
|
+
activerecord (>= 4.2, < 7.0)
|
|
7
7
|
request_store (~> 1.0)
|
|
8
8
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
activemodel (6.
|
|
13
|
-
activesupport (= 6.
|
|
14
|
-
activerecord (6.
|
|
15
|
-
activemodel (= 6.
|
|
16
|
-
activesupport (= 6.
|
|
17
|
-
activesupport (6.
|
|
12
|
+
activemodel (6.1.4.1)
|
|
13
|
+
activesupport (= 6.1.4.1)
|
|
14
|
+
activerecord (6.1.4.1)
|
|
15
|
+
activemodel (= 6.1.4.1)
|
|
16
|
+
activesupport (= 6.1.4.1)
|
|
17
|
+
activesupport (6.1.4.1)
|
|
18
18
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
19
|
-
i18n (>=
|
|
20
|
-
minitest (
|
|
21
|
-
tzinfo (~>
|
|
22
|
-
zeitwerk (~> 2.
|
|
19
|
+
i18n (>= 1.6, < 2)
|
|
20
|
+
minitest (>= 5.1)
|
|
21
|
+
tzinfo (~> 2.0)
|
|
22
|
+
zeitwerk (~> 2.3)
|
|
23
23
|
ansi (1.5.0)
|
|
24
|
-
appraisal (2.
|
|
24
|
+
appraisal (2.4.1)
|
|
25
25
|
bundler
|
|
26
26
|
rake
|
|
27
27
|
thor (>= 0.14.0)
|
|
28
|
+
ast (2.4.2)
|
|
28
29
|
builder (3.2.4)
|
|
29
|
-
coderay (1.1.
|
|
30
|
-
concurrent-ruby (1.1.
|
|
31
|
-
database_cleaner (
|
|
32
|
-
|
|
30
|
+
coderay (1.1.3)
|
|
31
|
+
concurrent-ruby (1.1.9)
|
|
32
|
+
database_cleaner (2.0.1)
|
|
33
|
+
database_cleaner-active_record (~> 2.0.0)
|
|
34
|
+
database_cleaner-active_record (2.0.1)
|
|
35
|
+
activerecord (>= 5.a)
|
|
36
|
+
database_cleaner-core (~> 2.0.0)
|
|
37
|
+
database_cleaner-core (2.0.1)
|
|
38
|
+
i18n (1.8.10)
|
|
33
39
|
concurrent-ruby (~> 1.0)
|
|
34
|
-
m (1.
|
|
40
|
+
m (1.6.0)
|
|
35
41
|
method_source (>= 0.6.7)
|
|
36
42
|
rake (>= 0.9.2.2)
|
|
37
|
-
method_source (0.
|
|
38
|
-
minitest (5.14.
|
|
39
|
-
minitest-reporters (1.4.
|
|
43
|
+
method_source (1.0.0)
|
|
44
|
+
minitest (5.14.4)
|
|
45
|
+
minitest-reporters (1.4.3)
|
|
40
46
|
ansi
|
|
41
47
|
builder
|
|
42
48
|
minitest (>= 5.0)
|
|
43
49
|
ruby-progressbar
|
|
44
50
|
mysql2 (0.5.3)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
parallel (1.20.1)
|
|
52
|
+
parser (3.0.2.0)
|
|
53
|
+
ast (~> 2.4.1)
|
|
54
|
+
pg (1.2.3)
|
|
55
|
+
pry (0.14.1)
|
|
56
|
+
coderay (~> 1.1)
|
|
57
|
+
method_source (~> 1.0)
|
|
58
|
+
rack (2.2.3)
|
|
59
|
+
rainbow (3.0.0)
|
|
60
|
+
rake (13.0.6)
|
|
61
|
+
rdoc (6.3.2)
|
|
62
|
+
regexp_parser (2.1.1)
|
|
52
63
|
request_store (1.5.0)
|
|
53
64
|
rack (>= 1.4)
|
|
54
|
-
|
|
65
|
+
rexml (3.2.5)
|
|
66
|
+
rubocop (1.20.0)
|
|
67
|
+
parallel (~> 1.10)
|
|
68
|
+
parser (>= 3.0.0.0)
|
|
69
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
70
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
71
|
+
rexml
|
|
72
|
+
rubocop-ast (>= 1.9.1, < 2.0)
|
|
73
|
+
ruby-progressbar (~> 1.7)
|
|
74
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
75
|
+
rubocop-ast (1.11.0)
|
|
76
|
+
parser (>= 3.0.1.1)
|
|
77
|
+
rubocop-performance (1.11.5)
|
|
78
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
79
|
+
rubocop-ast (>= 0.4.0)
|
|
80
|
+
ruby-progressbar (1.11.0)
|
|
55
81
|
sqlite3 (1.4.2)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
82
|
+
standard (1.3.0)
|
|
83
|
+
rubocop (= 1.20.0)
|
|
84
|
+
rubocop-performance (= 1.11.5)
|
|
85
|
+
thor (1.1.0)
|
|
86
|
+
tzinfo (2.0.4)
|
|
87
|
+
concurrent-ruby (~> 1.0)
|
|
88
|
+
unicode-display_width (2.0.0)
|
|
89
|
+
zeitwerk (2.4.2)
|
|
61
90
|
|
|
62
91
|
PLATFORMS
|
|
63
|
-
|
|
92
|
+
arm64-darwin-20
|
|
93
|
+
arm64-darwin-21
|
|
64
94
|
|
|
65
95
|
DEPENDENCIES
|
|
66
96
|
appraisal
|
|
@@ -70,11 +100,12 @@ DEPENDENCIES
|
|
|
70
100
|
minitest
|
|
71
101
|
minitest-reporters
|
|
72
102
|
mysql2
|
|
73
|
-
pg
|
|
103
|
+
pg
|
|
74
104
|
pry
|
|
75
105
|
rake
|
|
76
106
|
rdoc
|
|
77
107
|
sqlite3
|
|
108
|
+
standard
|
|
78
109
|
|
|
79
110
|
BUNDLED WITH
|
|
80
|
-
2.
|
|
111
|
+
2.2.28
|
data/README.md
CHANGED
|
@@ -12,6 +12,11 @@ to add model translations to ActiveRecord models.
|
|
|
12
12
|
|
|
13
13
|
In other words, a way to translate actual user-generated content, for example; a single blog post with multiple translations.
|
|
14
14
|
|
|
15
|
+
## Current state of the gem
|
|
16
|
+
|
|
17
|
+
Globalize is not very actively maintained. Pull Requests are welcome, especially for compatibility with new versions of Rails, but none of the maintainers actively use Globalize anymore. If you need a more actively maintained model translation gem, we recommend checking out [Mobility](https://github.com/shioyama/mobility), a natural successor of Globalize created by Chris Salzberg (one of Globalize maintainers) and inspired by the ideas discussed around Globalize. For a more up-to-date discussion of the current situation, see [issue #753](https://github.com/globalize/globalize/issues/753).
|
|
18
|
+
|
|
19
|
+
|
|
15
20
|
## Requirements
|
|
16
21
|
|
|
17
22
|
* ActiveRecord >= 4.2.0 (see below for installation with ActiveRecord 3.x)
|
data/docker-compose.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
version: '3.7'
|
|
2
|
+
services:
|
|
3
|
+
postgres:
|
|
4
|
+
image: postgres:11
|
|
5
|
+
volumes:
|
|
6
|
+
- ./tmp/postgres:/var/lib/postgresql/data
|
|
7
|
+
ports:
|
|
8
|
+
- "5432:5432"
|
|
9
|
+
environment:
|
|
10
|
+
POSTGRES_USER: "postgres"
|
|
11
|
+
POSTGRES_PASSWORD: ""
|
|
12
|
+
mysql:
|
|
13
|
+
image: mysql:8.0
|
|
14
|
+
volumes:
|
|
15
|
+
- ./tmp/mysql:/var/lib/mysql
|
|
16
|
+
ports:
|
|
17
|
+
- "3306:3306"
|
|
18
|
+
environment:
|
|
19
|
+
MYSQL_USER: "root"
|
|
20
|
+
MYSQL_PASSWORD: ""
|
|
21
|
+
MYSQL_ROOT_PASSWORD: ""
|
|
22
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
data/globalize.gemspec
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/globalize/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = 'globalize'
|
|
7
|
+
s.version = Globalize::Version
|
|
8
|
+
s.authors = ['Sven Fuchs', 'Joshua Harvey', 'Clemens Kofler', 'John-Paul Bader', 'Tomasz Stachewicz', 'Philip Arndt', 'Chris Salzberg']
|
|
9
|
+
s.email = 'nobody@globalize-rails.org'
|
|
10
|
+
s.homepage = 'http://github.com/globalize/globalize'
|
|
11
|
+
s.summary = 'Rails I18n de-facto standard library for ActiveRecord model/data translation'
|
|
12
|
+
s.description = "#{s.summary}."
|
|
13
|
+
s.license = "MIT"
|
|
14
|
+
|
|
15
|
+
s.files = Dir['{lib/**/*,[A-Z]*}']
|
|
16
|
+
s.platform = Gem::Platform::RUBY
|
|
17
|
+
s.require_path = 'lib'
|
|
18
|
+
s.required_ruby_version = '>= 2.4.6'
|
|
19
|
+
|
|
20
|
+
s.add_dependency 'activerecord', '>= 4.2', '< 7.1'
|
|
21
|
+
s.add_dependency 'activemodel', '>= 4.2', '< 7.1'
|
|
22
|
+
s.add_dependency 'request_store', '~> 1.0'
|
|
23
|
+
|
|
24
|
+
s.add_development_dependency 'appraisal'
|
|
25
|
+
s.add_development_dependency 'database_cleaner'
|
|
26
|
+
s.add_development_dependency 'm'
|
|
27
|
+
s.add_development_dependency 'minitest'
|
|
28
|
+
s.add_development_dependency 'minitest-reporters'
|
|
29
|
+
s.add_development_dependency 'pry'
|
|
30
|
+
s.add_development_dependency 'rake'
|
|
31
|
+
s.add_development_dependency 'rdoc'
|
|
32
|
+
|
|
33
|
+
s.cert_chain = [File.expand_path('certs/parndt.pem', __dir__)]
|
|
34
|
+
if $PROGRAM_NAME =~ /gem\z/ && ARGV.include?('build') && ARGV.include?(__FILE__)
|
|
35
|
+
s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
|
36
|
+
end
|
|
37
|
+
end
|
data/issue_template.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Activate the gem you are reporting the issue against.
|
|
2
|
+
gem 'activerecord', '4.2.0'
|
|
3
|
+
gem 'globalize', '5.0.1'
|
|
4
|
+
require 'active_record'
|
|
5
|
+
require 'globalize'
|
|
6
|
+
require 'minitest/autorun'
|
|
7
|
+
require 'logger'
|
|
8
|
+
|
|
9
|
+
# Ensure backward compatibility with Minitest 4
|
|
10
|
+
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
|
|
11
|
+
|
|
12
|
+
# This connection will do for database-independent bug reports.
|
|
13
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
|
14
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
|
15
|
+
|
|
16
|
+
ActiveRecord::Schema.define do
|
|
17
|
+
create_table :posts, force: true do |t|
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
create_table :post_translations, force: true do |t|
|
|
21
|
+
t.references :post
|
|
22
|
+
t.string :title
|
|
23
|
+
t.text :content
|
|
24
|
+
t.string :locale
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Post < ActiveRecord::Base
|
|
29
|
+
translates :content, :title
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class BugTest < Minitest::Test
|
|
33
|
+
def test_association_stuff
|
|
34
|
+
post = Post.create!(title: 'HI')
|
|
35
|
+
|
|
36
|
+
assert_equal 'HI', post.title
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -41,7 +41,7 @@ module Globalize
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
begin
|
|
44
|
-
if
|
|
44
|
+
if Globalize.rails_5? && table_exists? && translation_class.table_exists?
|
|
45
45
|
self.ignored_columns += translated_attribute_names.map(&:to_s)
|
|
46
46
|
reset_column_information
|
|
47
47
|
end
|
|
@@ -52,7 +52,7 @@ module Globalize
|
|
|
52
52
|
|
|
53
53
|
def check_columns!(attr_names)
|
|
54
54
|
# If tables do not exist or Rails version is greater than 5, do not warn about conflicting columns
|
|
55
|
-
return unless
|
|
55
|
+
return unless Globalize.rails_42? && table_exists? && translation_class.table_exists?
|
|
56
56
|
if (overlap = attr_names.map(&:to_s) & column_names).present?
|
|
57
57
|
ActiveSupport::Deprecation.warn(
|
|
58
58
|
["You have defined one or more translated attributes with names that conflict with column(s) on the model table. ",
|
|
@@ -41,11 +41,17 @@ module Globalize
|
|
|
41
41
|
self.dirty = {}
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
if Globalize.rails_6?
|
|
45
|
+
def _reset_attribute name
|
|
46
|
+
record.send(:clear_attribute_changes, [name])
|
|
47
|
+
end
|
|
48
|
+
else
|
|
49
|
+
def _reset_attribute name
|
|
50
|
+
original_value = record.changed_attributes[name]
|
|
51
|
+
record.send(:clear_attribute_changes, [name])
|
|
52
|
+
record.send("#{name}=", original_value)
|
|
53
|
+
record.send(:clear_attribute_changes, [name])
|
|
54
|
+
end
|
|
49
55
|
end
|
|
50
56
|
|
|
51
57
|
def reset
|
|
@@ -53,6 +59,30 @@ module Globalize
|
|
|
53
59
|
super
|
|
54
60
|
end
|
|
55
61
|
|
|
62
|
+
def changed_attributes(locale)
|
|
63
|
+
Hash[changes(locale).map { |name, change| [name, change.first] }]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def changed
|
|
67
|
+
stash.keys.flat_map { |locale| changes(locale).keys }.uniq
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def changes(locale)
|
|
71
|
+
stash[locale].keys.inject({}) do |hash, name|
|
|
72
|
+
next hash unless dirty[name].is_a?(Hash)
|
|
73
|
+
next hash unless dirty[name].key?(locale)
|
|
74
|
+
|
|
75
|
+
new_value = stash[locale][name]
|
|
76
|
+
old_value = dirty[name][locale]
|
|
77
|
+
|
|
78
|
+
unless new_value == old_value
|
|
79
|
+
hash[name] = [old_value, new_value]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
hash
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
56
86
|
end
|
|
57
87
|
end
|
|
58
88
|
end
|
|
@@ -3,7 +3,7 @@ module Globalize
|
|
|
3
3
|
module ClassMethods
|
|
4
4
|
delegate :translated_locales, :set_translations_table_name, :to => :translation_class
|
|
5
5
|
|
|
6
|
-
if
|
|
6
|
+
if Globalize.rails_42?
|
|
7
7
|
def columns_hash
|
|
8
8
|
super.except(*translated_attribute_names.map(&:to_s))
|
|
9
9
|
end
|
|
@@ -120,7 +120,7 @@ module Globalize
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
def define_translations_accessor(name)
|
|
123
|
-
attribute(name, ::ActiveRecord::Type::Value.new) if
|
|
123
|
+
attribute(name, ::ActiveRecord::Type::Value.new) if Globalize.rails_5?
|
|
124
124
|
define_translations_reader(name)
|
|
125
125
|
define_translations_writer(name)
|
|
126
126
|
end
|
|
@@ -66,7 +66,7 @@ module Globalize
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def _read_attribute(attr_name, options = {}, &block)
|
|
69
|
-
translated_value = read_translated_attribute(attr_name, options
|
|
69
|
+
translated_value = read_translated_attribute(attr_name, options)
|
|
70
70
|
translated_value.nil? ? super(attr_name, &block) : translated_value
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -158,17 +158,34 @@ module Globalize
|
|
|
158
158
|
Globalize.fallbacks(locale)
|
|
159
159
|
end
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
if Globalize.ruby_27?
|
|
162
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
163
|
+
def save(...)
|
|
164
|
+
result = Globalize.with_locale(translation.locale || I18n.default_locale) do
|
|
165
|
+
without_fallbacks do
|
|
166
|
+
super
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
if result
|
|
170
|
+
globalize.clear_dirty
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
result
|
|
174
|
+
end
|
|
175
|
+
RUBY
|
|
176
|
+
else
|
|
177
|
+
def save(*)
|
|
178
|
+
result = Globalize.with_locale(translation.locale || I18n.default_locale) do
|
|
179
|
+
without_fallbacks do
|
|
180
|
+
super
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
if result
|
|
184
|
+
globalize.clear_dirty
|
|
165
185
|
end
|
|
166
|
-
end
|
|
167
|
-
if result
|
|
168
|
-
globalize.clear_dirty
|
|
169
|
-
end
|
|
170
186
|
|
|
171
|
-
|
|
187
|
+
result
|
|
188
|
+
end
|
|
172
189
|
end
|
|
173
190
|
|
|
174
191
|
def column_for_attribute name
|
|
@@ -185,6 +202,32 @@ module Globalize
|
|
|
185
202
|
changed_attributes.present? || translations.any?(&:changed?)
|
|
186
203
|
end
|
|
187
204
|
|
|
205
|
+
if Globalize.rails_51?
|
|
206
|
+
def saved_changes
|
|
207
|
+
super.tap do |changes|
|
|
208
|
+
translation = translation_for(::Globalize.locale, false)
|
|
209
|
+
if translation
|
|
210
|
+
translation_changes = translation.saved_changes.select { |name| translated?(name) }
|
|
211
|
+
changes.merge!(translation_changes) if translation_changes.any?
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
if Globalize.rails_6?
|
|
218
|
+
def changed_attributes
|
|
219
|
+
super.merge(globalize.changed_attributes(::Globalize.locale))
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def changes
|
|
223
|
+
super.merge(globalize.changes(::Globalize.locale))
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def changed
|
|
227
|
+
super.concat(globalize.changed).uniq
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
188
231
|
# need to access instance variable directly since changed_attributes
|
|
189
232
|
# is frozen as of Rails 4.2
|
|
190
233
|
def original_changed_attributes
|
|
@@ -236,10 +279,7 @@ module Globalize
|
|
|
236
279
|
return nil unless options[:translated]
|
|
237
280
|
return nil unless translated?(name)
|
|
238
281
|
|
|
239
|
-
|
|
240
|
-
return nil if value.nil?
|
|
241
|
-
|
|
242
|
-
block_given? ? yield(value) : value
|
|
282
|
+
globalize.fetch(options[:locale] || Globalize.locale, name)
|
|
243
283
|
end
|
|
244
284
|
end
|
|
245
285
|
end
|
|
@@ -89,13 +89,27 @@ module Globalize
|
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
if Globalize.rails_6?
|
|
93
|
+
def add_translation_fields
|
|
94
|
+
connection.change_table(translations_table_name) do |t|
|
|
95
|
+
fields.each do |name, options|
|
|
96
|
+
if options.is_a? Hash
|
|
97
|
+
t.column name, options.delete(:type), **options
|
|
98
|
+
else
|
|
99
|
+
t.column name, options
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
else
|
|
105
|
+
def add_translation_fields
|
|
106
|
+
connection.change_table(translations_table_name) do |t|
|
|
107
|
+
fields.each do |name, options|
|
|
108
|
+
if options.is_a? Hash
|
|
109
|
+
t.column name, options.delete(:type), options
|
|
110
|
+
else
|
|
111
|
+
t.column name, options
|
|
112
|
+
end
|
|
99
113
|
end
|
|
100
114
|
end
|
|
101
115
|
end
|
|
@@ -155,6 +169,8 @@ module Globalize
|
|
|
155
169
|
# Create a hash containing the translated column names and their values.
|
|
156
170
|
translated_attribute_names.inject(fields_to_update={}) do |f, name|
|
|
157
171
|
f.update({name.to_sym => translated_record[name.to_s]})
|
|
172
|
+
# Remove attributes that will no longer be translated
|
|
173
|
+
translated_attribute_names.delete(name)
|
|
158
174
|
end
|
|
159
175
|
|
|
160
176
|
# Now, update the actual model's record with the hash.
|
|
@@ -99,7 +99,7 @@ module Globalize
|
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
if
|
|
102
|
+
if Globalize.rails_42?
|
|
103
103
|
def where_values_hash(*args)
|
|
104
104
|
return super unless respond_to?(:translations_table_name)
|
|
105
105
|
equalities = respond_to?(:with_default_scope) ? with_default_scope.where_values : where_values
|
data/lib/globalize/version.rb
CHANGED
data/lib/globalize.rb
CHANGED
|
@@ -6,11 +6,21 @@ require 'patches/active_record/relation'
|
|
|
6
6
|
require 'patches/active_record/serialization'
|
|
7
7
|
require 'patches/active_record/uniqueness_validator'
|
|
8
8
|
require 'patches/active_record/persistence'
|
|
9
|
+
require 'patches/active_support/inflections'
|
|
9
10
|
|
|
10
11
|
module Globalize
|
|
11
12
|
autoload :ActiveRecord, 'globalize/active_record'
|
|
12
13
|
autoload :Interpolation, 'globalize/interpolation'
|
|
13
14
|
|
|
15
|
+
ACTIVE_RECORD_50 = Gem::Version.new('5.0.0')
|
|
16
|
+
ACTIVE_RECORD_51 = Gem::Version.new('5.1.0')
|
|
17
|
+
ACTIVE_RECORD_52 = Gem::Version.new('5.2.0')
|
|
18
|
+
ACTIVE_RECORD_60 = Gem::Version.new('6.0.0')
|
|
19
|
+
ACTIVE_RECORD_61 = Gem::Version.new('6.1.0')
|
|
20
|
+
|
|
21
|
+
CURRENT_RUBY = Gem::Version.new(RUBY_VERSION)
|
|
22
|
+
RUBY_VERSION_27 = Gem::Version.new('2.7.0')
|
|
23
|
+
|
|
14
24
|
class << self
|
|
15
25
|
def locale
|
|
16
26
|
read_locale || I18n.locale
|
|
@@ -58,12 +68,32 @@ module Globalize
|
|
|
58
68
|
RequestStore.store
|
|
59
69
|
end
|
|
60
70
|
|
|
71
|
+
def ruby_27?
|
|
72
|
+
CURRENT_RUBY >= RUBY_VERSION_27
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def rails_42?
|
|
76
|
+
::ActiveRecord.version < ACTIVE_RECORD_50
|
|
77
|
+
end
|
|
78
|
+
|
|
61
79
|
def rails_5?
|
|
62
|
-
::ActiveRecord.version >=
|
|
80
|
+
::ActiveRecord.version >= ACTIVE_RECORD_50
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def rails_51?
|
|
84
|
+
::ActiveRecord.version >= ACTIVE_RECORD_51
|
|
63
85
|
end
|
|
64
86
|
|
|
65
87
|
def rails_52?
|
|
66
|
-
::ActiveRecord.version >=
|
|
88
|
+
::ActiveRecord.version >= ACTIVE_RECORD_52
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def rails_6?
|
|
92
|
+
::ActiveRecord.version >= ACTIVE_RECORD_60
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def rails_61?
|
|
96
|
+
::ActiveRecord.version >= ACTIVE_RECORD_61
|
|
67
97
|
end
|
|
68
98
|
|
|
69
99
|
protected
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
if ::ActiveRecord
|
|
1
|
+
if ::ActiveRecord.version < Gem::Version.new("5.0.0")
|
|
2
2
|
require_relative 'rails4/query_method'
|
|
3
|
-
end
|
|
3
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Globalize
|
|
2
|
+
module Validations
|
|
3
|
+
module UniquenessValidator
|
|
4
|
+
def validate_each(record, attribute, value)
|
|
5
|
+
klass = record.class
|
|
6
|
+
if klass.translates? && klass.translated?(attribute)
|
|
7
|
+
finder_class = klass.translation_class
|
|
8
|
+
relation = build_relation(finder_class, attribute, value).where(locale: Globalize.locale)
|
|
9
|
+
relation = relation.where.not(klass.reflect_on_association(:translations).foreign_key => record.send(:id)) if record.persisted?
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
translated_scopes = Array(options[:scope]) & klass.translated_attribute_names
|
|
13
|
+
untranslated_scopes = Array(options[:scope]) - translated_scopes
|
|
14
|
+
|
|
15
|
+
relation = relation.joins(:globalized_model) if untranslated_scopes.present?
|
|
16
|
+
untranslated_scopes.each do |scope_item|
|
|
17
|
+
scope_value = record.send(scope_item)
|
|
18
|
+
reflection = klass.reflect_on_association(scope_item)
|
|
19
|
+
if reflection
|
|
20
|
+
scope_value = record.send(reflection.foreign_key)
|
|
21
|
+
scope_item = reflection.foreign_key
|
|
22
|
+
end
|
|
23
|
+
relation = relation.where(find_finder_class_for(record).table_name => { scope_item => scope_value })
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
translated_scopes.each do |scope_item|
|
|
27
|
+
scope_value = record.send(scope_item)
|
|
28
|
+
relation = relation.where(scope_item => scope_value)
|
|
29
|
+
end
|
|
30
|
+
relation = relation.merge(options[:conditions]) if options[:conditions]
|
|
31
|
+
|
|
32
|
+
if relation.exists?
|
|
33
|
+
error_options = options.except(:case_sensitive, :scope, :conditions)
|
|
34
|
+
error_options[:value] = value
|
|
35
|
+
record.errors.add(attribute, :taken, **error_options)
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
super(record, attribute, value)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
ActiveRecord::Validations::UniquenessValidator.prepend Globalize::Validations::UniquenessValidator
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
if ::ActiveRecord
|
|
1
|
+
if ::ActiveRecord.version >= Gem::Version.new("5.0.0")
|
|
2
2
|
module Globalize
|
|
3
3
|
module Relation
|
|
4
4
|
def where_values_hash(relation_table_name = table_name)
|
|
5
5
|
return super unless respond_to?(:translations_table_name)
|
|
6
6
|
super.merge(super(translations_table_name))
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
if ::ActiveRecord.version >= Gem::Version.new("6.1.3")
|
|
10
|
+
def scope_for_create
|
|
11
|
+
return super unless respond_to?(:translations_table_name)
|
|
12
|
+
super.merge(where_values_hash(translations_table_name))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
8
15
|
end
|
|
9
16
|
end
|
|
10
17
|
|
|
11
18
|
ActiveRecord::Relation.prepend Globalize::Relation
|
|
12
|
-
end
|
|
19
|
+
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
if ::ActiveRecord
|
|
1
|
+
if ::ActiveRecord.version < Gem::Version.new("5.0.0")
|
|
2
2
|
require_relative 'rails4/uniqueness_validator'
|
|
3
|
-
elsif ::ActiveRecord
|
|
3
|
+
elsif ::ActiveRecord.version < Gem::Version.new("5.1.0")
|
|
4
4
|
require_relative 'rails5/uniqueness_validator'
|
|
5
|
-
|
|
5
|
+
elsif ::ActiveRecord.version < Gem::Version.new("6.1.0")
|
|
6
6
|
require_relative 'rails5_1/uniqueness_validator'
|
|
7
|
-
|
|
7
|
+
else
|
|
8
|
+
require_relative 'rails6_1/uniqueness_validator'
|
|
9
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
if ::ActiveSupport.version >= Gem::Version.new("7.0.0")
|
|
2
|
+
module Globalize
|
|
3
|
+
module Inflections
|
|
4
|
+
def instance_or_fallback(locale)
|
|
5
|
+
I18n.respond_to?(:fallbacks) && I18n.fallbacks[locale].each do |k|
|
|
6
|
+
return @__instance__[k] if @__instance__.key?(k)
|
|
7
|
+
end
|
|
8
|
+
instance(locale)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
ActiveSupport::Inflector::Inflections.singleton_class.send :prepend, Globalize::Inflections
|
|
14
|
+
end
|
data.tar.gz.sig
ADDED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: globalize
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.
|
|
4
|
+
version: 6.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sven Fuchs
|
|
@@ -11,10 +11,36 @@ authors:
|
|
|
11
11
|
- Tomasz Stachewicz
|
|
12
12
|
- Philip Arndt
|
|
13
13
|
- Chris Salzberg
|
|
14
|
-
autorequire:
|
|
14
|
+
autorequire:
|
|
15
15
|
bindir: bin
|
|
16
|
-
cert_chain:
|
|
17
|
-
|
|
16
|
+
cert_chain:
|
|
17
|
+
- |
|
|
18
|
+
-----BEGIN CERTIFICATE-----
|
|
19
|
+
MIIEMjCCApqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhnZW1z
|
|
20
|
+
L0RDPXAvREM9YXJuZHQvREM9aW8wHhcNMjEwNjIzMDkyNzU2WhcNMjIwNjIzMDky
|
|
21
|
+
NzU2WjAjMSEwHwYDVQQDDBhnZW1zL0RDPXAvREM9YXJuZHQvREM9aW8wggGiMA0G
|
|
22
|
+
CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQD0CYnD37uLlJ3Urla2EnnUQ8S6s16k
|
|
23
|
+
AGMpAzpmARo8YwSqtYMJVGyBzUeI7y93Fk9ncswhIFSH/hnh/Ouat/ki9flHlZ+w
|
|
24
|
+
anv0M+9v3wCLyZSC5BQIWpoduFM/fuvLoDUJDWxL50RjwMS0qo2x2LvfQdHN8gn3
|
|
25
|
+
JdSIV5WLJKIvlmIl9S3pw0JO5KRUGn1PcBO7C0S0SlbhVjRHtlao1ycWUULsX109
|
|
26
|
+
hCh39MPGtnZpdCcxheh0TH/UA/jV0/du9/rQdoidkNHkaC24pPfBJ3nS+rAbWaHP
|
|
27
|
+
WmP+0rjfk/XnGBu/HZpKvlnwQjP3QdK4UMtWl8zewqFMNcIiBRALQugnL/SfrP/4
|
|
28
|
+
CSlha9LwkiE6ByeY4WGnNjNqpi5J3IzjEkZRAxG7u9gCB3FzTaBTyXZYI6jplYNw
|
|
29
|
+
TcCJIBHuoPaa+m9brpjb3Uv94nfM97ZP+OmpGYCCAMq4TT7OOV+t8wJc0w8bb0FO
|
|
30
|
+
ROhmVNTxrBaNcl6MkZn88EMRCsGgoWklOG0CAwEAAaNxMG8wCQYDVR0TBAIwADAL
|
|
31
|
+
BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGu7pbmeILyHnBmannuaNRfdN8MsMBoGA1Ud
|
|
32
|
+
EQQTMBGBD2dlbXNAcC5hcm5kdC5pbzAaBgNVHRIEEzARgQ9nZW1zQHAuYXJuZHQu
|
|
33
|
+
aW8wDQYJKoZIhvcNAQELBQADggGBANlxc4uAnkPC3zbztG7uZfBfn4HSuvv655Pa
|
|
34
|
+
UaYZ6hNETFrqg78mGs3PkFe2Ru7cVWwckbmH46aq50QoNnx4ClxT03vr03n76Jg1
|
|
35
|
+
8WWHkf0+rcINFlbtIFcmcFrois5Ow3n7pH+xstDtzoWcbh41WwuZStNhrIYsnjAK
|
|
36
|
+
/ovz8D5JlboxceOpVLB/0NiqNEWltK+EMQHmX25Sqf/r5o5rAL9zwEKPFp1Y5X+z
|
|
37
|
+
t2jBjYt2ymr1eMWxux6e+N2uKZL4MblHawxvKlI8UHsIiV9xrc4BwlwlbitcvNIL
|
|
38
|
+
ZykdSlpTJd0Guy92iYjCJMC09tMRUNxiVBwD3jRGSeW9YAPIZGXIcVlm6srIRDjJ
|
|
39
|
+
o8wB6oOvHAkRXnntOo/4bBDH+ehmgvhh/O/mI+au6C0M430fv+ooH0w08LEXLx1k
|
|
40
|
+
e17ZNASZffbQRP09MH2GZ2AOlkildTX6looWRforZEZi+qamognrozd3MI5QHi1W
|
|
41
|
+
UAZUzHLrrFu7gnkFvLVpxOUf4ItOkA==
|
|
42
|
+
-----END CERTIFICATE-----
|
|
43
|
+
date: 2022-02-25 00:00:00.000000000 Z
|
|
18
44
|
dependencies:
|
|
19
45
|
- !ruby/object:Gem::Dependency
|
|
20
46
|
name: activerecord
|
|
@@ -25,7 +51,7 @@ dependencies:
|
|
|
25
51
|
version: '4.2'
|
|
26
52
|
- - "<"
|
|
27
53
|
- !ruby/object:Gem::Version
|
|
28
|
-
version: '7.
|
|
54
|
+
version: '7.1'
|
|
29
55
|
type: :runtime
|
|
30
56
|
prerelease: false
|
|
31
57
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -35,7 +61,7 @@ dependencies:
|
|
|
35
61
|
version: '4.2'
|
|
36
62
|
- - "<"
|
|
37
63
|
- !ruby/object:Gem::Version
|
|
38
|
-
version: '7.
|
|
64
|
+
version: '7.1'
|
|
39
65
|
- !ruby/object:Gem::Dependency
|
|
40
66
|
name: activemodel
|
|
41
67
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -45,7 +71,7 @@ dependencies:
|
|
|
45
71
|
version: '4.2'
|
|
46
72
|
- - "<"
|
|
47
73
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '7.
|
|
74
|
+
version: '7.1'
|
|
49
75
|
type: :runtime
|
|
50
76
|
prerelease: false
|
|
51
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -55,7 +81,7 @@ dependencies:
|
|
|
55
81
|
version: '4.2'
|
|
56
82
|
- - "<"
|
|
57
83
|
- !ruby/object:Gem::Version
|
|
58
|
-
version: '7.
|
|
84
|
+
version: '7.1'
|
|
59
85
|
- !ruby/object:Gem::Dependency
|
|
60
86
|
name: request_store
|
|
61
87
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -196,6 +222,9 @@ files:
|
|
|
196
222
|
- LICENSE
|
|
197
223
|
- README.md
|
|
198
224
|
- Rakefile
|
|
225
|
+
- docker-compose.yml
|
|
226
|
+
- globalize.gemspec
|
|
227
|
+
- issue_template.rb
|
|
199
228
|
- lib/globalize.rb
|
|
200
229
|
- lib/globalize/active_record.rb
|
|
201
230
|
- lib/globalize/active_record/act_macro.rb
|
|
@@ -220,15 +249,17 @@ files:
|
|
|
220
249
|
- lib/patches/active_record/rails5/uniqueness_validator.rb
|
|
221
250
|
- lib/patches/active_record/rails5_1/serialization.rb
|
|
222
251
|
- lib/patches/active_record/rails5_1/uniqueness_validator.rb
|
|
252
|
+
- lib/patches/active_record/rails6_1/uniqueness_validator.rb
|
|
223
253
|
- lib/patches/active_record/relation.rb
|
|
224
254
|
- lib/patches/active_record/serialization.rb
|
|
225
255
|
- lib/patches/active_record/uniqueness_validator.rb
|
|
226
256
|
- lib/patches/active_record/xml_attribute_serializer.rb
|
|
257
|
+
- lib/patches/active_support/inflections.rb
|
|
227
258
|
homepage: http://github.com/globalize/globalize
|
|
228
259
|
licenses:
|
|
229
260
|
- MIT
|
|
230
261
|
metadata: {}
|
|
231
|
-
post_install_message:
|
|
262
|
+
post_install_message:
|
|
232
263
|
rdoc_options: []
|
|
233
264
|
require_paths:
|
|
234
265
|
- lib
|
|
@@ -239,12 +270,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
239
270
|
version: 2.4.6
|
|
240
271
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
272
|
requirements:
|
|
242
|
-
- - "
|
|
273
|
+
- - ">="
|
|
243
274
|
- !ruby/object:Gem::Version
|
|
244
|
-
version:
|
|
275
|
+
version: '0'
|
|
245
276
|
requirements: []
|
|
246
|
-
rubygems_version: 3.
|
|
247
|
-
signing_key:
|
|
277
|
+
rubygems_version: 3.2.32
|
|
278
|
+
signing_key:
|
|
248
279
|
specification_version: 4
|
|
249
280
|
summary: Rails I18n de-facto standard library for ActiveRecord model/data translation
|
|
250
281
|
test_files: []
|
metadata.gz.sig
ADDED
|
Binary file
|