|
4 | 4 | require 'pry' |
5 | 5 | require 'date' |
6 | 6 | require 'minitest/autorun' |
| 7 | +require 'ruby-progressbar' |
7 | 8 |
|
8 | 9 | class User |
9 | 10 | attr_reader :attributes, :sessions |
@@ -43,20 +44,23 @@ def collect_stats_from_users(report, users_objects, &block) |
43 | 44 | end |
44 | 45 | end |
45 | 46 |
|
46 | | -def work(file_name: "data.txt", disable_gc: false) |
| 47 | +def work(file_name: "data.txt", disable_gc: false, progress_bar: true) |
47 | 48 | GC.disable if disable_gc |
48 | 49 | file_lines = File.read(file_name).split("\n") |
49 | 50 |
|
50 | 51 | users = [] |
51 | 52 | sessions = [] |
52 | 53 |
|
| 54 | + file_progressbar = progress_bar ? ProgressBar.create(title: "Reading File", total: file_lines.count, format: '%t: |%B| %p%% %e') : nil |
| 55 | + |
53 | 56 | file_lines.each do |line| |
54 | 57 | case |
55 | 58 | when line.start_with?('user,') |
56 | 59 | users << parse_user(line) |
57 | 60 | when line.start_with?('session,') |
58 | 61 | sessions << parse_session(line) |
59 | 62 | end |
| 63 | + increment_progressbar(file_progressbar) |
60 | 64 | end |
61 | 65 |
|
62 | 66 | # Отчёт в json |
@@ -101,10 +105,13 @@ def work(file_name: "data.txt", disable_gc: false) |
101 | 105 | sessions_by_user[user_id] << session |
102 | 106 | end |
103 | 107 |
|
| 108 | + user_progressbar = progress_bar ? ProgressBar.create(title: "Processing Users", total: users.count, format: '%t: |%B| %p%% %e') : nil |
| 109 | + |
104 | 110 | users_objects = users.map do |user| |
105 | 111 | user_id = user['id'] |
106 | 112 | user_sessions = sessions_by_user[user_id] || [] |
107 | 113 | user_object = User.new(attributes: user, sessions: user_sessions) |
| 114 | + increment_progressbar(user_progressbar) |
108 | 115 | user_object |
109 | 116 | end |
110 | 117 |
|
@@ -148,6 +155,10 @@ def work(file_name: "data.txt", disable_gc: false) |
148 | 155 | File.write('result.json', "#{report.to_json}\n") |
149 | 156 | end |
150 | 157 |
|
| 158 | +def increment_progressbar(progressbar) |
| 159 | + progressbar&.increment |
| 160 | +end |
| 161 | + |
151 | 162 | class TestMe < Minitest::Test |
152 | 163 | def setup |
153 | 164 | File.write('result.json', '') |
|
0 commit comments