advance 0.3.2 → 0.3.3
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.
- 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
|