dorian-json-deep-pluck 0.0.3 → 1.1.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 +61 -6
  3. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eea5e13e775270018c05e67ea7439122f46a9a4aa478a742bfdf3e20c79ce5bb
4
- data.tar.gz: 939e8b8909546f0bf159f517aad90c1cfa42d37e7914e4274fbd60ad810ebd1a
3
+ metadata.gz: 9a89f2e89ac42b5d530fb9e963cfa07978c293b9fa2ab0afe43be7200de6bfa3
4
+ data.tar.gz: fe8da81d26f8151bd839ed6a5f84ffd042228ef79e292016b9a6f8369b6fe021
5
5
  SHA512:
6
- metadata.gz: 109d6b6942a2629dfe0f8b4dce78ef006b528e928d857506cafdb7037c13ca51f16067cc52906ca60ceeafd5e57f2830433ec0b7b96105f0110c8ac3f643af2d
7
- data.tar.gz: efa5ae9f2d2c286f7130e0c56f1467a3d663a5f5a5b7de7ba72f56bf55620910ba1107aa19db5c78383191ea4562975978da07f2326289723320836e05d4ea7a
6
+ metadata.gz: 9ab14c5f0a3516db15489fe1529e029603c56eaa1480505097610d99a90109c89d755d2bb9893d9ebe6e98db3ef33d766a50e751b066fddd3b820cdeac6bdd24
7
+ data.tar.gz: 1ff9a63c37daa8d48f550fce69d5dc9f6846f4d06699202312f4a6978114543be320aedb191093a1f16af658f19d20656e1b552fe9be03c4f36a572c8175a8ea
data/bin/json-deep-pluck CHANGED
@@ -1,12 +1,67 @@
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.flat_map do |key, value|
11
+ [deep_pluck(key, &block), deep_pluck(value, &block)]
12
+ end
13
+
14
+ results << yield(json)
15
+
16
+ results.compact.empty? ? nil : results.compact
17
+ elsif json.is_a?(Array)
18
+ results = json.map { |element| deep_pluck(element, &block) }
19
+
20
+ results << yield(json)
21
+
22
+ results.compact.empty? ? nil : results.compact
23
+ end
7
24
  end
8
25
 
9
- $stdin.each_line do |it|
10
- it.strip!
11
- eval(ARGV.first)
26
+ parsed =
27
+ Dorian::Arguments.parse(
28
+ json: {
29
+ alias: :j
30
+ },
31
+ ruby: {
32
+ alias: :r
33
+ },
34
+ version: {
35
+ alias: :v
36
+ },
37
+ help: {
38
+ alias: :h
39
+ }
40
+ )
41
+
42
+ abort parsed.help if parsed.options.help
43
+
44
+ if parsed.options.version
45
+ abort File.read(File.expand_path("../VERSION", __dir__))
46
+ end
47
+
48
+ inputs = parsed.files.map { |file| File.read(file) }
49
+ inputs = [$stdin.each_line.to_a.map(&:strip).join("\n")] if inputs.empty?
50
+ keys = parsed.arguments.map { |key| key.to_i.to_s == key ? key.to_i : key }
51
+
52
+ inputs.each do |input|
53
+ result =
54
+ deep_pluck(JSON.parse(input)) do |json|
55
+ json.is_a?(Hash) || json.is_a?(Array) ? json.dig(*keys) : nil
56
+ rescue TypeError
57
+ nil
58
+ end
59
+
60
+ if parsed.options.json
61
+ puts JSON.pretty_generate(result)
62
+ elsif parsed.options.ruby
63
+ p result
64
+ else
65
+ puts result
66
+ end
12
67
  end
metadata CHANGED
@@ -1,17 +1,17 @@
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.1.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-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: json
14
+ name: dorian-arguments
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dorian-arguments
28
+ name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -57,9 +57,9 @@ require_paths:
57
57
  - lib
58
58
  required_ruby_version: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - '='
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: 3.3.4
63
63
  required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="