globalize 5.0.1 → 5.2.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.
Files changed (34) hide show
  1. checksums.yaml +5 -5
  2. data/Appraisals +33 -0
  3. data/CHANGELOG.md +12 -0
  4. data/CONTRIBUTING.md +15 -0
  5. data/Gemfile +0 -9
  6. data/Gemfile.lock +59 -241
  7. data/{readme.md → README.md} +124 -36
  8. data/Rakefile +33 -0
  9. data/lib/globalize/active_record/act_macro.rb +27 -1
  10. data/lib/globalize/active_record/adapter.rb +13 -5
  11. data/lib/globalize/active_record/adapter_dirty.rb +56 -0
  12. data/lib/globalize/active_record/class_methods.rb +23 -9
  13. data/lib/globalize/active_record/exceptions.rb +1 -7
  14. data/lib/globalize/active_record/instance_methods.rb +89 -41
  15. data/lib/globalize/active_record/migration.rb +58 -31
  16. data/lib/globalize/active_record/translated_attributes_query.rb +181 -0
  17. data/lib/globalize/active_record.rb +10 -9
  18. data/lib/globalize/version.rb +1 -1
  19. data/lib/globalize.rb +20 -6
  20. data/lib/patches/active_record/persistence.rb +6 -15
  21. data/lib/patches/active_record/query_method.rb +2 -34
  22. data/lib/patches/active_record/rails4/query_method.rb +35 -0
  23. data/lib/patches/active_record/rails4/serialization.rb +22 -0
  24. data/lib/patches/active_record/rails4/uniqueness_validator.rb +42 -0
  25. data/lib/patches/active_record/rails5/uniqueness_validator.rb +47 -0
  26. data/lib/patches/active_record/rails5_1/serialization.rb +22 -0
  27. data/lib/patches/active_record/rails5_1/uniqueness_validator.rb +45 -0
  28. data/lib/patches/active_record/relation.rb +12 -0
  29. data/lib/patches/active_record/serialization.rb +5 -24
  30. data/lib/patches/active_record/uniqueness_validator.rb +7 -39
  31. data/lib/patches/active_record/xml_attribute_serializer.rb +19 -9
  32. metadata +85 -22
  33. data/globalize.gemspec +0 -29
  34. data/lib/globalize/active_record/query_methods.rb +0 -98
