dense 1.2.0 → 1.3.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: 1daec03bdadb5e3cd1fead3b1021067b510a6a4904e70740287bf31b1ba95f8a
4
- data.tar.gz: 702a1847c4b6f5aa199cf8e94ca57c06ffb110fbed20492d904ff980f9583c12
3
+ metadata.gz: 6b0817224995549d7781d408ed728ce6c5da65e68a7ea0e3343af9be1c384ee3
4
+ data.tar.gz: 7b497011f2f93abe5071d525cfd7726063890510540833a5f21457c9b391964c
5
5
  SHA512:
6
- metadata.gz: fa3c85bae7c996f9ad192dcc2630e3f4d86dcea7498cbff38bacac4af5794cd10e8edf4d5ee68f1309ce63a127448cf1c54af86f6eac8022adfa8b065bc03873
7
- data.tar.gz: 306798c70dd690aa39d1e775900ba3073c4c9efcbbc248d1e87085c1644887f8bb4492d509c463e44f518b1f0cc2e05146d83f323469c3c0edc2bc697ac3f3c3
6
+ metadata.gz: 2f79ad03555da0dda0bacf23a06ce5daf3b997b24ef49813968a20b6208c61fcc0e5e740a0b0757d903ac8f0fc4d593fbe6d3f28a39de452d221aee2c27580a8
7
+ data.tar.gz: 799f68b5650b88b79ec1d070c3c054d72cccf85300f1864529a36fcc1a5c8fce2a22e6cc861edf60d5d085d8266bff5322408440fcf599829c33829f80bd74a0
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
  # dense
3
3
 
4
4
 
5
+ ## dense 1.3.0 released 2026-07-31
6
+
7
+ * Introduce Dense.dig_deep(coll, '..key') and .dig_wide(coll, '..key')
8
+
9
+
5
10
  ## dense 1.2.0 released 2026-02-07
6
11
 
7
12
  * Introduce Dense.list(coll, '..author'), like .get but always returns an array
data/README.md CHANGED
@@ -342,6 +342,30 @@ Dense.paths(data, '..nada')
342
342
  # => []
343
343
  ```
344
344
 
345
+ ### `Dense.dig_deep(collection, glob)` and `Dense.dig_wide(collection, glob)`
346
+
347
+ Using `.path` underneath, returns the first matching with a deep or wide path.
348
+
349
+ ```ruby
350
+ Dense.dig_deep(data, '..janitor')
351
+ # => nil
352
+ Dense.dig_deep(data, '..author')
353
+ # => 'Nigel Rees'
354
+ Dense.dig_deep(data, 'store..author')
355
+ # => 'Nigel Rees'
356
+ Dense.dig_deep(data, '..price')
357
+ # => 19.95
358
+
359
+ Dense.dig_deep(data, '..janitor')
360
+ # => nil
361
+ Dense.dig_deep(data, '..author')
362
+ # => 'Nigel Rees'
363
+ Dense.dig_deep(data, 'store..author')
364
+ # => 'Nigel Rees'
365
+ Dense.dig_deep(data, '..price')
366
+ # => 8.95
367
+ ```
368
+
345
369
 
346
370
  ### KeyError and TypeError
347
371
 
data/dense.gemspec CHANGED
@@ -30,7 +30,7 @@ Fetching deep in a dense structure. A kind of bastard of JSONPath.
30
30
  s.add_runtime_dependency 'raabro', '~> 1.1', '>= 1.1.5'
31
31
 
32
32
  #s.add_development_dependency 'rspec', '~> 3.7'
33
- s.add_development_dependency 'probatio'
33
+ s.add_development_dependency 'probatio', '~> 1.6'
34
34
 
35
35
  s.require_path = 'lib'
36
36
  end
data/lib/dense/methods.rb CHANGED
@@ -123,6 +123,28 @@ module Dense; class << self
123
123
  Dense::Path.make(path).list(o)
124
124
  end
125
125
 
126
+ def dig_deep(o, glob)
127
+
128
+ pa = Dense::Path.make(glob).enumerate(o)
129
+ .inject([ 0, nil ]) { |a, pa|
130
+ pac = pa.count('.')
131
+ pac > a[0] ? [ pac, pa ] : a }
132
+ .last
133
+
134
+ pa ? get(o, pa) : nil
135
+ end
136
+
137
+ def dig_wide(o, glob)
138
+
139
+ pa = Dense::Path.make(glob).enumerate(o)
140
+ .inject([ 9_999_999_999, nil ]) { |a, pa|
141
+ pac = pa.count('.')
142
+ pac < a[0] ? [ pac, pa ] : a }
143
+ .last
144
+
145
+ pa ? get(o, pa) : nil
146
+ end
147
+
126
148
  protected
127
149
 
128
150
  def key_matches_collection?(k, c)
data/lib/dense.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Dense
4
4
 
5
- VERSION = '1.2.0'
5
+ VERSION = '1.3.0'.freeze
6
6
  end
7
7
 
8
8
  require 'raabro'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dense
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
@@ -33,16 +33,16 @@ dependencies:
33
33
  name: probatio
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - ">="
36
+ - - "~>"
37
37
  - !ruby/object:Gem::Version
38
- version: '0'
38
+ version: '1.6'
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
- - - ">="
43
+ - - "~>"
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: '1.6'
46
46
  description: Fetching deep in a dense structure. A kind of bastard of JSONPath.
47
47
  email:
48
48
  - jmettraux+flor@gmail.com