@@ -101,39 +101,31 @@ def work(file_path, result_path = 'spec/fixtures/files/result.json')
101101
102102 report [ 'usersStats' ] = { }
103103
104- # Собираем количество сессий по пользователям
105- collect_stats_from_users ( report , users_objects ) do |user |
106- { 'sessionsCount' => user . sessions . count }
107- end
108-
109- # Собираем количество времени по пользователям
110- collect_stats_from_users ( report , users_objects ) do |user |
111- { 'totalTime' => user . sessions . map { |s | s [ 'time' ] } . map { |t | t . to_i } . sum . to_s + ' min.' }
112- end
113-
114- # Выбираем самую длинную сессию пользователя
115- collect_stats_from_users ( report , users_objects ) do |user |
116- { 'longestSession' => user . sessions . map { |s | s [ 'time' ] } . map { |t | t . to_i } . max . to_s + ' min.' }
117- end
118-
119- # Браузеры пользователя через запятую
120- collect_stats_from_users ( report , users_objects ) do |user |
121- { 'browsers' => user . sessions . map { |s | s [ 'browser' ] } . map { |b | b . upcase } . sort . join ( ', ' ) }
122- end
123-
124- # Хоть раз использовал IE?
125- collect_stats_from_users ( report , users_objects ) do |user |
126- { 'usedIE' => user . sessions . map { |s | s [ 'browser' ] } . any? { |b | b . upcase =~ /INTERNET EXPLORER/ } }
127- end
128-
129- # Всегда использовал только Chrome?
130- collect_stats_from_users ( report , users_objects ) do |user |
131- { 'alwaysUsedChrome' => user . sessions . map { |s | s [ 'browser' ] } . all? { |b | b . upcase =~ /CHROME/ } }
132- end
133-
134- # Даты сессий через запятую в обратном порядке в формате iso8601
135- collect_stats_from_users ( report , users_objects ) do |user |
136- { 'dates' => user . sessions . map { |s | s [ 'date' ] } . map { |d | Date . parse ( d ) } . sort . reverse . map { |d | d . iso8601 } }
104+ users_objects . each do |user |
105+ user_key = "#{ user . attributes [ 'first_name' ] } #{ user . attributes [ 'last_name' ] } "
106+
107+ # Подготовим данные для сессий
108+ sessions = user . sessions
109+ times = sessions . map { |s | s [ 'time' ] . to_i }
110+ browsers = sessions . map { |s | s [ 'browser' ] . upcase }
111+ dates = sessions . map { |s | Date . parse ( s [ 'date' ] ) }
112+
113+ report [ 'usersStats' ] [ user_key ] = {
114+ # Количество сессий
115+ 'sessionsCount' => sessions . count ,
116+ # Общее время
117+ 'totalTime' => "#{ times . sum } min." ,
118+ # Самая длинная сессия
119+ 'longestSession' => "#{ times . max } min." ,
120+ # Браузеры через запятую
121+ 'browsers' => browsers . sort . join ( ', ' ) ,
122+ # Хоть раз использовал IE?
123+ 'usedIE' => browsers . any? { |b | b . include? ( 'INTERNET EXPLORER' ) } ,
124+ # Всегда использовал только Chrome?
125+ 'alwaysUsedChrome' => browsers . all? { |b | b . include? ( 'CHROME' ) } ,
126+ # Даты сессий через запятую в обратном порядке в формате iso8601
127+ 'dates' => dates . sort . reverse . map ( &:iso8601 )
128+ }
137129 end
138130
139131 File . write ( result_path , "#{ report . to_json } \n " )
0 commit comments