@@ -0,0 +1,47 @@
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
+ finder_table = finder_class.arel_table
9
+ relation = build_relation(finder_class, finder_table, attribute, value).where(locale: Globalize.locale)
10
+ relation = relation.where.not(klass.reflect_on_association(:translations).foreign_key => record.send(:id)) if record.persisted?
11
+
12
+
13
+ translated_scopes = Array(options[:scope]) & klass.translated_attribute_names
14
+ untranslated_scopes = Array(options[:scope]) - translated_scopes
15
+
16
+ relation = relation.joins(:globalized_model) if untranslated_scopes.present?
17
+ untranslated_scopes.each do |scope_item|
18
+ scope_value = record.send(scope_item)
19
+ reflection = klass.reflect_on_association(scope_item)
20
+ if reflection
21
+ scope_value = record.send(reflection.foreign_key)
22
+ scope_item = reflection.foreign_key
23
+ end
24
+ relation = relation.where(find_finder_class_for(record).table_name => { scope_item => scope_value })
25
+ end
26
+
27
+ translated_scopes.each do |scope_item|
28
+ scope_value = record.send(scope_item)
29
+ relation = relation.where(scope_item => scope_value)
30
+ end
31
+ relation = relation.merge(options[:conditions]) if options[:conditions]
32
+
33
+ # if klass.unscoped.with_translations.where(relation).exists?
34
+ if relation.exists?
35
+ error_options = options.except(:case_sensitive, :scope, :conditions)
36
+ error_options[:value] = value
37
+ record.errors.add(attribute, :taken, error_options)
38
+ end
39
+ else
40
+ super(record, attribute, value)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ ActiveRecord::Validations::UniquenessValidator.prepend Globalize::Validations::UniquenessValidator
@@ -0,0 +1,22 @@
1
+ module Globalize
2
+ module AttributeMethods
3
+ module Serialization
4
+ def serialize(attr_name, class_name_or_coder = Object)
5
+ super(attr_name, class_name_or_coder)
6
+
7
+ coder = if class_name_or_coder == ::JSON
8
+ ::ActiveRecord::Coders::JSON
9
+ elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
10
+ class_name_or_coder
11
+ else
12
+ ::ActiveRecord::Coders::YAMLColumn.new(attr_name, class_name_or_coder)
13
+ end
14
+
15
+ self.globalize_serialized_attributes = globalize_serialized_attributes.dup
16
+ self.globalize_serialized_attributes[attr_name] = coder
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ ActiveRecord::AttributeMethods::Serialization::ClassMethods.send(:prepend, Globalize::AttributeMethods::Serialization)
@@ -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
@@ -0,0 +1,12 @@
1
+ if ::ActiveRecord::VERSION::STRING >= "5.0.0"
2
+ module Globalize
3
+ module Relation
4
+ def where_values_hash(relation_table_name = table_name)
5
+ return super unless respond_to?(:translations_table_name)
6
+ super.merge(super(translations_table_name))
7
+ end
8
+ end
9
+ end
10
+
11
+ ActiveRecord::Relation.prepend Globalize::Relation
12
+ end
@@ -1,24 +1,5 @@
1
- module ActiveRecord
2
- module AttributeMethods
3
- module Serialization
4
- extend ActiveSupport::Concern
5
-
6
- module ClassMethods
7
- def serialize_with_globalize(attr_name, class_name_or_coder = Object)
8
- serialize_without_globalize(attr_name, class_name_or_coder)
9
-
10
- coder = if class_name_or_coder == ::JSON
11
- Coders::JSON
12
- elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
13
- class_name_or_coder
14
- else
15
- Coders::YAMLColumn.new(class_name_or_coder)
16
- end
17
-
18
- self.globalize_serialized_attributes[attr_name] = coder
19
- end
20
- alias_method_chain :serialize, :globalize
21
- end
22
- end
23
- end
24
- end
1
+ if ::ActiveRecord::VERSION::STRING < "5.1.0"
2
+ require_relative 'rails4/serialization'
3
+ else
4
+ require_relative 'rails5_1/serialization'
5
+ end
@@ -1,39 +1,7 @@
1
- require 'active_record/validations/uniqueness.rb'
2
-
3
- ActiveRecord::Validations::UniquenessValidator.class_eval do
4
- def validate_each_with_translations(record, attribute, value)
5
- klass = record.class
6
- if klass.translates? && klass.translated?(attribute)
7
- finder_class = klass.translation_class
8
- table = finder_class.arel_table
9
-
10
- relation = build_relation(finder_class, table, attribute, value).and(table[:locale].eq(Globalize.locale))
11
- relation = relation.and(table[klass.reflect_on_association(:translations).foreign_key].not_eq(record.send(:id))) if record.persisted?
12
-
13
- translated_scopes = Array(options[:scope]) & klass.translated_attribute_names
14
- untranslated_scopes = Array(options[:scope]) - translated_scopes
15
-
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.and(find_finder_class_for(record).arel_table[scope_item].eq(scope_value))
24
- end
25
-
26
- translated_scopes.each do |scope_item|
27
- scope_value = record.send(scope_item)
28
- relation = relation.and(table[scope_item].eq(scope_value))
29
- end
30
-
31
- if klass.unscoped.with_translations.where(relation).exists?
32
- record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value))
33
- end
34
- else
35
- validate_each_without_translations(record, attribute, value)
36
- end
37
- end
38
- alias_method_chain :validate_each, :translations
39
- end
1
+ if ::ActiveRecord::VERSION::STRING < "5.0.0"
2
+ require_relative 'rails4/uniqueness_validator'
3
+ elsif ::ActiveRecord::VERSION::STRING < "5.1.0"
4
+ require_relative 'rails5/uniqueness_validator'
5
+ else
6
+ require_relative 'rails5_1/uniqueness_validator'
7
+ end
@@ -1,13 +1,23 @@
1
- require 'active_record/serializers/xml_serializer'
1
+ begin
2
+ require 'active_record/serializers/xml_serializer'
3
+ rescue LoadError
4
+ end
2
5
 
