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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 582ef1d9786e2aef4fcd5fc7fbabb925772fe2c774d7daf3f7290f36b3ec10bb
4
- data.tar.gz: b575f4c854d4118520aa50328ef8c328f45827ba07d581d98de114735015bce3
3
+ metadata.gz: d598fdb8c38b12f9946058d06f4904f8c4e279c5973d7173061869ebeb8e4db8
4
+ data.tar.gz: b37c176948435b13ee2a494e5e0973fd14d5660e3bbe1da3c419b5a7328286b5
5
5
  SHA512:
6
- metadata.gz: 1492a2d26dc7d1764f6a138e4d53a7d83c3626e70f4dea030d889a412fb074de8713559e20c9d35dfeeeb1a952ecb62968a2f4349fc095916a42bb50557a2d05
7
- data.tar.gz: 188de35c95e64ed1c340f4c5e463a4a50d07c7c6f95ac0dc8dbae2f100e9e9c9f1975c580bd3f02a330001f27f9c5b0b758bededb1e47b5550dbf89c73946da0
6
+ metadata.gz: 991cbfc6556e45618971ab059c8bb8a23a106abf73d86f3f1409d47ce03920b7b5ab67287bbb43a920f6443bafe0e18e71c3890b381e89e8da9c2bd828f0cbb0
7
+ data.tar.gz: 3054fb61cf64fe18e12e203fd97ebc49cc54d846e2ad28a46269128041c9e4e4785cac92d5560acdc102a0450460df8dd2b5b944b3756a7ab3b0fc315371a758
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- advance (0.3.2)
4
+ advance (0.3.3)
5
5
  team_effort
6
6
 
7
7
  GEM
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- require 'csv'
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
- output_csv = CSV.open(output_file_name, "w")
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
@@ -1,3 +1,3 @@
1
1
  module Advance
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
@@ -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.2
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-02-27 00:00:00.000000000 Z
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