ar_virtual_field 0.6.0 → 0.8.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.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/ar_virtual_field/version.rb +1 -1
- data/lib/ar_virtual_field.rb +7 -11
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a871df479155905f1c6ea44b517cc09509073fd5f185d3d81385f6b523aa125e
|
4
|
+
data.tar.gz: f30f5a2a4680eeb1d12affd531c8db957eddb2ae688bd8c2622efee9dba1da9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5ecb4f531ed0b073a0f894cf6ee1316c2fdaff34428f6949c85c20dc25f3aa59c212bac4be7b2e836b5e592fc373a1835466eec4f720de06e7432ec011a6973
|
7
|
+
data.tar.gz: ba3978ceb24a0ca7f04028ceaeb11933949d19f823412389615b142b28d4334f72b8d310924f83e5e0a347fd2d14a08e2b1dd78c5a5457d7b28bf16cf042f009
|
data/README.md
CHANGED
@@ -39,12 +39,12 @@ Example:
|
|
39
39
|
class User < ApplicationRecord
|
40
40
|
virtual_field :total_orders,
|
41
41
|
scope: -> { joins(:orders).group(:id) },
|
42
|
-
select:
|
42
|
+
select: "COUNT(orders.id)",
|
43
43
|
get: -> { orders.count },
|
44
44
|
default: 0
|
45
45
|
|
46
46
|
virtual_field :fullname,
|
47
|
-
select:
|
47
|
+
select: "name || surname",
|
48
48
|
get: -> { "#{name}#{surname}" }
|
49
49
|
end
|
50
50
|
|
@@ -52,7 +52,7 @@ users_with_orders = User.with_total_orders # queries database once
|
|
52
52
|
|
53
53
|
user = users_with_orders.first
|
54
54
|
user.total_orders # => value computed by database
|
55
|
-
user.fullname # => value computed by
|
55
|
+
user.fullname # => value computed by ruby
|
56
56
|
```
|
57
57
|
|
58
58
|
### Scopes and querying:
|
@@ -60,7 +60,7 @@ user.fullname # => value computed by database
|
|
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(
|
63
|
+
User.with_total_orders.where('total_orders = ?', 5)
|
64
64
|
```
|
65
65
|
|
66
66
|
This will include the total_orders virtual field in the SQL query and allow filtering by it.
|
data/lib/ar_virtual_field.rb
CHANGED
@@ -13,20 +13,12 @@ module ArVirtualField
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.table_name(name)
|
16
|
-
|
16
|
+
"#{name}_outer"
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.table_with_column(name)
|
20
|
-
|
20
|
+
"#{name}_outer.#{name}"
|
21
21
|
end
|
22
|
-
|
23
|
-
def self.sanitize_table_name(table)
|
24
|
-
ActiveRecord::Base.connection.quote_table_name(table)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.[](field)
|
29
|
-
Arel.sql(HelperMethods.table_with_column(field))
|
30
22
|
end
|
31
23
|
|
32
24
|
def virtual_field(name, scope: nil, select:, get:, default: nil)
|
@@ -55,7 +47,11 @@ module ArVirtualField
|
|
55
47
|
|
56
48
|
HelperMethods.select_append(joins(<<~SQL.squish), "#{HelperMethods.table_with_column(name)} AS #{name}")
|
57
49
|
LEFT JOIN (#{scope_query.to_sql}) #{HelperMethods.table_name(name)}
|
58
|
-
ON #{
|
50
|
+
ON #{
|
51
|
+
Array(primary_key).map do |pk|
|
52
|
+
"#{HelperMethods.table_name(name)}.#{pk} = #{table_name}.#{pk}"
|
53
|
+
end.join(' AND')
|
54
|
+
}
|
59
55
|
SQL
|
60
56
|
end)
|
61
57
|
else
|
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.
|
4
|
+
version: 0.8.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-
|
11
|
+
date: 2024-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 6.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: Adds .virtual_field method to make it easy to define virtual fields
|
28
56
|
email:
|
29
57
|
- moonmeander47@ya.ru
|