foobara-util 1.0.7 → 1.0.8

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: 10d3c0d79a87e3a7a92abf69915f5835b4973e43de6eca90e9bdcdb91f1f0838
4
- data.tar.gz: 9458bdc26b15ec704e49163621acabab67f59fa6f4cb64d531183d1c58e2523b
3
+ metadata.gz: 66fafc1f5e8cdb69b042528211ebb96c0e929b32fddaffbe7d12d27edc19b703
4
+ data.tar.gz: d62cca30935277875205953bffc97520038759d4f777f1bb7eabc474572d2ab5
5
5
  SHA512:
6
- metadata.gz: 26fea39e3fedef82f906e526bd5fd52bb744ced65b6099d912ad60a69a0b2803527b00315de7a2477554c1d51d2c95841b04ad890d21b3d1ffd1f222b3f78e8d
7
- data.tar.gz: 716bdb5a05215ec218f0edfef4e64c6e7bc792fce8854eed3c301244a1d15d21d2a06f835eb73abdf9342445ef0ea2a70f7eec75ec6f092ce34f277a377a6033
6
+ metadata.gz: 5b7242ea1459e64b66938b4c69ed870c43ad567eec666f914c476c6a11877f4241877b1f2f7aa829507dab07890001fbb930268e02c2dda467997c479b6d3558
7
+ data.tar.gz: f15b09ed0b07a8de534196c791eba4ea863627f8d0fdc97ae09ed3c9cac40f690da4ae62dd10e2c13a6a5da85230bd359bdc8201b6d58e783ee0a7e9821240c3
data/CHANGELOG.md CHANGED
@@ -1,7 +1,11 @@
1
+ ## [1.0.8] - 2026-01-22
2
+
3
+ - Add .sort_by_keys/.sort_by_keys! for hashes
4
+
1
5
  ## [1.0.7] - 2025-12-19
2
6
 
3
7
  - Fix bug where .all_symbolic_keys? would return true for a hash with a string key
4
- - Handle situations where Hash subclass or non-Hash are passed to .symbolize_keys
8
+ - Handle situations where Hash subclass or non-Hash are passed to .symbolize_keys and .symbolize_keys!
5
9
 
6
10
  ## [1.0.6] - 2025-12-14
7
11
 
@@ -2,6 +2,51 @@ module Foobara
2
2
  module Util
3
3
  module_function
4
4
 
5
+ def sort_by_keys(hash)
6
+ keys = hash.keys
7
+
8
+ keys.sort!
9
+
10
+ sorted_hash = {}
11
+
12
+ keys.each do |key|
13
+ sorted_hash[key] = hash[key]
14
+ end
15
+
16
+ sorted_hash
17
+ end
18
+
19
+ def sort_by_keys!(hash)
20
+ last_key = keys_to_move = nil
21
+
22
+ hash.each_key do |key|
23
+ if last_key
24
+ if key < last_key
25
+ if keys_to_move
26
+ keys_to_move << key
27
+ else
28
+ keys_to_move = [key]
29
+ end
30
+
31
+ next
32
+ end
33
+ end
34
+
35
+ last_key = key
36
+ end
37
+
38
+ return hash unless keys_to_move
39
+
40
+ keys_to_move.sort!
41
+
42
+ keys_to_move.each do |key|
43
+ value = hash.delete(key)
44
+ hash[key] = value
45
+ end
46
+
47
+ hash
48
+ end
49
+
5
50
  def symbolize_keys(hash)
6
51
  unless all_symbolizable_keys?(hash)
7
52
  # :nocov:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi