ar_virtual_field 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a871df479155905f1c6ea44b517cc09509073fd5f185d3d81385f6b523aa125e
4
- data.tar.gz: f30f5a2a4680eeb1d12affd531c8db957eddb2ae688bd8c2622efee9dba1da9b
3
+ metadata.gz: d7a9c50d5fa5be76b750cd68d22f5fe8ca0c15e2eb88c099c5d73b6a2b728815
4
+ data.tar.gz: 6801aa54d664672c35977025215fd5d1c00f030c2f1c3ddc78ba2d54a72aea15
5
5
  SHA512:
6
- metadata.gz: f5ecb4f531ed0b073a0f894cf6ee1316c2fdaff34428f6949c85c20dc25f3aa59c212bac4be7b2e836b5e592fc373a1835466eec4f720de06e7432ec011a6973
7
- data.tar.gz: ba3978ceb24a0ca7f04028ceaeb11933949d19f823412389615b142b28d4334f72b8d310924f83e5e0a347fd2d14a08e2b1dd78c5a5457d7b28bf16cf042f009
6
+ metadata.gz: '09e2c21db4d2d3d9ea91056ba87d355a6c2ff27a2a4c9119182164bf5f201c76602ef9bc28f9298497fee79c56b50010f8adf4523fde81e7a1c65a4d9c8e3799'
7
+ data.tar.gz: d99b66f81f0ea83605448fe246bb432a3cdb93db4a4d80eeecbe3a92836ff44ef701482b8d2bf3669a1ac2e9d8ab80245e7315daf66f03f1203ef4bc3aa3ccb8
data/README.md CHANGED
@@ -60,7 +60,7 @@ user.fullname # => value computed by ruby
60
60
  - `with_#{name}`: Automatically generated scope to include the virtual field in queries. You can use this scope in your ActiveRecord queries like so:
61
61
 
62
62
  ```ruby
63
- User.with_total_orders.where('total_orders = ?', 5)
63
+ User.with_total_orders.where(User.virtual_fields[:total_orders].eq(5))
64
64
  ```
65
65
 
66
66
  This will include the total_orders virtual field in the SQL query and allow filtering by it.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArVirtualField
4
- VERSION = "0.8.0"
4
+ VERSION = "0.9.0"
5
5
  end
@@ -21,7 +21,21 @@ module ArVirtualField
21
21
  end
22
22
  end
23
23
 
24
+ class FieldsData < Hash
25
+ def [](field)
26
+ statement = super(field.to_sym)
27
+ raise "Unknown virtual field `#{field}`" unless statement
28
+ statement.()
29
+ end
30
+ end
31
+
32
+ def virtual_fields
33
+ @ar_virtual_fields || FieldsData.new
34
+ end
35
+
24
36
  def virtual_field(name, scope: nil, select:, get:, default: nil)
37
+ @ar_virtual_fields ||= FieldsData.new
38
+
25
39
  name = name.to_s
26
40
  current_class = self
27
41
  unwrap_arel_expression = -> (exp) { exp.is_a?(Arel::Nodes::NodeExpression) ? exp : Arel.sql(exp) }
@@ -36,6 +50,8 @@ module ArVirtualField
36
50
  end
37
51
 
38
52
  if scope
53
+ @ar_virtual_fields[name.to_sym] = -> { Arel.sql(HelperMethods.table_with_column(name)) }
54
+
39
55
  scope_name = :"_scope_#{name}"
40
56
 
41
57
  scope(scope_name, scope)
@@ -55,6 +71,8 @@ module ArVirtualField
55
71
  SQL
56
72
  end)
57
73
  else
74
+ @ar_virtual_fields[name.to_sym] = -> { select_lambda.() }
75
+
58
76
  scope(:"with_#{name}", -> do
59
77
  HelperMethods.select_append(self, select_lambda.().as(name))
60
78
  end)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_virtual_field
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Egorov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-18 00:00:00.000000000 Z
11
+ date: 2024-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord