ar_virtual_field 0.6.0 → 0.8.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: 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