effective_resources 2.33.0 → 2.34.0

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: 6f5a25c6d8a3d00de7fc80b70dacf4558f2c0dc8241294ce276f6d31eda10a21
4
- data.tar.gz: a7edbeb23f0ae8a5f772227c25fd8febe75d8b277440c3f10b4de42575c85a61
3
+ metadata.gz: a673f073e82b66e022333d5aa269a5575dac0781dda438062842cfa2947e5e04
4
+ data.tar.gz: 8c69a47dcfb84b34046c56d925a5e0c325e5354f7106d9a835b2ed483556a07d
5
5
  SHA512:
6
- metadata.gz: 7f44f4d9b43f1cfd93d567d3ed1ea12f68696acb2dbb328a07fa811eef0de797259912f936de1d016b333179baac47c22ec4773be3667245ea0b1bb0516bb3d9
7
- data.tar.gz: 56d5924d9b63fb7b51be6b47eeb178a8ab6bb7eae501083b1e6077bb2145867750351a5233d6ff01e9ecbd8ebbcd9a80afb196aac0769d0c9e145960d3de659b
6
+ metadata.gz: f57d263e36acb49eae8ff7cb87da207fdb1827075006da249d4bd5d247c5b4f956bf13f0bd0b0fde52200abd927f0b52139d02aad1d00dc0e37965313b935bc2
7
+ data.tar.gz: b10d8fd11ad1973ba4ddd1aac85e2a5de25217cc11f7a5e001eedac1f11a30e19cdc4461eb9cb1d54152b7e82cd2d1de9ac3147b01c41fc13ec13dbb71b7c2f2
@@ -22,9 +22,21 @@ module Effective
22
22
  # name: sort by this column, or this relation
23
23
  # sort: when a symbol or boolean, this is the relation's column to sort by
24
24
 
25
- def order(name, direction = :asc, as: nil, sort: nil, sql_column: nil, limit: nil, reorder: false)
25
+ # There is a sort by array (ids) syntax:
26
+ # This will sort the base collection.id array by the given direction
27
+ #
28
+ # Effective::Resource.new(collection).order(direction) do
29
+ # collection.sort { |a, b| a.membership&.category.to_s <=> b.membership&.category.to_s }
30
+ # end
31
+
32
+ def order(name = nil, direction = :asc, as: nil, sort: nil, sql_column: nil, limit: nil, reorder: false, &block)
26
33
  raise 'expected relation to be present' unless relation
27
34
 
35
+ if block_given? && (name == :asc || name == :desc)
36
+ direction = name
37
+ name = :id
38
+ end
39
+
28
40
  sql_column ||= sql_column(name)
29
41
  sql_type = (as || sql_type(name))
30
42
 
@@ -32,6 +44,11 @@ module Effective
32
44
  sql_direction = sql_direction(direction)
33
45
  @relation = relation.reorder(nil) if reorder
34
46
 
47
+ if block_given?
48
+ ids = block.call().map { |resource| resource.try(:id) || resource }
49
+ return relation.order(order_by_array_position((direction == :asc) ? ids : ids.reverse, sql_column))
50
+ end
51
+
35
52
  case sql_type
36
53
  when :belongs_to
37
54
  relation
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.33.0'.freeze
2
+ VERSION = '2.34.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.33.0
4
+ version: 2.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-07 00:00:00.000000000 Z
11
+ date: 2025-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails