dorian-yaml-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/yaml-deep-pluck +65 -6
  3. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5e1f5a5b642fb4eeaad36b8e22f545ef1de056ff09eac30c09d101ae0b915c5
4
- data.tar.gz: d68874f74257300ac8ea8b24a41a78880a4c3d96b2761420b09d4fd4040d7ba8
3
+ metadata.gz: 7cd6edffcf6ac8ed7610dd3a746e5232798a0aeb9c19ea140dc426dc86b6b25f
4
+ data.tar.gz: 40668d00b9b6791e16823f7d38a192a726e369f5ac79b382abc3240cfc9989cd
5
5
  SHA512:
6
- metadata.gz: 94a206a7e10cf21899ea2993c7373a3fd4f4d7c7dada4b06f43f6b98c8e0141a94b2eedaaa7f302f560e19e3bbb1c8cea5e408cec89bfe16f173a73c3bde5250
7
- data.tar.gz: 37da93ab44eb2eed269e1b9a9eaef64824de1147ab73f260e944245635c285bf2ec0a9807fe7d3058d80ea83480cf4b7c2c22b6eb0482a8ff6cae36d4460af3b
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.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: yaml
@@ -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: plucks yaml deeply from yaml path
28
42
  email: dorian@dorianmarie.com
29
43
  executables: