dorian-csv-uniq 0.0.1 → 0.1.1

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 +24 -6
  3. metadata +19 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e58d4f4ae052d87ab6ac03f96f73af80183a58610a1da5e9ec12537b5c1c821
4
- data.tar.gz: 8be73a93d3e190a4dc8597e6f558ca54e50231312c1d5d08983a08ae2b2a1fc5
3
+ metadata.gz: 840b7e2f1b21b6216b7b4ffbd81fc734e89875451b50a4a413b1c7b648d156a1
4
+ data.tar.gz: b05e8907b44c6851ed2a99a0cf4c72e1f85d16646ca4596d33a801223138805e
5
5
  SHA512:
6
- metadata.gz: 93cd22f1e4d3544aa4f6ad47a2385cabf7bfb2854003665761b9b658a13fe8e8bce95519141b80e09862cad31f726cc350709d2aab60ef6dbb6c6f0c9a750e9d
7
- data.tar.gz: a69abe40a31aa2cf4d2f3d4d640fde75b744772b7221046fef61b1e55041b8be79ace3294e7aaffde0d2269d708821cbe4b6d983081baec6b11966a17d884544
6
+ metadata.gz: fdf422f2c703a41bb5929c7ffa93c9e23a6820a716064be569430c734e0cb75e0275142d6819d5a757e958f9416ddc4a2b9a8b96da133fa320944985f8e49830
7
+ data.tar.gz: 51e1d4fc419c4742caf117e699a5fab950f2381153f84d5126f9ee666072ddadd34d347744786cc8273a0174bd7d29039af71f9bb326ae17d81ccc7617b83341
data/bin/csv-uniq CHANGED
@@ -1,12 +1,30 @@
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
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
30
+ )
metadata CHANGED
@@ -1,19 +1,30 @@
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.1
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-17 00:00:00.000000000 Z
12
- dependencies: []
13
- description: |-
14
- Evaluates some code on csv-uniq line of the input
15
-
16
- e.g. `ls -l | csv-uniq "puts it.split.first"`
11
+ date: 2024-08-18 00:00:00.000000000 Z
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'
27
+ description: returns a csv by unique keys, can be index or name
17
28
  email: dorian@dorianmarie.com
18
29
  executables:
19
30
  - csv-uniq
@@ -44,5 +55,5 @@ requirements: []
44
55
  rubygems_version: 3.5.11
45
56
  signing_key:
46
57
  specification_version: 4
47
- summary: Evaluates some code on csv-uniq line of the input
58
+ summary: returns a csv by unique keys, can be index or name
48
59
  test_files: []