dorian-csv-pluck 0.0.1 → 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 +19 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7c32747d725ade98f10c9b5826d01375930493d04588348a16f8206cc3b7b6da
4
- data.tar.gz: 0140e9cf48ea81dcf779c7de3899b5712b28ace0bcbcb65f8667c5ebbb48be0d
3
+ metadata.gz: 477b6e2ff01bdab85d414d4bafd17c7bfb81e407fa60d547faa5f5cb7a96dcd4
4
+ data.tar.gz: eae7ee7a5791b18720f29b979a9f7c7a5600e8310ee58a196c3d0af88f778674
5
5
  SHA512:
6
- metadata.gz: 1c9775aaeb861b80a72db7381477ff6012a505ecef8a527a544febba642f3f99596dfa4b3b02bfd06ee0953deed50d27f3ddc3dfb04a87d376b0caa32a22fed8
7
- data.tar.gz: e5726ae2463ed6070a2131372b16f8bb07633a8943259a363844876f2f3cfc3b4e892c9649b3603116c52311b93642d3b7bb2ca6b15d074a0ad2f57068f34f7a
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.1
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-16 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
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: dorian-to_struct
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -38,10 +38,21 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: |-
42
- Evaluates some code pluck lines of the csv input
43
-
44
- e.g. `cat users.csv | csv-pluck --headers "puts it.first[:name]"`
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'
55
+ description: plucks each line of the csv input
45
56
  email: dorian@dorianmarie.com
46
57
  executables:
47
58
  - csv-pluck
@@ -72,5 +83,5 @@ requirements: []
72
83
  rubygems_version: 3.5.11
73
84
  signing_key:
74
85
  specification_version: 4
75
- summary: Evaluates some code pluck lines of the csv input
86
+ summary: plucks each line of the csv input
76
87
  test_files: []