quo 0.5.1 → 0.5.3

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: b3c2546945f1bfdd80965174357d5f2246e82a0e5dc7158f2d60944e980899fe
4
- data.tar.gz: ac40d8dd995273b4de27102a021741416d9501d5ff1bb6070f917bcac35bf164
3
+ metadata.gz: 71564f3db9d5b4d555d2a21d01f2754ac7db5a650db760f480e6e968343b6994
4
+ data.tar.gz: 27ba399c9fd255fcff14ca7c2ab419d8547f6f7e2d319c2cb96aeaeed8dbc032
5
5
  SHA512:
6
- metadata.gz: 825a13e681e234d7679452d837d27e627cf66f1877ae846cb224ad5b83db04714a4a4c15b3ce37de01f733c996226844d892a4975884c4e3926b6f4acf8e23ee
7
- data.tar.gz: a2bde21de2adf4e548502c5daed323e043d8fbf7a5d7f07956234bf01c3223b888a5fce77f0a54c6943bb25035aae866d4ed2c10148759ee14384e4e717f8fcc
6
+ metadata.gz: 6f43fe074d4ddfdbe71f27a5d65600ad014e473131d91c50ed911e541d533a9a2830ebb38420e17aba090657adf2f0f44409e995c5b3fc6666226c083eb1a93f
7
+ data.tar.gz: 07dcc1701c60ad300e92a67aea0c9b2a61c7edda34bc99aa5a0b9faab7c77a71ace33548822c70006f2965d5cdd3140b7df819d585675d045d92e477c5909871
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
@@ -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/query.rb CHANGED
@@ -148,6 +148,7 @@ module Quo
148
148
 
149
149
  # Some convenience methods for working with results
150
150
  delegate :each,
151
+ :find_each,
151
152
  :map,
152
153
  :flat_map,
153
154
  :reduce,
data/lib/quo/results.rb CHANGED
@@ -3,9 +3,6 @@
3
3
  require "forwardable"
4
4
  require_relative "./utilities/callstack"
5
5
 
6
- # TODO: can the results be more like a monad, so we can provide success vs failure ... or
7
- # maybe it is a enumerable-like but it can also be pattern matched?
8
-
9
6
  module Quo
10
7
  class Results
11
8
  extend Forwardable
@@ -64,7 +61,7 @@ module Quo
64
61
  end
65
62
 
66
63
  def respond_to_missing?(name, include_private = false)
67
- Enumerable.instance_methods.include?(name)
64
+ enumerable_methods_supported.include?(name)
68
65
  end
69
66
 
70
67
  private
@@ -80,5 +77,9 @@ module Quo
80
77
  transformer.call(results)
81
78
  end
82
79
  end
80
+
81
+ def enumerable_methods_supported
82
+ [:find_each] + Enumerable.instance_methods
83
+ end
83
84
  end
84
85
  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.1"
4
+ VERSION = "0.5.3"
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.1
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-11 00:00:00.000000000 Z
11
+ date: 2024-01-10 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.4.10
117
+ rubygems_version: 3.5.3
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Quo is a query object gem for Rails