dorian-csv-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/csv-pluck +47 -7
  3. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d369581d9f0bbc72e12a2ccb33a288f9d8ebb13f369c2f6558cf77dfad360bc5
4
- data.tar.gz: '0948493afd3cf1fe7c837edb5813984cdfbb916c28ea1bc8a593418d51c910ce'
3
+ metadata.gz: c4ff09201c40069a2fc1030dca9b830db679e0d15a0e6e83af321e0b559fa03c
4
+ data.tar.gz: a31566d5871a15cf0528f084b4e9545b36d92a5cf3c991bc2982e5276961c3a9
5
5
  SHA512:
6
- metadata.gz: 27caa8e9f1a7233d23af0bbbeb58dccea027e84cfe588e6763a889614191fb7f201e011108de2732c688cfa7ced0c1272d8b0920e115b18ee7309aca6b0581f6
7
- data.tar.gz: 1e0b9c12c01df73a5918d22da8b033bb7a7fa0911142cb68052f49cdf764149edbb29e2162ee83c72b0d923fb41606dbcf250239fc008fbdaea38099a323837a
6
+ metadata.gz: 6d70718fc924a5e8540676148566af8fa8826baf13181f50d0e08058d1360601b862b4f6e3c8b888fbb5be729ed039efbc96a912ff44f45affaa9f9a1a0a54e5
7
+ data.tar.gz: 934f9e1b2e1293a02f5857e4359ac119bd90dea2e5377bfa993d5669973a89794a73a71cbf08d8cea4c134075c3e2193f6fae2b1b9b515d2c111fc9606876a04
data/bin/csv-pluck CHANGED
@@ -2,14 +2,54 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "csv"
5
+ require "dorian/arguments"
5
6
 
6
- if ARGV.size != 1 || ARGV.first == "--help" || ARGV.first == "-h"
7
- abort "UASGE: ... | csv-pluck KEY"
7
+ parsed =
8
+ Dorian::Arguments.parse(
9
+ headers: :boolean,
10
+ print_headers: {
11
+ alias: :p
12
+ },
13
+ version: {
14
+ alias: :v
15
+ },
16
+ help: {
17
+ alias: :h
18
+ }
19
+ )
20
+
21
+ abort parsed.help if parsed.options.help
22
+
23
+ if parsed.options.version
24
+ abort File.read(File.expand_path("../../VERSION", __FILE__))
8
25
  end
9
26
 
10
- KEY = ARGV.first
11
- HEADERS = KEY !~ /^[0-9]+$/
27
+ keys = parsed.arguments
28
+ inputs = parsed.files.map { |file| File.read(file) }
29
+ inputs = [$stdin.each_line.to_a.map(&:strip).join("\n")] if inputs.empty?
30
+ headers = parsed.options.headers || parsed.options.print_headers
31
+ headers ||= keys.any? { |key| key.to_i.to_s != key }
32
+
33
+ puts(
34
+ CSV.generate do |output|
35
+ inputs.each.with_index do |input, index|
36
+ input = CSV.parse(input, headers:)
37
+
38
+ if parsed.options.print_headers && index.zero?
39
+ output << keys.map do |key|
40
+ if input.headers.include?(key)
41
+ key
42
+ elsif key.to_i.to_s == key
43
+ input.headers[key.to_i]
44
+ else
45
+ key
46
+ end
47
+ end
48
+ end
12
49
 
13
- CSV
14
- .parse($stdin.each_line.to_a.join, headers: HEADERS)
15
- .map { |row| puts row[HEADERS ? KEY : KEY.to_i] }
50
+ input.each do |row|
51
+ output << keys.map { |key| row[key.to_i.to_s == key ? key.to_i : key] }
52
+ end
53
+ end
54
+ end
55
+ )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-csv-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: csv
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dorian-arguments
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: plucks each line of the csv input
42
56
  email: dorian@dorianmarie.com
43
57
  executables: