dorian-sort-csv 0.0.3 → 1.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/sort-csv +43 -6
  3. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fba7529fd591d2e421edd2af0bd88d9a099eecf0a34004f45093a3f58c6f020
4
- data.tar.gz: c1abea27d35e3e234040b0788d916b31c2f4ebac5192d3f2f0d43880a513a0f2
3
+ metadata.gz: 1a0b93a4a8480814b28927e96cbc82f09433d72c93135b4ee3fd57174a9b9dca
4
+ data.tar.gz: 799483ac6cefd50d7332665ebd86c10b8b3a3ae707eab6b14cbf8f18209f349d
5
5
  SHA512:
6
- metadata.gz: 30d640c34bfced3a6dc7b057bcb70a6b8dc7274222a3e4d655e562e5f9162818d81de619db4ffea073f8447065da262a58040ea1e78727b266f787322a113e02
7
- data.tar.gz: 05c2f2e62dcfbd9e5c389e0165c3df1e7bffed1dcca3f6cec183a9f83f51303e1f1b5ab0e67acf3c405d09615997df0194cf3eddc56019c73fb69d276a739bba
6
+ metadata.gz: 95a898ca751f37d606a91bdb83041eb8addbc0ec677051c570431d9a3deb22e95bc79fa891aa849f1bab25bef78cff44b7dc5f4acdf77686e21716ca38b87c3d
7
+ data.tar.gz: c8242b8f3a36073a976d3497a055ad5765a36640373e6ce67744b6858fe2a83158db8aad0cc98b08ed9010fbc9e63f0c34885bfcc05e7494b364aeeac7c2159a
data/bin/sort-csv CHANGED
@@ -1,12 +1,49 @@
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"
6
- exit
4
+ require "dorian/arguments"
5
+ require "csv"
6
+
7
+ parsed =
8
+ Dorian::Arguments.parse(
9
+ integers: {
10
+ alias: :i
11
+ },
12
+ headers: {
13
+ alias: :h
14
+ },
15
+ version: {
16
+ alias: :v
17
+ },
18
+ help: {
19
+ alias: :h
20
+ }
21
+ )
22
+
23
+ abort parsed.help if parsed.options.help
24
+
25
+ if parsed.options.version
26
+ abort File.read(File.expand_path("../VERSION", __dir__))
7
27
  end
8
28
 
9
- $stdin.each_line do |it|
10
- it.strip!
11
- eval(ARGV.first)
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
32
+
33
+ keys = parsed.arguments.map { |key| key.to_i.to_s == key ? key.to_i : key }
34
+
35
+ inputs.each do |input|
36
+ input = CSV.parse(input, headers:)
37
+
38
+ rows =
39
+ input.sort_by do |row|
40
+ keys.map { |key| parsed.options.integers ? row[key].to_i : row[key] }
41
+ end
42
+
43
+ puts(
44
+ CSV.generate do |output|
45
+ output << input.headers if headers
46
+ rows.each { |row| output << row }
47
+ end
48
+ )
12
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-sort-csv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
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
  - - ">="