dorian-json-deep-pluck 0.0.2 → 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 +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1804f7ae990924d4d9bfec50b0afd84dc2c983b769abe59ba5bf92c9ee09829a
4
- data.tar.gz: e526d674ff517d26071408b75a85ef668578d384d815d603ad78d7ea6da0c4ae
3
+ metadata.gz: eee71f7f0e4215b908a761376f1aa294d1344bf77cbbb011fe392979b7a201ee
4
+ data.tar.gz: 31924103dcd5d8b10735d97aad93ab3ccac9ee82dea33fb7cc585513ffbf5de4
5
5
  SHA512:
6
- metadata.gz: 16af71f13f7810e098ce7967355c0a252f77b2ce8c3af46603135a5e22dfd070d5a3e6dea80034228295bc9821ebafd27a03cf31a3a6c2d7a2a704d3ce8bacce
7
- data.tar.gz: df36114286298ac1e7240460f3eb1634011964fb689f29aa3358e273938d292a82422c9bf0c4efefa677dced6eee8f940004b63fd08ac8dd77b5ed0c33bd6d16
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.2
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-18 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
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dorian-arguments
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: deep pluck json based on json path
28
42
  email: dorian@dorianmarie.com
29
43
  executables: