dorian-csv-uniq 0.1.2 → 1.1.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 +41 -20
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0f43afd50cb8ba7012f5ca77ce42426533ac1118e2eb4f0b102e97a73e1cc80
4
- data.tar.gz: 5893e31eed4f2eccfc77302d6f286b190e11c8df2588a84dfb17be23d0abb081
3
+ metadata.gz: 6f5a3736fa1e9c706554263c8294fb2bf06d5d0e196783e9a61521beb41a15f1
4
+ data.tar.gz: 111c23b8feb2169bbfc33cbe942715b95cf787b1520c8098ee601b037075be86
5
5
  SHA512:
6
- metadata.gz: 9bec710af2bf383307649cee46a0433cdf8bc74341b602c7c78199d0c63e8e5be9d917b4947d7d3c66b30e5a10dc697ecf238c5d89f3458f8852cbd2d2865d60
7
- data.tar.gz: a4196cd5709e61c9341db83ce5f181c99505a83edaed194a0e21f489e39aea2676ac2972d6b24bbf1e637b5525684dd96231ff7cee85200c67b27b746cf18786
6
+ metadata.gz: a2e8335b3cf5d963752791665a76e60739097d8c409e59db54f782e8b1a8f8e5aac5c84b590070b6559546c41cf7fe5d6a1d05935a426b09e6cb354e5e96c37b
7
+ data.tar.gz: 3b9af5800134818fa5193e68e5084eefa7a01c3f7eccf9f7910a5628ff7d64c3d05f037f478b8b85844e74da35d644a70512d9c2bcec212349ca28b8b987db92
data/bin/csv-uniq CHANGED
@@ -2,29 +2,50 @@
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", __dir__))
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
+ output << input.headers if parsed.options.print_headers && index.zero?
41
+
42
+ input.uniq do |row|
43
+ (
44
+ keys || (headers && input.headers) || (0...input.first.size)
45
+ ).map { |key| row[key.to_i.to_s == key ? key.to_i : key] }
46
+ end
47
+ end
48
+
49
+ rows.flatten(1).uniq.each { |row| output << row }
50
+ end
30
51
  )
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.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
14
  name: csv
@@ -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
  - - ">="