dorian-json-deep-pluck 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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