ar_virtual_field 1.0.2 → 1.0.4

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: cc1842359c967930d4e5a6c9e45c69897d064ed8b35d8a4d5ce9e86985796794
4
- data.tar.gz: ac6c1e0d05446db0ddc88d369bd799ceb384c0a141774ab3c7b43bcb0f3506da
3
+ metadata.gz: e2818bf198175c20f35d6d462aaec2a0efbb67a02c6ac3de41ab0b0761f29f58
4
+ data.tar.gz: 17b16772bb01901a6673f7850f98929e352614f30dd58bdc6689071d03b136ad
5
5
  SHA512:
6
- metadata.gz: 6fbc0e108fc8ccfc8ef5889b11b5b66326cfeb57399c686b93139fbb92b126df8196add0fab124d237291dcbf405d43651057c161d5f533b849495217eb6fcbd
7
- data.tar.gz: ffd519768bc3fcf5f4b7abd5dacd030e6265f1cbaf07d92d7137b7b6aa94f1d02dc8294c86e644ec6a559b71e95891f5c2f23e786051880b63ca11d2086a2b88
6
+ metadata.gz: 307226e8edc08673debdbb07bf457d121a017089797e564c37bb7910f75bc545c9c72346437908ec1f5813a75d01829fdfa5929b89caf2dc886ef2da43ef1e80
7
+ data.tar.gz: ad3c573a638e94aa15f14a0bc66561130916b1c10ff05641e9e2befff5710a17c6f7d65831df35d5a8ef8e3187f10b21d367ffd2136406df646645c6d8afd6da
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArVirtualField
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.4"
5
5
  end
@@ -59,12 +59,20 @@ module ArVirtualField
59
59
  default = HelperMethods.wrap_to_lambda(default)
60
60
  end
61
61
 
62
- select_lambda = HelperMethods.wrap_to_lambda(select)
62
+ select = HelperMethods.wrap_to_lambda(select)
63
+
64
+ select_lambda = -> do
65
+ if default
66
+ Arel::Nodes::NamedFunction.new('COALESCE', [select.(), default.()])
67
+ else
68
+ select.()
69
+ end
70
+ end
63
71
 
64
72
  if scope
65
73
  field_name = Arel.sql(HelperMethods.table_with_column(name))
66
74
 
67
- @ar_virtual_fields[name.to_sym] =
75
+ select_lambda =
68
76
  if default
69
77
  -> { Arel::Nodes::NamedFunction.new('COALESCE', [field_name, default.()]) }
70
78
  else
@@ -78,9 +86,9 @@ module ArVirtualField
78
86
  scope(:"with_#{name}", -> do
79
87
  scope_query = current_class
80
88
  .send(scope_name)
81
- .select(select_lambda.().as(name), "#{table_name}.id")
89
+ .select(select.().as(name), "#{table_name}.id")
82
90
 
83
- HelperMethods.select_append(joins(<<~SQL.squish), "#{HelperMethods.table_with_column(name)} AS #{name}")
91
+ HelperMethods.select_append(joins(<<~SQL.squish), select_lambda.().as(name))
84
92
  LEFT JOIN (#{scope_query.to_sql}) #{HelperMethods.table_name(name)}
85
93
  ON #{
86
94
  Array(primary_key).map do |pk|
@@ -90,17 +98,13 @@ module ArVirtualField
90
98
  SQL
91
99
  end)
92
100
  else
93
- if default
94
- select_lambda = -> { Arel::Nodes::NamedFunction.new('COALESCE', [select_lambda.(), default.()]) }
95
- end
96
-
97
- @ar_virtual_fields[name.to_sym] = -> { select_lambda.() }
98
-
99
101
  scope(:"with_#{name}", -> do
100
102
  HelperMethods.select_append(self, select_lambda.().as(name))
101
103
  end)
102
104
  end
103
105
 
106
+ @ar_virtual_fields[name.to_sym] = select_lambda
107
+
104
108
  method_name = :"ar_virtual_field_#{name}"
105
109
 
106
110
  define_method(method_name, &get)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_virtual_field
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Egorov