dorian-csv-uniq 0.0.1 → 0.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 +20 -6
  3. metadata +19 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e58d4f4ae052d87ab6ac03f96f73af80183a58610a1da5e9ec12537b5c1c821
4
- data.tar.gz: 8be73a93d3e190a4dc8597e6f558ca54e50231312c1d5d08983a08ae2b2a1fc5
3
+ metadata.gz: 0b2ca7cb1608df48a8fd928c62ecf3b50fa44edf000d3522f3957c46dfdcbc00
4
+ data.tar.gz: 524c7f0f2385e0a85ee207e0656a7757c2b7468c1283a519f1ee629c2a155d8f
5
5
  SHA512:
6
- metadata.gz: 93cd22f1e4d3544aa4f6ad47a2385cabf7bfb2854003665761b9b658a13fe8e8bce95519141b80e09862cad31f726cc350709d2aab60ef6dbb6c6f0c9a750e9d
7
- data.tar.gz: a69abe40a31aa2cf4d2f3d4d640fde75b744772b7221046fef61b1e55041b8be79ace3294e7aaffde0d2269d708821cbe4b6d983081baec6b11966a17d884544
6
+ metadata.gz: fc0b6bdf967af22c1bc4d4b6210d9096fbfa12a4d7992eb430096df26a551eed330399d7bf9f8d998ef9cfa1f5c4b93c13b646136dc51970a9a63a8b7447f98d
7
+ data.tar.gz: 7dc60db94f3232dd2f65cfb350094e2ee786aa854f2060325dc7ac4b2aad487b88c8b1778014146c043c322064dd8e68116da403ce5ef1e09527ae4b12946cb7
data/bin/csv-uniq CHANGED
@@ -1,12 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- if ARGV.size != 1 || ARGV[0] == "--help" || ARGV[0] == "-h"
5
- puts "USAGE: ... | each CODE"
4
+ require "csv"
5
+
6
+ if ARGV.size < 1 || ARGV[0] == "--help" || ARGV[0] == "-h"
7
+ puts "USAGE: ... | csv-uniq [KEY...] [-h|--headers]"
6
8
  exit
7
9
  end
8
10
 
9
- $stdin.each_line do |it|
10
- it.strip!
11
- eval(ARGV.first)
12
- end
11
+ HEADERS = ARGV.detect { |argv| argv == "-h" || argv == "--headers" }
12
+ KEYS = (ARGV - [HEADERS]).map { |key| HEADERS ? key : key.to_i }
13
+
14
+ puts(
15
+ CSV.generate do |output|
16
+ input = CSV.parse($stdin.each_line.to_a.map(&:strip).join("\n"), headers: !!HEADERS)
17
+
18
+ if HEADERS
19
+ output << input.headers
20
+ end
21
+
22
+ input.uniq { |row| KEYS.map { |key| row[key] } }.each do |row|
23
+ output << row
24
+ end
25
+ end.strip
26
+ )
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-csv-uniq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
@@ -9,11 +9,25 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2024-08-17 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: csv
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: |-
14
- Evaluates some code on csv-uniq line of the input
28
+ returns a csv by unique keys, can be index or name
15
29
 
16
- e.g. `ls -l | csv-uniq "puts it.split.first"`
30
+ e.g. `cat users.csv | csv-uniq --headers id`
17
31
  email: dorian@dorianmarie.com
18
32
  executables:
19
33
  - csv-uniq
@@ -44,5 +58,5 @@ requirements: []
44
58
  rubygems_version: 3.5.11
45
59
  signing_key:
46
60
  specification_version: 4
47
- summary: Evaluates some code on csv-uniq line of the input
61
+ summary: returns a csv by unique keys, can be index or name
48
62
  test_files: []