active_postgrest 0.2.1 → 0.2.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: e0147542053d10ed15478ba0b808b81c761079420879dec931e7cfe420de7e29
4
- data.tar.gz: 841544cc15094bf18837bd218190243f11aedf82e57dc5c2d0d2e1b38094ad94
3
+ metadata.gz: 276de717bb5ff48a395f63a5c778194ba660cfda61c13eaed97e71043673ba35
4
+ data.tar.gz: 83274d331de650e3a54a706c9aaeac953e45cba044a83d3f57c8509999159b8a
5
5
  SHA512:
6
- metadata.gz: e2b816ce049bcef9e2fe9a0dbe4e80a012d1343765c14935940bd736b1674d46b2b3502a666a4feb4d888de6b42596b4e627985d40c5db76b5a940f79f4623b8
7
- data.tar.gz: 3375df0a6a37cf1036b7a5e20142cea242bac393c516ca4eb33792a660695e06d0f5b092d600b63d7b83b0fd8c14505db3b79beddb447badb29a0cda91e97184
6
+ metadata.gz: ad008e75b0d00d2b25dd4a095b28ea0c4de88893b223c7b69a239650464f797f4216e7ac2917be62ef1a0947627bcd35247f5dfd3dde7a44d0b920f11d6b1357
7
+ data.tar.gz: e0969cdb78a04b2e8ca0d8f8038681cd5c480ee85d0ec2c0ff63de28fa3b65c21bf9fc1fbb6edb51f5d361c4ac57fc220328f78e7f8ca797d6e21ea2eb70d159
checksums.yaml.gz.sig CHANGED
Binary file
@@ -34,6 +34,15 @@ module ActivePostgrest
34
34
  end.body
35
35
  end
36
36
 
37
+ def head(resource, params = {}, schema: nil)
38
+ response = @conn.head(resource, params) do |req|
39
+ auth_headers(req)
40
+ req.headers['Accept-Profile'] = schema if schema
41
+ end
42
+ raise_on_error!(response)
43
+ response
44
+ end
45
+
37
46
  def get(resource, params = {}, count: :exact, schema: nil)
38
47
  response = @conn.get(resource, params) do |req|
39
48
  auth_headers(req)
@@ -155,16 +155,44 @@ module ActivePostgrest
155
155
  total.to_i
156
156
  end
157
157
 
158
- def any?(&block) = block ? super : count.positive?
159
- def none?(&block) = block ? super : count.zero?
160
- def one?(&block) = block ? super : count == 1
161
- def many? = count > 1
162
- def exists? = any?
158
+ def any?(&block)
159
+ if block
160
+ super
161
+ else
162
+ (@null ? false : head_has_rows?)
163
+ end
164
+ end
165
+
166
+ def none?(&block)
167
+ if block
168
+ super
169
+ else
170
+ (@null ? true : !head_has_rows?)
171
+ end
172
+ end
163
173
 
164
- def average(col) = aggregate_value("#{col}.avg()", 'avg')
165
- def sum(col) = aggregate_value("#{col}.sum()", 'sum')
166
- def minimum(col) = aggregate_value("#{col}.min()", 'min')
167
- def maximum(col) = aggregate_value("#{col}.max()", 'max')
174
+ def one?(&block)
175
+ if block
176
+ super
177
+ else
178
+ (@null ? false : head_count_up_to(2) == 1)
179
+ end
180
+ end
181
+
182
+ def many?(&block)
183
+ if block
184
+ to_a.count(&block) > 1
185
+ else
186
+ (@null ? false : head_count_up_to(2) > 1)
187
+ end
188
+ end
189
+
190
+ def exists? = any?
191
+
192
+ def average(col) = coerce_numeric(aggregate_value("#{col}.avg()", 'avg'))
193
+ def sum(col) = coerce_numeric(aggregate_value("#{col}.sum()", 'sum'))
194
+ def minimum(col) = coerce_numeric(aggregate_value("#{col}.min()", 'min'))
195
+ def maximum(col) = coerce_numeric(aggregate_value("#{col}.max()", 'max'))
168
196
 
169
197
  def pluck(*cols)
170
198
  return [] if @null
@@ -277,6 +305,25 @@ module ActivePostgrest
277
305
  end
278
306
  end
279
307
 
308
+ def head_count_up_to(limit)
309
+ range = @client.head(@table, build_params.merge(limit: limit), schema: @schema)
310
+ .headers['content-range']
311
+ raise CountNotAvailable, 'Content-Range header missing from HEAD response' if range.nil?
312
+ return 0 if range.start_with?('*')
313
+
314
+ range[/\A\d+-(\d+)/, 1].to_i + 1
315
+ end
316
+
317
+ def head_has_rows? = head_count_up_to(1).positive?
318
+
319
+ def coerce_numeric(value)
320
+ return value unless value.is_a?(String)
321
+
322
+ value.match?(/\A-?\d+\z/) ? Integer(value) : BigDecimal(value)
323
+ rescue ArgumentError
324
+ value
325
+ end
326
+
280
327
  def aggregate_value(expr, key)
281
328
  return nil if @null
282
329
 
@@ -2,5 +2,5 @@
2
2
  # Copyright 2026 Evgeny Sokolov (FastJoe)
3
3
 
4
4
  module ActivePostgrest
5
- VERSION = '0.2.1'.freeze
5
+ VERSION = '0.2.2'.freeze
6
6
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_postgrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeny Sokolov
@@ -35,7 +35,7 @@ cert_chain:
35
35
  tC9NYXuv1LyPD+PZZRO4LDDSjUVx+RF/dJIE23hzgbLexpyriCMFyKGhHi2KApEl
36
36
  eIQUsjZL
37
37
  -----END CERTIFICATE-----
38
- date: 2026-06-18 00:00:00.000000000 Z
38
+ date: 2026-06-19 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: faraday
metadata.gz.sig CHANGED
Binary file