3
- ActiveRecord::XmlSerializer::Attribute.class_eval do
4
- def compute_type_with_translations
5
- klass = @serializable.class
6
- if klass.translates? && klass.translated_attribute_names.include?(name.to_sym)
7
- :string
8
- else
9
- compute_type_without_translations
6
+ module Globalize
7
+ module XmlSerializer
8
+ module Attribute
9
+ def compute_type
10
+ klass = @serializable.class
11
+ if klass.translates? && klass.translated_attribute_names.include?(name.to_sym)
12
+ :string
13
+ else
14
+ super
15
+ end
16
+ end
10
17
  end
11
18
  end
12
- alias_method_chain :compute_type, :translations
19
+ end
20
+
21
+ if defined?(ActiveRecord::XmlSerializer)
22
+ ActiveRecord::XmlSerializer::Attribute.send(:prepend, Globalize::XmlSerializer::Attribute)
13
23
  end
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.0.1
4
+ version: 5.2.0
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: 2015-02-15 00:00:00.000000000 Z
17
+ date: 2018-11-02 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord
@@ -22,54 +22,96 @@ dependencies:
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 4.2.0
25
+ version: '4.2'
26
26
  - - "<"
27
27
  - !ruby/object:Gem::Version
28
- version: '4.3'
28
+ version: '5.3'
29
29
  type: :runtime
30
30
  prerelease: false
31
31
  version_requirements: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 4.2.0
35
+ version: '4.2'
36
36
  - - "<"
37
37
  - !ruby/object:Gem::Version
38
- version: '4.3'
38
+ version: '5.3'
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: activemodel
41
41
  requirement: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 4.2.0
45
+ version: '4.2'
46
46
  - - "<"
47
47
  - !ruby/object:Gem::Version
48
- version: '4.3'
48
+ version: '5.3'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 4.2.0
55
+ version: '4.2'
56
56
  - - "<"
57
57
  - !ruby/object:Gem::Version
58
- version: '4.3'
58
+ version: '5.3'
59
59
  - !ruby/object:Gem::Dependency
60
- name: database_cleaner
60
+ name: request_store
61
61
  requirement: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - "~>"
64
64
  - !ruby/object:Gem::Version
65
- version: 1.4.0
66
- type: :development
65
+ version: '1.0'
66
+ type: :runtime
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - "~>"
71
71
  - !ruby/object:Gem::Version
72
- version: 1.4.0
72
+ version: '1.0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: appraisal
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: database_cleaner
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: m
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
73
115
  - !ruby/object:Gem::Dependency
74
116
  name: minitest
75
117
  requirement: !ruby/object:Gem::Requirement
@@ -99,7 +141,21 @@ dependencies:
99
141
  - !ruby/object:Gem::Version
100
142
  version: '0'
101
143
  - !ruby/object:Gem::Dependency
102
- name: sqlite3
144
+ name: pry
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ - !ruby/object:Gem::Dependency
158
+ name: rake
103
159
  requirement: !ruby/object:Gem::Requirement
104
160
  requirements:
105
161
  - - ">="
@@ -127,7 +183,7 @@ dependencies:
127
183
  - !ruby/object:Gem::Version
128
184
  version: '0'
129
185
  - !ruby/object:Gem::Dependency
130
- name: rake
186
+ name: sqlite3
131
187
  requirement: !ruby/object:Gem::Requirement
132
188
  requirements:
133
189
  - - ">="
