dorian-yaml-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/yaml-deep-pluck +61 -6
  3. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df3100bed77c5dd2ea8e3f8d47ab84db36858897a940c89176634b6d5d8faedd
4
- data.tar.gz: e90188ff2c32848e7109840de3b1e770258095bbd5ee107d5f4651f4c5106f91
3
+ metadata.gz: b2bd1aa20714f81f713e07123107bce03a5931073a2997d5ae84a0e845fa1760
4
+ data.tar.gz: 1d3027ff2b3204aa4bfb4886521c1449404d7288d5aeb2d1c6e3334db634ea4c
5
5
  SHA512:
6
- metadata.gz: 5479e85db0140fa7d8c9b30468a7f81b78db13bdc6832f2e25adafd356773ea2cfd673f0005f67aa5e287617a7f5881392e4c9f7b0b5851c460cd97742cf4277
7
- data.tar.gz: 51b71dc52088d12948dca04066de567b3d69f86a5d5350caed8b9aa318c0086a9bdefb01810000b43ddae51d500674fc639daf4bd011fce009c6f6b4601ce9f4
6
+ metadata.gz: 9f892a7c35966d851cbad56204f0376368b132e0a6db1955498c66fe399167c053f4d952413aacd5a345199a09751733871fa74409dfe1a4eba21b0604a01722
7
+ data.tar.gz: 9b37f1ddde34427e47b5e5fead1ea83d0a813d9a92ae19b8d463089e81cc85ec3c9141c90dfba2b6e7d16f02c56f2ac5f068c1cb81772b4023f85e758ff42102
data/bin/yaml-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 "yaml"
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
+ yaml: {
29
+ alias: :y
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.join] 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(YAML.safe_load(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.yaml
61
+ puts result.to_yaml
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-yaml-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: yaml
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: yaml
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
  - - ">="