dorian-csv-uniq 0.0.1 → 0.1.0

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-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: []