@@ -146,23 +202,25 @@ executables: []
146
202
  extensions: []
147
203
  extra_rdoc_files: []
148
204
  files:
205
+ - Appraisals
149
206
  - CHANGELOG.md
150
207
  - CONTRIBUTING.md
151
208
  - Gemfile
152
209
  - Gemfile.lock
153
210
  - LICENSE
211
+ - README.md
154
212
  - Rakefile
155
- - globalize.gemspec
156
213
  - lib/globalize.rb
157
214
  - lib/globalize/active_record.rb
158
215
  - lib/globalize/active_record/act_macro.rb
159
216
  - lib/globalize/active_record/adapter.rb
217
+ - lib/globalize/active_record/adapter_dirty.rb
160
218
  - lib/globalize/active_record/attributes.rb
161
219
  - lib/globalize/active_record/class_methods.rb
162
220
  - lib/globalize/active_record/exceptions.rb
163
221
  - lib/globalize/active_record/instance_methods.rb
164
222
  - lib/globalize/active_record/migration.rb
165
- - lib/globalize/active_record/query_methods.rb
223
+ - lib/globalize/active_record/translated_attributes_query.rb
166
224
  - lib/globalize/active_record/translation.rb
167
225
  - lib/globalize/interpolation.rb
168
226
  - lib/globalize/version.rb
@@ -170,10 +228,16 @@ files:
170
228
  - lib/i18n/missing_translations_raise_handler.rb
171
229
  - lib/patches/active_record/persistence.rb
172
230
  - lib/patches/active_record/query_method.rb
231
+ - lib/patches/active_record/rails4/query_method.rb
232
+ - lib/patches/active_record/rails4/serialization.rb
233
+ - lib/patches/active_record/rails4/uniqueness_validator.rb
234
+ - lib/patches/active_record/rails5/uniqueness_validator.rb
235
+ - lib/patches/active_record/rails5_1/serialization.rb
236
+ - lib/patches/active_record/rails5_1/uniqueness_validator.rb
237
+ - lib/patches/active_record/relation.rb
173
238
  - lib/patches/active_record/serialization.rb
174
239
  - lib/patches/active_record/uniqueness_validator.rb
175
240
  - lib/patches/active_record/xml_attribute_serializer.rb
176
- - readme.md
177
241
  homepage: http://github.com/globalize/globalize
178
242
  licenses:
179
243
  - MIT
@@ -186,7 +250,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
250
  requirements:
187
251
  - - ">="
188
252
  - !ruby/object:Gem::Version
189
- version: '0'
253
+ version: 2.0.0
190
254
  required_rubygems_version: !ruby/object:Gem::Requirement
191
255
  requirements:
192
256
  - - ">="
@@ -194,9 +258,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
258
  version: '0'
195
259
  requirements: []
196
260
  rubyforge_project: "[none]"
197
- rubygems_version: 2.4.5
261
+ rubygems_version: 2.7.6
198
262
  signing_key:
199
263
  specification_version: 4
200
264
  summary: Rails I18n de-facto standard library for ActiveRecord model/data translation
201
265
  test_files: []
