dorian-yaml-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/yaml-deep-pluck +65 -6
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df3100bed77c5dd2ea8e3f8d47ab84db36858897a940c89176634b6d5d8faedd
4
- data.tar.gz: e90188ff2c32848e7109840de3b1e770258095bbd5ee107d5f4651f4c5106f91
3
+ metadata.gz: 7cd6edffcf6ac8ed7610dd3a746e5232798a0aeb9c19ea140dc426dc86b6b25f
4
+ data.tar.gz: 40668d00b9b6791e16823f7d38a192a726e369f5ac79b382abc3240cfc9989cd
5
5
  SHA512:
6
- metadata.gz: 5479e85db0140fa7d8c9b30468a7f81b78db13bdc6832f2e25adafd356773ea2cfd673f0005f67aa5e287617a7f5881392e4c9f7b0b5851c460cd97742cf4277
7
- data.tar.gz: 51b71dc52088d12948dca04066de567b3d69f86a5d5350caed8b9aa318c0086a9bdefb01810000b43ddae51d500674fc639daf4bd011fce009c6f6b4601ce9f4
6
+ metadata.gz: b9e8fa6892192424a4c18438d03080ed2c9e191479e4e01d5bf89b774aeb8246158ea625f3ac6a3822579da6eb892e9de2e218f9df1ca19751518f8945a00fb8
7
+ data.tar.gz: 40c180418a7b8c5e3052c4fc2c6129c7884982ada5e028de604bf81212a5de8f67826813f01c1b4d98daa534595925ebd422db75523d988a28c4e9732dd60cca
data/bin/yaml-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 "yaml"
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
+ yaml: {
33
+ alias: :y
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.join] 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(YAML.safe_load(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.yaml
65
+ puts result.to_yaml
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-yaml-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: yaml