dorian-json-deep-pluck 0.0.3 → 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/json-deep-pluck +65 -6
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eea5e13e775270018c05e67ea7439122f46a9a4aa478a742bfdf3e20c79ce5bb
4
- data.tar.gz: 939e8b8909546f0bf159f517aad90c1cfa42d37e7914e4274fbd60ad810ebd1a
3
+ metadata.gz: eee71f7f0e4215b908a761376f1aa294d1344bf77cbbb011fe392979b7a201ee
4
+ data.tar.gz: 31924103dcd5d8b10735d97aad93ab3ccac9ee82dea33fb7cc585513ffbf5de4
5
5
  SHA512:
6
- metadata.gz: 109d6b6942a2629dfe0f8b4dce78ef006b528e928d857506cafdb7037c13ca51f16067cc52906ca60ceeafd5e57f2830433ec0b7b96105f0110c8ac3f643af2d
7
- data.tar.gz: efa5ae9f2d2c286f7130e0c56f1467a3d663a5f5a5b7de7ba72f56bf55620910ba1107aa19db5c78383191ea4562975978da07f2326289723320836e05d4ea7a
6
+ metadata.gz: 1df0e66e4bc07a6af4d7a707ace5dcdefb82d0b04662948682fe4ab14d077d35871259b56c0c49666aa7eae876d37fe43980a81725606824ce132a1126d30627
7
+ data.tar.gz: fcb8f49d81c54de227e70aed5638a1beb3bc9271ba28df078f499cdbf32f6137ef4f474cfc2cb6b1c505710284794558a3420e61a63b23806ec0459627bbd721
data/bin/json-deep-pluck CHANGED
@@ -1,12 +1,71 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- if ARGV.size != 1 || ARGV[0] == "--help" || ARGV[0] == "-h"
5
- puts "USAGE: ... | each CODE"
6
- exit
4
+ require "dorian/arguments"
5
+ require "json"
6
+
7
+ def deep_pluck(json, &block)
8
+ if json.is_a?(Hash)
9
+ results =
10
+ json
11
+ .map do |key, value|
12
+ [deep_pluck(key, &block), deep_pluck(value, &block)]
13
+ end
14
+ .flatten(1)
15
+
16
+ results << yield(json)
17
+
18
+ results.compact.empty? ? nil : results.compact
19
+ elsif json.is_a?(Array)
20
+ results = json.map { |element| deep_pluck(element, &block) }
21
+
22
+ results << yield(json)
23
+
24
+ results.compact.empty? ? nil : results.compact
25
+ else
26
+ nil
27
+ end
7
28
  end
8
29
 
9
- $stdin.each_line do |it|
10
- it.strip!
11
- eval(ARGV.first)
30
+ parsed =
31
+ Dorian::Arguments.parse(
32
+ json: {
33
+ alias: :j
34
+ },
35
+ ruby: {
36
+ alias: :r
37
+ },
38
+ version: {
39
+ alias: :v
40
+ },
41
+ help: {
42
+ alias: :h
43
+ }
44
+ )
45
+
46
+ abort parsed.help if parsed.options.help
47
+
48
+ if parsed.options.version
49
+ abort File.read(File.expand_path("../../VERSION", __FILE__))
50
+ end
51
+
52
+ inputs = parsed.files.map { |file| File.read(file) }
53
+ inputs = [$stdin.each_line.to_a.map(&:strip).join("\n")] if inputs.empty?
54
+ keys = parsed.arguments.map { |key| key.to_i.to_s == key ? key.to_i : key }
55
+
56
+ inputs.each do |input|
57
+ result =
58
+ deep_pluck(JSON.parse(input)) do |json|
59
+ json.is_a?(Hash) || json.is_a?(Array) ? json.dig(*keys) : nil
60
+ rescue TypeError
61
+ nil
62
+ end
63
+
64
+ if parsed.options.json
65
+ puts JSON.pretty_generate(result)
66
+ elsif parsed.options.ruby
67
+ p result
68
+ else
69
+ puts result
70
+ end
12
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-json-deep-pluck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-22 00:00:00.000000000 Z
11
+ date: 2024-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json