quo 0.5.0 → 0.5.2

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: 071f43a86ac28245731999ddf6f605c89802b71e3d51139d44263214ad25dbd5
4
- data.tar.gz: 5eaf5d72a701679c599e5d07f60e8f1c7c9eb1f2e00a7f8ad1503270bc9cda64
3
+ metadata.gz: 3d20b292ae3178fa1ce96705049b215f37d4966a44ee9d05b4fafda3a664a9f5
4
+ data.tar.gz: a151bfb1c35dcfea765d3aac5b1bf501c842288e99529523dadf410c0243fe04
5
5
  SHA512:
6
- metadata.gz: ed91b9a82feb1c8f165672ffa4d2b1212ea7e8780cb85980f82353eca7fdfb247e67101fb6156ceaad65be94f27406daa4a5832e4950ab0204f7a9dc326329a7
7
- data.tar.gz: 503525140bd10ed28817e61dc0a2de8ef4e60ca32805427b72763a039982fd069a147ce8eb18d91896ac83202645a12092a8b186b530c97322f465baeeba687a
6
+ metadata.gz: bd0e575917052a3171dd45eada04a0ad0e0c670154294507a76808e5bc508d21d8aa53bdad3deebdea11f57a91193c1ae4132589dc330a273b3dda588f635d2f
7
+ data.tar.gz: 3faaa3f25cb76d44b70c28425f42f582ed58a7b83c573d976019caef302e4bceeedb8f93912250de7e80b3a906042820eb9884049891c75f5971e3a143361006
data/Gemfile CHANGED
@@ -17,4 +17,7 @@ group :development, :test do
17
17
  gem "standard", "~> 1.3"
18
18
 
19
19
  gem "steep", "~> 1.2"
20
+
21
+ gem "typed_operation", github: "stevegeek/typed_operation", branch: "main"
22
+ gem "literal", github: "joeldrapper/literal", branch: "main"
20
23
  end
data/README.md CHANGED
@@ -130,6 +130,38 @@ composed = query1 + query2 # or Quo::Query.compose(query1, query2) or query1.com
130
130
  composed.first
131
131
  ```
132
132
 
133
+ ```ruby
134
+ class CompanyToBeApproved < Quo::TypedQuery
135
+ def query
136
+ Registration
137
+ .left_joins(:approval)
138
+ .where(approvals: {completed_at: nil})
139
+ end
140
+ end
141
+
142
+ class CompanyInUsCityAndState < Quo::TypedQuery
143
+ param :state, Literal::Union[String, Array[String]]
144
+ param :city, optional(Literal::Union[String, Array[String]])
145
+
146
+ def query
147
+ q = Registration
148
+ .joins(company: :address)
149
+ .where(addresses: {state: state})
150
+ q = q.where(addresses: {city: city}) if city
151
+ q
152
+ end
153
+ end
154
+
155
+
156
+ query1 = CompanyToBeApproved.new
157
+ query_partialy_applied = CompanyInUsState.with(state: "California")
158
+ query2 = query_partialy_applied.with(city: ["San Francisco", "Los Angeles"]).operation
159
+
160
+ composed = query1 + query2
161
+ # '+' composes the queries and returns a new prepared query
162
+ composed.first
163
+ ```
164
+
133
165
  This effectively executes:
134
166
 
135
167
  ```ruby
@@ -138,6 +170,7 @@ Registration
138
170
  .joins(company: :address)
139
171
  .where(approvals: {completed_at: nil})
140
172
  .where(addresses: {state: options[:state]})
173
+ .limit(1)
141
174
  ```
142
175
 
143
176
  It is also possible to compose with an `ActiveRecord::Relation`. This can be useful in a Query object itself to help
@@ -45,7 +45,7 @@ module Quo
45
45
  ::ActiveRecord::Associations::Preloader.new(
46
46
  records: records,
47
47
  associations: preload || options[:includes]
48
- )
48
+ ).call
49
49
  end
50
50
  end
51
51
  end
@@ -17,7 +17,7 @@ module Quo
17
17
  self.class.new(query, left, right, **@options.merge(options))
18
18
  end
19
19
 
20
- def to_s
20
+ def inspect
21
21
  "Quo::MergedQuery[#{operand_desc(left)}, #{operand_desc(right)}]"
22
22
  end
23
23
 
@@ -27,7 +27,7 @@ module Quo
27
27
 
28
28
  def operand_desc(operand)
29
29
  if operand.is_a? Quo::MergedQuery
30
- operand.to_s
30
+ operand.inspect
31
31
  else
32
32
  operand.class.name || "(anonymous)"
33
33
  end
data/lib/quo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Quo
4
- VERSION = "0.5.0"
4
+ VERSION = "0.5.2"
5
5
  end
@@ -8,7 +8,7 @@ module Quo
8
8
 
9
9
  def query: () -> relOrEnumerable
10
10
 
11
- def to_s: () -> ::String
11
+ def inspect: () -> ::String
12
12
 
13
13
  private
14
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-23 00:00:00.000000000 Z
11
+ date: 2023-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
- rubygems_version: 3.3.26
117
+ rubygems_version: 3.4.19
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Quo is a query object gem for Rails