globalize 5.1.0.beta1 → 5.1.0.beta2
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/README.md +6 -0
- data/lib/globalize/active_record/act_macro.rb +11 -6
- data/lib/globalize/active_record/class_methods.rb +5 -1
- data/lib/globalize/active_record/migration.rb +6 -1
- data/lib/globalize/active_record/query_methods.rb +1 -1
- data/lib/globalize/version.rb +1 -1
- data/lib/patches/active_record/rails5_1/uniqueness_validator.rb +45 -0
- data/lib/patches/active_record/uniqueness_validator.rb +3 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 022f5a7b02ac3094cda16a9b96865dc8400fe8d3
|
4
|
+
data.tar.gz: cf25f8aba6cfe3d10b2ecab5da50f7cb4f9701fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a6e00bb94a8f1880a340e6d2172dbdb5fee942f99ee9cb09f02cfcc947ff7004945b5c714c10ab8bcf9993a6b3763407acb697a63bb59293e685402e941d22d
|
7
|
+
data.tar.gz: 0a56bb170ef716dc6c9cef4b98209407ec007786245b223be226dfd43637321c1064af4aaa7d9523d2ffb7c8e13b1032ee6f633251f2a50f60460d60354286b5
|
data/README.md
CHANGED
@@ -239,6 +239,12 @@ Because globalize uses the `:locale` key to specify the locale during
|
|
239
239
|
mass-assignment, you should avoid having a `locale` attribute on the parent
|
240
240
|
model.
|
241
241
|
|
242
|
+
If you like your translated model to update if a translation changes, use the `touch: true` option together with `translates`:
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
translates :name, touch: true
|
246
|
+
```
|
247
|
+
|
242
248
|
## Known Issues
|
243
249
|
|
244
250
|
If you're getting the `ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR: null value in column "column_name" violates not-null constraint` error, the only known way to deal with it as of now is to remove not-null constraint for the globalized columns:
|
@@ -40,16 +40,19 @@ module Globalize
|
|
40
40
|
self.translated_attribute_names << attr_name
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
begin
|
44
|
+
if ::ActiveRecord::VERSION::STRING > "5.0" && table_exists? &&translation_class.table_exists?
|
45
|
+
self.ignored_columns += translated_attribute_names.map(&:to_s)
|
46
|
+
reset_column_information
|
47
|
+
end
|
48
|
+
rescue ::ActiveRecord::NoDatabaseError
|
49
|
+
warn 'Unable to connect to a database. Globalize skipped ignoring columns of translated attributes.'
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
49
53
|
def check_columns!(attr_names)
|
50
|
-
# If tables do not exist, do not warn about conflicting columns
|
51
|
-
return unless table_exists? && translation_class.table_exists?
|
52
|
-
|
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?
|
53
56
|
if (overlap = attr_names.map(&:to_s) & column_names).present?
|
54
57
|
ActiveSupport::Deprecation.warn(
|
55
58
|
["You have defined one or more translated attributes with names that conflict with column(s) on the model table. ",
|
@@ -58,6 +61,8 @@ module Globalize
|
|
58
61
|
"Attribute name(s): #{overlap.join(', ')}\n"].join
|
59
62
|
)
|
60
63
|
end
|
64
|
+
rescue ::ActiveRecord::NoDatabaseError
|
65
|
+
warn 'Unable to connect to a database. Globalize skipped checking attributes with conflicting column names.'
|
61
66
|
end
|
62
67
|
|
63
68
|
def apply_globalize_options(options)
|
@@ -56,7 +56,11 @@ module Globalize
|
|
56
56
|
klass = self.const_set(:Translation, Class.new(Globalize::ActiveRecord::Translation))
|
57
57
|
end
|
58
58
|
|
59
|
-
klass.belongs_to :globalized_model,
|
59
|
+
klass.belongs_to :globalized_model,
|
60
|
+
class_name: self.name,
|
61
|
+
foreign_key: translation_options[:foreign_key],
|
62
|
+
inverse_of: :translations,
|
63
|
+
touch: translation_options.fetch(:touch, false)
|
60
64
|
klass
|
61
65
|
end
|
62
66
|
end
|
@@ -53,7 +53,12 @@ module Globalize
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def remove_source_columns
|
56
|
-
|
56
|
+
column_names = *fields.keys
|
57
|
+
column_names.each do |column|
|
58
|
+
if connection.column_exists?(table_name, column)
|
59
|
+
connection.remove_column(table_name, column)
|
60
|
+
end
|
61
|
+
end
|
57
62
|
end
|
58
63
|
|
59
64
|
def drop_translation_table!(options = {})
|
@@ -86,7 +86,7 @@ module Globalize
|
|
86
86
|
# Inject `full_column` to the select values to avoid
|
87
87
|
# PG::InvalidColumnReference errors with distinct queries on Postgres
|
88
88
|
if select_values.empty?
|
89
|
-
self.select_values = [Arel.star, full_column]
|
89
|
+
self.select_values = [self.arel_table[Arel.star], full_column]
|
90
90
|
else
|
91
91
|
self.select_values << full_column
|
92
92
|
end
|
data/lib/globalize/version.rb
CHANGED
@@ -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
|
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: 5.1.0.
|
4
|
+
version: 5.1.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Fuchs
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-
|
17
|
+
date: 2017-07-25 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
version: '4.2'
|
26
26
|
- - "<"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '5.
|
28
|
+
version: '5.2'
|
29
29
|
type: :runtime
|
30
30
|
prerelease: false
|
31
31
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -35,7 +35,7 @@ dependencies:
|
|
35
35
|
version: '4.2'
|
36
36
|
- - "<"
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: '5.
|
38
|
+
version: '5.2'
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: activemodel
|
41
41
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
version: '4.2'
|
46
46
|
- - "<"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '5.
|
48
|
+
version: '5.2'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
version: '4.2'
|
56
56
|
- - "<"
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: '5.
|
58
|
+
version: '5.2'
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: request_store
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/patches/active_record/rails4/query_method.rb
|
175
175
|
- lib/patches/active_record/rails4/uniqueness_validator.rb
|
176
176
|
- lib/patches/active_record/rails5/uniqueness_validator.rb
|
177
|
+
- lib/patches/active_record/rails5_1/uniqueness_validator.rb
|
177
178
|
- lib/patches/active_record/relation.rb
|
178
179
|
- lib/patches/active_record/serialization.rb
|
179
180
|
- lib/patches/active_record/uniqueness_validator.rb
|
@@ -198,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
199
|
version: 1.3.1
|
199
200
|
requirements: []
|
200
201
|
rubyforge_project: "[none]"
|
201
|
-
rubygems_version: 2.6.
|
202
|
+
rubygems_version: 2.6.11
|
202
203
|
signing_key:
|
203
204
|
specification_version: 4
|
204
205
|
summary: Rails I18n de-facto standard library for ActiveRecord model/data translation
|