202
- has_rdoc:
data/globalize.gemspec DELETED
@@ -1,29 +0,0 @@
1
- require File.expand_path('../lib/globalize/version', __FILE__)
2
-
3
- Gem::Specification.new do |s|
4
- s.name = 'globalize'
5
- s.version = Globalize::Version
6
- s.authors = ['Sven Fuchs', 'Joshua Harvey', 'Clemens Kofler', 'John-Paul Bader', 'Tomasz Stachewicz', 'Philip Arndt', 'Chris Salzberg']
7
- s.email = 'nobody@globalize-rails.org'
8
- s.homepage = 'http://github.com/globalize/globalize'
9
- s.summary = 'Rails I18n de-facto standard library for ActiveRecord model/data translation'
10
- s.description = "#{s.summary}."
11
- s.license = "MIT"
12
-
13
- s.files = Dir['{lib/**/*,[A-Z]*}']
14
- s.platform = Gem::Platform::RUBY
15
- s.require_path = 'lib'
16
- s.rubyforge_project = '[none]'
17
-
18
- s.add_dependency 'activerecord', '>= 4.2.0', '< 4.3'
19
- s.add_dependency 'activemodel', '>= 4.2.0', '< 4.3'
20
-
21
- s.add_development_dependency 'database_cleaner', '~> 1.4.0'
22
- s.add_development_dependency 'minitest'
23
- s.add_development_dependency 'minitest-reporters'
24
-
25
- s.add_development_dependency 'sqlite3'
26
- s.add_development_dependency 'rdoc'
27
-
28
- s.add_development_dependency 'rake'
29
- end
@@ -1,98 +0,0 @@
1
- module Globalize
2
- module ActiveRecord
3
- module QueryMethods
4
-
5
- class WhereChain < ::ActiveRecord::QueryMethods::WhereChain
6
- def not(opts, *rest)
7
- if parsed = @scope.parse_translated_conditions(opts)
8
- @scope.join_translations.where.not(parsed, *rest)
9
- else
10
- super
11
- end
12
- end
13
- end
14
-
15
- def where(opts = :chain, *rest)
16
- if opts == :chain
17
- WhereChain.new(spawn)
18
- elsif parsed = parse_translated_conditions(opts)
19
- join_translations(super(parsed, *rest))
20
- else
21
- super
22
- end
23
- end
24
-
25
- def order(opts, *rest)
26
- if respond_to?(:translated_attribute_names) && parsed = parse_translated_order(opts)
27
- super(parsed)
28
- else
29
- super
30
- end
31
- end
32
-
33
- def exists?(conditions = :none)
34
- if parsed = parse_translated_conditions(conditions)
35
- with_translations_in_fallbacks.exists?(parsed)
36
- else
37
- super
38
- end
39
- end
40
-
41
- def with_translations_in_fallbacks
42
- with_translations(Globalize.fallbacks)
43
- end
44
-
45
- def parse_translated_conditions(opts)
46
- if opts.is_a?(Hash) && respond_to?(:translated_attribute_names) && (keys = opts.symbolize_keys.keys & translated_attribute_names).present?
47
- opts = opts.dup
48
- keys.each { |key| opts[translated_column_name(key)] = opts.delete(key) || opts.delete(key.to_s) }
49
- opts
50
- end
51
- end
52
-
53
- def where_values_hash(*args)
54
- return super unless respond_to?(:translations_table_name)
55
- equalities = respond_to?(:with_default_scope) ? with_default_scope.where_values : where_values
56
- equalities = equalities.grep(Arel::Nodes::Equality).find_all { |node|
57
- node.left.relation.name == translations_table_name
58
- }
59
-
60
- binds = Hash[bind_values.find_all(&:first).map { |column, v| [column.name, v] }]
61
-
62
- super.merge(Hash[equalities.map { |where|
63
- name = where.left.name
64
- [name, binds.fetch(name.to_s) { right = where.right; right.is_a?(Arel::Nodes::Casted) ? right.val : right }]
65
- }])
66
- end
67
-
68
- def join_translations(relation = self)
69
- if relation.joins_values.include?(:translations)
70
- relation
71
- else
72
- relation.with_translations_in_fallbacks
73
- end
74
- end
75
-
76
- private
77
-
78
- def parse_translated_order(opts)
79
- case opts
80
- when Hash
81
- ordering = opts.map do |column, direction|
82
- klass = translated_column?(column) ? translation_class : self
83
- klass.arel_table[column].send(direction)
84
- end
85
- order(ordering).order_values
86
- when Symbol
87
- translated_column_name(opts) if translated_attribute_names.include?(opts)
88
- else # failsafe returns nothing
89
- nil
90
- end
91
- end
92
-
93
- def translated_column?(column)
94
- translated_attribute_names.include?(column)
95
- end
96
- end
97
- end
98
- end