dorian-csv-pluck 0.0.2 → 0.0.3

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: 477b6e2ff01bdab85d414d4bafd17c7bfb81e407fa60d547faa5f5cb7a96dcd4
4
+ data.tar.gz: eae7ee7a5791b18720f29b979a9f7c7a5600e8310ee58a196c3d0af88f778674
5
5
  SHA512:
6
- metadata.gz: 27caa8e9f1a7233d23af0bbbeb58dccea027e84cfe588e6763a889614191fb7f201e011108de2732c688cfa7ced0c1272d8b0920e115b18ee7309aca6b0581f6
7
- data.tar.gz: 1e0b9c12c01df73a5918d22da8b033bb7a7fa0911142cb68052f49cdf764149edbb29e2162ee83c72b0d923fb41606dbcf250239fc008fbdaea38099a323837a
6
+ metadata.gz: 9242c5f47be5886c2cdaa93a4b87d78f3473ce738ceeb3bf692840860d4d2cc82dc92e666be13d97871a2ea18c24277646bb8da51673c4e90aa5226940b8d368
7
+ data.tar.gz: d86a84b08ea909b575d416617cd1821f0294227ca23bcc1bb50e664b531e2f3f6f4e6fa9466dc19943b8630e4b39de263dffc1f606726e03ddc61393439ec84d
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: { alias: :p },
11
+ version: {
12
+ alias: :v
13
+ },
14
+ help: {
15
+ alias: :h
16
+ }
17
+ )
18
+
19
+ abort parsed.help if parsed.options.help
20
+
21
+ if parsed.options.version
22
+ abort File.read(File.expand_path("../../VERSION", __FILE__))
8
23
  end
9
24
 
10
- KEY = ARGV.first
11
- HEADERS = KEY !~ /^[0-9]+$/
25
+ keys = parsed.arguments
26
+ inputs = parsed.files.map { |file| File.read(file) }
27
+ inputs = [$stdin.each_line.to_a.map(&:strip).join("\n")] if inputs.empty?
28
+ headers = parsed.options.headers || parsed.options.print_headers
29
+ headers ||= keys.any? { |key| key.to_i.to_s != key }
30
+
31
+ puts(
32
+ CSV.generate do |output|
33
+ inputs.each.with_index do |input, index|
34
+ input = CSV.parse(input, headers:)
35
+
36
+ if parsed.options.print_headers && index.zero?
37
+ output << keys.map do |key|
38
+ if input.headers.include?(key)
39
+ key
40
+ elsif key.to_s =~ /^[0-9]+$/
41
+ input.headers[key.to_i]
42
+ else
43
+ key
44
+ end
45
+ end
46
+ end
12
47
 
13
- CSV
14
- .parse($stdin.each_line.to_a.join, headers: HEADERS)
15
- .map { |row| puts row[HEADERS ? KEY : KEY.to_i] }
48
+ input.each do |row|
49
+ output << keys.map do |key|
50
+ row[key.to_s =~ /^[0-9]+$/ ? key.to_i : key]
51
+ end
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: 0.0.3
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-22 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: