ar_virtual_field 0.7.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: 8c391b47a216fd9d3f4d88fded8000f516eb80cf8bcec72261ae11aba4db36da
4
- data.tar.gz: b2c66124f49c5ab41911619a6bb035dda7654c221b8968bbba37625ad0137351
3
+ metadata.gz: a871df479155905f1c6ea44b517cc09509073fd5f185d3d81385f6b523aa125e
4
+ data.tar.gz: f30f5a2a4680eeb1d12affd531c8db957eddb2ae688bd8c2622efee9dba1da9b
5
5
  SHA512:
6
- metadata.gz: e7ff29785eeef3a6b1b1b77f7711fe0fb776304d7ab7e6f7b70028cd07f7be8d81a1b6b289c82a7be3ac852c4e41baea0cbe6f1be58a2e9ff68e1a9bde7a672a
7
- data.tar.gz: fd45c9a488e01424d808e6b16647419eb74dc5a3094159ccce1992745f94bf03723da47849a6abe8d9bb851304d3e50949bfcbc42fe3957cbe0c2a72cd9ccb42
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,12 +60,9 @@ 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
- > [!WARNING]
67
- > `ArVirtualField[]` doesn't sanitize its value itself, this example relies on `#where` sanitation, use with caution
68
-
69
66
  This will include the total_orders virtual field in the SQL query and allow filtering by it.
70
67
 
71
68
  ## Contributing
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArVirtualField
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
@@ -21,10 +21,6 @@ module ArVirtualField
21
21
  end
22
22
  end
23
23
 
24
- def self.[](field)
25
- Arel.sql(HelperMethods.table_with_column(field))
26
- end
27
-
28
24
  def virtual_field(name, scope: nil, select:, get:, default: nil)
29
25
  name = name.to_s
30
26
  current_class = self
@@ -51,7 +47,11 @@ module ArVirtualField
51
47
 
52
48
  HelperMethods.select_append(joins(<<~SQL.squish), "#{HelperMethods.table_with_column(name)} AS #{name}")
53
49
  LEFT JOIN (#{scope_query.to_sql}) #{HelperMethods.table_name(name)}
54
- 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
+ }
55
55
  SQL
56
56
  end)
57
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.7.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