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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffc1272f024fe7a86c06dbe98014598a79749c0e3f0b3f73aabc1abc93371e1a
4
- data.tar.gz: 53662047fab832aafbcba2c18852bdea1938c27d79544a2346f0b242ef822cc0
3
+ metadata.gz: a871df479155905f1c6ea44b517cc09509073fd5f185d3d81385f6b523aa125e
4
+ data.tar.gz: f30f5a2a4680eeb1d12affd531c8db957eddb2ae688bd8c2622efee9dba1da9b
5
5
  SHA512:
6
- metadata.gz: 195918203bffe10d882d03a950b8b89181b5cfdcebdbe700838883f006750c56fdd47c46b3ec184ea4a69155d70c0b2e49c367591e2027294bdaddfa856a9a78
7
- data.tar.gz: 89de4af73dc65462a02fd4dc966fe518373c11b23b0dc2e21e6e1979932123868dcd65afbe55ea9d8cb434db6e85495444fe9b4490cfa9665411e26c857c06cd
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: -> { "COUNT(orders.id)" },
42
+ select: "COUNT(orders.id)",
43
43
  get: -> { orders.count },
44
44
  default: 0
45
45
 
46
46
  virtual_field :fullname,
47
- select: -> { "name || surname" },
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 database
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(ArVirtualField[:total_orders] => 5)
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.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArVirtualField
4
- VERSION = "0.6.0"
4
+ VERSION = "0.8.0"
5
5
  end
@@ -13,20 +13,12 @@ module ArVirtualField
13
13
  end
14
14
 
15
15
  def self.table_name(name)
16
- sanitize_table_name("#{name}_outer")
16
+ "#{name}_outer"
17
17
  end
18
18
 
19
19
  def self.table_with_column(name)
20
- sanitize_table_name("#{name}_outer.#{name}")
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 #{HelperMethods.table_name(name)}.id = #{table_name}.id
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.6.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-17 00:00:00.000000000 Z
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