dorian-csv-uniq 0.1.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/csv-uniq +51 -20
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0f43afd50cb8ba7012f5ca77ce42426533ac1118e2eb4f0b102e97a73e1cc80
4
- data.tar.gz: 5893e31eed4f2eccfc77302d6f286b190e11c8df2588a84dfb17be23d0abb081
3
+ metadata.gz: 8890562977177594a6271149092412127fbf019dbd43bcd0b011f6333f910541
4
+ data.tar.gz: 564679dfac50c4a80084ef502964d01dadafd36e709c73c9422b734e249f7061
5
5
  SHA512:
6
- metadata.gz: 9bec710af2bf383307649cee46a0433cdf8bc74341b602c7c78199d0c63e8e5be9d917b4947d7d3c66b30e5a10dc697ecf238c5d89f3458f8852cbd2d2865d60
7
- data.tar.gz: a4196cd5709e61c9341db83ce5f181c99505a83edaed194a0e21f489e39aea2676ac2972d6b24bbf1e637b5525684dd96231ff7cee85200c67b27b746cf18786
6
+ metadata.gz: 1018b2ffbf3518c1862de7c47b289f44bf23dfa869343e0c361b15e7a6756ddbfb8a0e4c7ac82274c4f19aaf88af76e767069142d90594f2b45c1d16e5205da9
7
+ data.tar.gz: 7b66353370765cba05dc18ab12d436d71b541ec008f6dfb67c1986a78dc69b806735937d71be08510d0446d0e802971a545e6adf4d8dccab7134833f8d1be792
data/bin/csv-uniq CHANGED
@@ -2,29 +2,60 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "csv"
5
+ require "dorian/arguments"
5
6
 
6
- if ARGV.size < 1 || ARGV[0] == "--help" || ARGV[0] == "-h"
7
- puts "USAGE: ... | csv-uniq [KEY...] [-h|--headers]"
8
- exit
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__))
9
25
  end
10
26
 
11
- HEADERS = ARGV.detect { |argv| argv == "-h" || argv == "--headers" }
12
- KEYS = (ARGV - [HEADERS]).map { |key| HEADERS ? key : key.to_i }
27
+ keys = parsed.arguments
28
+ keys = nil if keys.empty?
29
+ inputs = parsed.files.map { |file| File.read(file) }
30
+ inputs = [$stdin.each_line.to_a.map(&:strip).join("\n")] if inputs.empty?
31
+ headers = parsed.options.headers || parsed.options.print_headers
32
+ headers ||= keys&.any? { |key| key.to_i.to_s != key }
13
33
 
14
34
  puts(
15
- CSV
16
- .generate do |output|
17
- input =
18
- CSV.parse(
19
- $stdin.each_line.to_a.map(&:strip).join("\n"),
20
- headers: !!HEADERS
21
- )
22
-
23
- output << input.headers if HEADERS
24
-
25
- input
26
- .uniq { |row| KEYS.map { |key| row[key] } }
27
- .each { |row| output << row }
28
- end
29
- .strip
35
+ CSV.generate do |output|
36
+ rows =
37
+ inputs.map.with_index do |input, index|
38
+ input = CSV.parse(input, headers:)
39
+
40
+ if parsed.options.print_headers && index.zero?
41
+ output << (keys || input.headers).map do |key|
42
+ if input.headers.include?(key)
43
+ key
44
+ elsif key.to_i.to_s == key
45
+ input.headers[key.to_i]
46
+ else
47
+ key
48
+ end
49
+ end
50
+ end
51
+
52
+ input.map do |row|
53
+ (
54
+ keys || (headers && input.headers) || (0...input.first.size)
55
+ ).map { |key| row[key.to_i.to_s == key ? key.to_i : key] }
56
+ end
57
+ end
58
+
59
+ rows.flatten(1).uniq.each { |row| output << row }
60
+ end
30
61
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-csv-uniq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.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-22 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