globalize 6.0.0.alpha.1 → 6.1.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
2
  SHA256:
3
- metadata.gz: bb12d7f3b6c17018cefe1614dfba6b585ba169ef2ca412b58d230ccabf778033
4
- data.tar.gz: ac44f2e8a75b53ad116b8674d1f5c3d47a122c9782133e3853359217fb944375
3
+ metadata.gz: 70e3196446a295412903e65b76e6a1d834904abb732a7692232936fa782f4a9a
4
+ data.tar.gz: 672eddfec21d2d7205d36bbbe176f646f84511c51a5508056cea828d2d8f2751
5
5
  SHA512:
6
- metadata.gz: 2f358f026bc47645ae8751cb3b2a3a7660cfbbb64c6c37e2ab2b46a9b548de357ba0e8a8880eb82326ce78c6e7605c31fbf27726d645b33baa62c594bace13b5
7
- data.tar.gz: 185fbeea91d8fda53c23232897deba40ad149fbea99c329a32aa8d9bbd7c296c4b9a5a814ced76d39785969d8503011f9316bc600a07de7e82b1a03fe0c3a76a
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.10
5
- 5.1.6
6
- 5.2.1
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
- platforms :rbx do
15
- gem "rubysl", "~> 2.0"
16
- gem "rubinius-developer_tools"
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
- ## Unreleased
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
@@ -15,6 +15,6 @@ end
15
15
 
16
16
  if !ENV['CI'] || %w(postgres postgresql).include?(ENV['DB'])
17
17
  group :postgres, :postgresql do
18
- gem 'pg', '< 1.0', platforms: [:ruby, :rbx]
18
+ gem 'pg', platforms: [:ruby, :rbx]
19
19
  end
20
20
  end
data/Gemfile.lock CHANGED
@@ -1,66 +1,96 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- globalize (5.3.0)
5
- activemodel (>= 4.2, < 6.1)
6
- activerecord (>= 4.2, < 6.1)
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.0.2.1)
13
- activesupport (= 6.0.2.1)
14
- activerecord (6.0.2.1)
15
- activemodel (= 6.0.2.1)
16
- activesupport (= 6.0.2.1)
17
- activesupport (6.0.2.1)
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 (>= 0.7, < 2)
20
- minitest (~> 5.1)
21
- tzinfo (~> 1.1)
22
- zeitwerk (~> 2.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.2.0)
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.2)
30
- concurrent-ruby (1.1.6)
31
- database_cleaner (1.8.2)
32
- i18n (1.8.2)
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.5.1)
40
+ m (1.6.0)
35
41
  method_source (>= 0.6.7)
36
42
  rake (>= 0.9.2.2)
37
- method_source (0.9.2)
38
- minitest (5.14.0)
39
- minitest-reporters (1.4.2)
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
- pg (0.21.0)
46
- pry (0.12.2)
47
- coderay (~> 1.1.0)
48
- method_source (~> 0.9.0)
49
- rack (2.2.2)
50
- rake (13.0.1)
51
- rdoc (6.2.1)
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
- ruby-progressbar (1.10.1)
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
- thor (1.0.1)
57
- thread_safe (0.3.6)
58
- tzinfo (1.2.6)
59
- thread_safe (~> 0.1)
60
- zeitwerk (2.2.2)
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
- ruby
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 (< 1.0)
103
+ pg
74
104
  pry
75
105
  rake
76
106
  rdoc
77
107
  sqlite3
108
+ standard
78
109
 
79
110
  BUNDLED WITH
80
- 2.1.4
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)
@@ -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 ::ActiveRecord::VERSION::STRING > "5.0" && table_exists? && translation_class.table_exists?
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 ::ActiveRecord::VERSION::STRING < "5.0" && table_exists? && translation_class.table_exists?
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
- def _reset_attribute name
45
- original_value = record.changed_attributes[name]
46
- record.send(:clear_attribute_changes, [name])
47
- record.send("#{name}=", original_value)
48
- record.send(:clear_attribute_changes, [name])
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 ::ActiveRecord::VERSION::STRING < "5.0.0"
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 ::ActiveRecord::VERSION::STRING >= "5.0"
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, &block)
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
- def save(*)
162
- result = Globalize.with_locale(translation.locale || I18n.default_locale) do
163
- without_fallbacks do
164
- super
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
- result
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
- value = globalize.fetch(options[:locale] || Globalize.locale, name)
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
- def add_translation_fields
93
- connection.change_table(translations_table_name) do |t|
94
- fields.each do |name, options|
95
- if options.is_a? Hash
96
- t.column name, options.delete(:type), options
97
- else
98
- t.column name, options
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 ::ActiveRecord::VERSION::STRING < "5.0.0"
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Globalize
4
- Version = '6.0.0.alpha.1'
4
+ Version = '6.1.0'
5
5
  end
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 >= Gem::Version.new('5.1.0')
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 >= Gem::Version.new('5.2.0')
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::VERSION::STRING < "5.0.0"
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::VERSION::STRING >= "5.0.0"
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,5 +1,5 @@
1
- if ::ActiveRecord::VERSION::STRING < "5.1.0"
1
+ if ::ActiveRecord.version < Gem::Version.new("5.1.0")
2
2
  require_relative 'rails4/serialization'
3
3
  else
4
4
  require_relative 'rails5_1/serialization'
5
- end
5
+ end
@@ -1,7 +1,9 @@
1
- if ::ActiveRecord::VERSION::STRING < "5.0.0"
1
+ if ::ActiveRecord.version < Gem::Version.new("5.0.0")
2
2
  require_relative 'rails4/uniqueness_validator'
3
- elsif ::ActiveRecord::VERSION::STRING < "5.1.0"
3
+ elsif ::ActiveRecord.version < Gem::Version.new("5.1.0")
4
4
  require_relative 'rails5/uniqueness_validator'
5
- else
5
+ elsif ::ActiveRecord.version < Gem::Version.new("6.1.0")
6
6
  require_relative 'rails5_1/uniqueness_validator'
7
- end
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.0.0.alpha.1
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
- date: 2020-04-19 00:00:00.000000000 Z
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.0'
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.0'
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.0'
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.0'
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: 1.3.1
275
+ version: '0'
245
276
  requirements: []
246
- rubygems_version: 3.0.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