from_clause_translate 0.2.0 → 0.2.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dd3c42b4a4d39f887365fcd181438221a2a5d67f7582e6da06ee1349e8035e8
|
4
|
+
data.tar.gz: b54e431c490c120a93be7c4ac714d6f47c972cea35aac7ad38508f892f18d4dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de67e993ee641c3c6e1eee55b211be68d2391097dac411aaa2240ace9068664ac7b80009754ee3f785eb0f1bf3075e3eb8cbc1f5aeb00a75fe3319d3cdc5eaa8
|
7
|
+
data.tar.gz: 97a3d308c290712116f608470e20d0f185ebfefcbc00e182d9eb22e7158d03bfc176c346feba1c18102ef937b336554a6b23aa776815ce5b63349450bcbd8214
|
@@ -1,68 +1,57 @@
|
|
1
1
|
require 'from_clause_translate/translated_columns_builder'
|
2
2
|
|
3
3
|
module ActiveRecord::Relation::Extended
|
4
|
-
def to_sql
|
5
|
-
apply_translates unless eager_loading?
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def exec_queries &block
|
10
|
-
apply_translates
|
11
|
-
super(&block)
|
12
|
-
end
|
13
|
-
|
14
|
-
def pluck *columns
|
15
|
-
if !@translated_extra_columns && @klass.const_defined?(:TRANSLATED)
|
16
|
-
@translated_extra_columns = columns
|
17
|
-
end
|
18
|
-
super(*columns)
|
19
|
-
end
|
20
|
-
|
21
4
|
def arel aliases = nil
|
22
|
-
|
23
|
-
|
24
|
-
@translated_extra_columns = nil
|
25
|
-
joins = @values.delete :joins
|
26
|
-
apply_translates super(aliases), joins
|
5
|
+
apply_translates
|
6
|
+
super aliases
|
27
7
|
end
|
28
8
|
|
29
9
|
def add_translated_columns columns
|
30
10
|
(@values[:translated] ||= []).concat columns
|
31
11
|
end
|
32
12
|
|
13
|
+
def add_translated_column column
|
14
|
+
(@values[:translated] ||= []) << column
|
15
|
+
end
|
16
|
+
|
33
17
|
UNSCOPING_VALUES =
|
34
18
|
ActiveRecord::QueryMethods::VALID_UNSCOPING_VALUES.dup.delete(:joins)
|
35
19
|
|
36
|
-
def apply_translates
|
37
|
-
joins ||= @values.delete :joins
|
38
|
-
arel ||= self.arel
|
20
|
+
def apply_translates
|
39
21
|
return if @translates_applied || !@klass.const_defined?(:TRANSLATED)
|
40
22
|
|
41
23
|
@translates_applied = true
|
24
|
+
|
25
|
+
@arel ||= build_arel nil
|
26
|
+
|
42
27
|
columns = translated_columns_get
|
43
28
|
return unless columns
|
44
29
|
|
30
|
+
if @values[:joins]
|
31
|
+
joins = @values.delete :joins
|
32
|
+
@arel = build_arel nil
|
33
|
+
end
|
34
|
+
|
45
35
|
rel = unscope(*UNSCOPING_VALUES).select(columns)
|
36
|
+
rel.instance_variable_set(:@translates_applied, true)
|
46
37
|
rel.instance_variable_get(:@values)[:joins] = joins if joins
|
47
38
|
from = rel.arel.to_sql
|
48
39
|
as = @klass.table_name
|
49
|
-
arel.from("(#{from}) #{as}")
|
40
|
+
@arel.from("(#{from}) #{as}")
|
50
41
|
end
|
51
42
|
|
52
43
|
def translated_columns_get without_projections = false
|
53
44
|
FromClauseTranslate::TranslatedColumnsBuilder.new(
|
54
|
-
self, without_projections
|
45
|
+
self, @without_projections
|
55
46
|
).perform
|
56
47
|
end
|
57
48
|
|
58
|
-
private
|
59
|
-
|
60
49
|
def perform_calculation operation, column_name
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
50
|
+
return super operation, column_name if @without_projections
|
51
|
+
rel = spawn
|
52
|
+
rel.instance_variable_set(:@without_projections, true)
|
53
|
+
rel.add_translated_column column_name
|
54
|
+
rel.perform_calculation operation, column_name
|
66
55
|
end
|
67
56
|
end
|
68
57
|
|