advance 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/bin/csv_split_on_change_nh.rb +6 -2
- data/lib/advance/version.rb +1 -1
- data/lib/path_for_new_file.rb +50 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d598fdb8c38b12f9946058d06f4904f8c4e279c5973d7173061869ebeb8e4db8
|
4
|
+
data.tar.gz: b37c176948435b13ee2a494e5e0973fd14d5660e3bbe1da3c419b5a7328286b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 991cbfc6556e45618971ab059c8bb8a23a106abf73d86f3f1409d47ce03920b7b5ab67287bbb43a920f6443bafe0e18e71c3890b381e89e8da9c2bd828f0cbb0
|
7
|
+
data.tar.gz: 3054fb61cf64fe18e12e203fd97ebc49cc54d846e2ad28a46269128041c9e4e4785cac92d5560acdc102a0450460df8dd2b5b944b3756a7ab3b0fc315371a758
|
data/Gemfile.lock
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require
|
2
|
+
require "csv"
|
3
|
+
require_relative "../lib/path_for_new_file"
|
3
4
|
|
4
5
|
def columns_changed?(previous_row, row, change_columns)
|
5
6
|
changed = false
|
@@ -17,11 +18,14 @@ change_columns = ARGV[0].split(/,/).map(&:to_i)
|
|
17
18
|
input_file = ARGV[1]
|
18
19
|
|
19
20
|
previous_row = output_csv = nil
|
21
|
+
file_path_generator = FilePathGenerator.new()
|
22
|
+
|
20
23
|
CSV.foreach(input_file) do |row|
|
21
24
|
if previous_row.nil? || (previous_row && columns_changed?(previous_row, row, change_columns))
|
22
25
|
output_csv.close if output_csv
|
23
26
|
output_file_name = file_name_from_changed_columns(row, change_columns)
|
24
|
-
|
27
|
+
path = file_path_generator.path_for_new_file(output_file_name)
|
28
|
+
output_csv = CSV.open(path, "w")
|
25
29
|
end
|
26
30
|
output_csv << row
|
27
31
|
previous_row = row
|
data/lib/advance/version.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
class FilePathGenerator
|
2
|
+
def initialize(max_entries_per_dir = 10_000)
|
3
|
+
@max_entries_per_dir = max_entries_per_dir
|
4
|
+
@entry_counts = [0]
|
5
|
+
@dir_mask = "%0#{max_entries_per_dir.to_s.length}d"
|
6
|
+
end
|
7
|
+
|
8
|
+
def path_for_new_file(file_name)
|
9
|
+
increment_dir_counter
|
10
|
+
return file_name if @entry_counts.size == 1
|
11
|
+
|
12
|
+
dir_paths = @entry_counts[1..-1].reverse.map{|n| @dir_mask % [n - 1] }
|
13
|
+
dir_path = File.join(".", *dir_paths)
|
14
|
+
FileUtils.mkdir_p(dir_path)
|
15
|
+
File.join(dir_path, file_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def increment_dir_counter(dir_depth = 0)
|
19
|
+
if dir_depth > (@entry_counts.size - 1)
|
20
|
+
@entry_counts << 2
|
21
|
+
indent_dirs
|
22
|
+
return
|
23
|
+
end
|
24
|
+
|
25
|
+
@entry_counts[dir_depth] += 1
|
26
|
+
|
27
|
+
if @entry_counts[dir_depth] > @max_entries_per_dir
|
28
|
+
@entry_counts[dir_depth] = 1
|
29
|
+
increment_dir_counter(dir_depth + 1)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def indent_dirs
|
35
|
+
tmp_dir_name = "tmp_#{@entry_counts.size}"
|
36
|
+
FileUtils.mkdir tmp_dir_name
|
37
|
+
Dir.entries(".").each do |existing_dir|
|
38
|
+
next if existing_dir =~ %r(\.\.?)
|
39
|
+
next if existing_dir == tmp_dir_name
|
40
|
+
FileUtils.mv existing_dir, tmp_dir_name
|
41
|
+
end
|
42
|
+
new_dir_name = @dir_mask % [0]
|
43
|
+
FileUtils.mv tmp_dir_name, new_dir_name
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
"[ #{@entry_counts.join(',')} ]"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: advance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- janemacfarlane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: team_effort
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- bin/split_csv.rb
|
105
105
|
- lib/advance.rb
|
106
106
|
- lib/advance/version.rb
|
107
|
+
- lib/path_for_new_file.rb
|
107
108
|
homepage: https://github.com/doctorjane/advance
|
108
109
|
licenses:
|
109
110
|
- MIT
|