from_clause_translate 0.2.4 → 0.2.5
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/lib/from_clause_translate/active_record_relation.rb +2 -11
- data/lib/from_clause_translate/class_methods.rb +12 -7
- data/lib/from_clause_translate/translated_columns_builder.rb +48 -25
- data/lib/from_clause_translate/version.rb +1 -1
- data/lib/from_clause_translate.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a49a163f455c3977eebfcb19c3fe4051946f941d4968ee9115bb1616866b1f35
|
4
|
+
data.tar.gz: 5f66fc0c7a4900e120c76ef2552294047b8a20bb29af1f6cf00cf3755a3674c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd41de9c31b39e159fac6256e35dc1e5787a42270596b4c2f068c3c5f3819416c35071ed037759409265aa781742feb95e98ace2818d78b49f699329d8df4b2f
|
7
|
+
data.tar.gz: c515c69c704ff0363eec07844ba60b9b31deaaa0f5eef9d32382d0ed1aa11a136ace7b1ae03226b72aa60e20170e9a341b9382deb80abc996f01670b26ab468a
|
@@ -14,27 +14,18 @@ module ActiveRecord::Relation::Extended
|
|
14
14
|
(@values[:translated] ||= []) << column
|
15
15
|
end
|
16
16
|
|
17
|
-
UNSCOPING_VALUES =
|
18
|
-
ActiveRecord::QueryMethods::VALID_UNSCOPING_VALUES.dup.delete(:joins)
|
19
|
-
|
20
17
|
def apply_translates
|
21
18
|
return if @translates_applied || !@klass.const_defined?(:TRANSLATED)
|
22
19
|
|
23
20
|
@translates_applied = true
|
24
21
|
|
25
|
-
@arel ||= build_arel nil
|
26
|
-
|
27
22
|
columns = translated_columns_build
|
28
23
|
return unless columns
|
29
24
|
|
30
|
-
|
31
|
-
joins = @values.delete :joins
|
32
|
-
@arel = build_arel nil
|
33
|
-
end
|
25
|
+
@arel = build_arel nil
|
34
26
|
|
35
|
-
rel =
|
27
|
+
rel = unscoped.select(columns)
|
36
28
|
rel.instance_variable_set(:@translates_applied, true)
|
37
|
-
rel.instance_variable_get(:@values)[:joins] = joins if joins
|
38
29
|
replace_plurals_in_projections
|
39
30
|
@arel.from("(#{rel.arel.to_sql}) #{@klass.table_name}")
|
40
31
|
end
|
@@ -7,7 +7,7 @@ module ClassMethods
|
|
7
7
|
filter_translated_columns(
|
8
8
|
map_translated_columns(columns)
|
9
9
|
).each do |hash|
|
10
|
-
column = hash[:
|
10
|
+
column = hash[:name]
|
11
11
|
self::TRANSLATED[column] = true
|
12
12
|
define_translated_selection column, hash
|
13
13
|
define_translated_column_methods column
|
@@ -24,11 +24,15 @@ module ClassMethods
|
|
24
24
|
column = plural.to_s.singularize.to_sym
|
25
25
|
selection = I18n.available_locales.map do |locale|
|
26
26
|
"#{quoted_table_name}.\"#{column}_#{locale}\""
|
27
|
-
end
|
28
|
-
self::TRANSLATED_PLURALS[plural] = selection
|
27
|
+
end
|
29
28
|
I18n.available_locales.each do |locale|
|
30
29
|
self::TRANSLATED_SELECTION[locale][plural] = selection
|
31
30
|
end
|
31
|
+
selection = selection.join ','
|
32
|
+
self::TRANSLATED_PLURALS[plural] = selection
|
33
|
+
I18n.available_locales.each do |locale|
|
34
|
+
self::TRANSLATED_SELECTION_AS[locale][plural] = selection
|
35
|
+
end
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
@@ -46,7 +50,7 @@ module ClassMethods
|
|
46
50
|
|
47
51
|
def map_translated_columns columns
|
48
52
|
columns.map! do |column|
|
49
|
-
hash = column.is_a?(Hash) ? column : {
|
53
|
+
hash = column.is_a?(Hash) ? column : {name: column}
|
50
54
|
translated_fallbacks_set hash
|
51
55
|
hash
|
52
56
|
end
|
@@ -54,8 +58,8 @@ module ClassMethods
|
|
54
58
|
|
55
59
|
def filter_translated_columns columns
|
56
60
|
columns.keep_if do |hash|
|
57
|
-
!translates?(hash[:
|
58
|
-
column_names.include?("#{hash[:
|
61
|
+
!translates?(hash[:name]) &&
|
62
|
+
column_names.include?("#{hash[:name]}_#{I18n.locale}")
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
@@ -65,7 +69,8 @@ module ClassMethods
|
|
65
69
|
selection = "#{quoted_table_name}.\"#{column}_#{locale}\""
|
66
70
|
selection = translated_fallbacks_wrap selection, fallback[locale]
|
67
71
|
selection = translated_fallbacks_wrap selection, fallback[:_]
|
68
|
-
self::TRANSLATED_SELECTION[locale][column] =
|
72
|
+
self::TRANSLATED_SELECTION[locale][column] = selection
|
73
|
+
self::TRANSLATED_SELECTION_AS[locale][column] = "#{selection} AS #{column}"
|
69
74
|
end
|
70
75
|
end
|
71
76
|
|
@@ -13,6 +13,7 @@ class FromClauseTranslate::TranslatedColumnsBuilder
|
|
13
13
|
add_translated_columns_from_values
|
14
14
|
add_translated_columns_from_projections
|
15
15
|
add_translated_columns_from_cores
|
16
|
+
add_translated_columns_from_joins
|
16
17
|
add_translated_columns_from_orders
|
17
18
|
|
18
19
|
@columns if @has_translated
|
@@ -26,15 +27,11 @@ class FromClauseTranslate::TranslatedColumnsBuilder
|
|
26
27
|
|
27
28
|
@has_translated = true
|
28
29
|
translated.each do |column|
|
29
|
-
if column.is_a? Hash
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
elsif (selection = translated_selection(column))
|
35
|
-
@columns << selection
|
36
|
-
else
|
37
|
-
@columns << column
|
30
|
+
next translated_selection(column) if !column.is_a? Hash
|
31
|
+
|
32
|
+
column.each do |key, value|
|
33
|
+
@skip_translated << key.to_s
|
34
|
+
@columns << "#{value} AS #{key}" unless value.nil?
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
@@ -43,19 +40,28 @@ class FromClauseTranslate::TranslatedColumnsBuilder
|
|
43
40
|
return if @without_projections
|
44
41
|
|
45
42
|
@arel.projections.each do |column|
|
46
|
-
|
47
|
-
@columns << selection if selection
|
43
|
+
arel_projection_translation column
|
48
44
|
end
|
49
45
|
end
|
50
46
|
|
51
47
|
def arel_projection_translation column
|
48
|
+
return if column.is_a?(String) && column[0] != '"'
|
49
|
+
|
52
50
|
column = column.name if column.is_a? Arel::Attributes::Attribute
|
53
51
|
column = column.to_s unless column.is_a? String
|
54
52
|
|
55
|
-
|
53
|
+
if column.first == '"'
|
54
|
+
name = column[1...-1]
|
55
|
+
elsif column == '*'
|
56
|
+
@select_all = true
|
57
|
+
return column
|
58
|
+
else
|
59
|
+
name = column
|
60
|
+
end
|
61
|
+
|
56
62
|
return if @skip_translated.include? name
|
57
63
|
|
58
|
-
translated_selection
|
64
|
+
translated_selection name, column
|
59
65
|
end
|
60
66
|
|
61
67
|
def add_translated_columns_from_cores
|
@@ -70,8 +76,7 @@ class FromClauseTranslate::TranslatedColumnsBuilder
|
|
70
76
|
core.groups.each do |group|
|
71
77
|
expr = group.expr
|
72
78
|
name = expr[0] == '"' ? expr[1...-1] : expr
|
73
|
-
|
74
|
-
@columns << selection if selection
|
79
|
+
translated_selection name
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
@@ -80,24 +85,42 @@ class FromClauseTranslate::TranslatedColumnsBuilder
|
|
80
85
|
node.children.each do |child|
|
81
86
|
next unless child.respond_to? :left
|
82
87
|
|
83
|
-
|
84
|
-
|
85
|
-
|
88
|
+
left = child.left
|
89
|
+
next if left.relation.table_name != @klass.table_name
|
90
|
+
|
91
|
+
translated_selection left.name
|
86
92
|
end
|
87
93
|
end
|
88
94
|
end
|
89
95
|
|
96
|
+
def add_translated_columns_from_joins
|
97
|
+
joins = @relation.instance_variable_get(:@values)[:joins]
|
98
|
+
return unless joins
|
99
|
+
|
100
|
+
joins.each do |join|
|
101
|
+
ref = @klass.reflections[join.to_s]
|
102
|
+
next if !ref || !ref.is_a?(ActiveRecord::Reflection::BelongsToReflection)
|
103
|
+
|
104
|
+
translated_selection ref.join_keys.foreign_key
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
90
108
|
def add_translated_columns_from_orders
|
91
109
|
@arel.ast.orders.each do |name|
|
92
|
-
name = name.respond_to?(:expr) ? name.expr.name : name
|
93
|
-
|
94
|
-
@columns << selection if selection
|
110
|
+
name = name.respond_to?(:expr) ? name.expr.name : name
|
111
|
+
translated_selection name
|
95
112
|
end
|
96
113
|
end
|
97
114
|
|
98
|
-
def translated_selection name
|
99
|
-
|
100
|
-
|
101
|
-
|
115
|
+
def translated_selection name, original = nil
|
116
|
+
sym = name.to_sym
|
117
|
+
translates = @klass.translates? sym
|
118
|
+
@has_translated = true
|
119
|
+
select = translates ? @klass::TRANSLATED_SELECTION[I18n.locale][sym] : false
|
120
|
+
if select
|
121
|
+
@columns << select
|
122
|
+
elsif !@select_all && @klass.columns_hash[name.to_s]
|
123
|
+
@columns << (original || name)
|
124
|
+
end
|
102
125
|
end
|
103
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: from_clause_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Kushin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|