Skip to content
This repository was archived by the owner on Sep 24, 2024. It is now read-only.

Commit 020c5e3

Browse files
author
Przemyslaw Mroczek
authored
Merge pull request #38 from Lackoftactics/revert-34-refactor-to-support-view-models
Temporary Revert "Refactor code to support ViewModels"
2 parents 6b98ceb + d8307f1 commit 020c5e3

20 files changed

+494
-772
lines changed

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
facebook_data_analyzer (0.1.1)
4+
facebook_data_analyzer (0.1.0)
55
axlsx (= 3.0.0.pre)
66
json
77
micro-optparse

lib/.DS_Store

6 KB
Binary file not shown.

lib/facebook_data_analyzer.rb

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,20 @@
22

33
# My script for 'I analyzed my facebook data and it's story of shyness,
44
# loneliness and change'
5-
require 'facebook_data_analyzer/view_model_generators/view_model_generator'
6-
require 'facebook_data_analyzer/view_model_generators/friends_view_model_generator'
7-
require 'facebook_data_analyzer/view_model_generators/contacts_view_model_generator'
8-
require 'facebook_data_analyzer/view_model_generators/messages_view_model_generator'
9-
require 'facebook_data_analyzer/mixins/excel_exporter_mixin'
10-
require 'facebook_data_analyzer/mixins/export_views_mixin'
11-
require 'facebook_data_analyzer/analyzeable'
12-
require 'facebook_data_analyzer/contacts'
13-
require 'facebook_data_analyzer/friends'
14-
require 'facebook_data_analyzer/messages'
15-
require 'facebook_data_analyzer/models/contact'
16-
require 'facebook_data_analyzer/models/friend'
17-
require 'facebook_data_analyzer/models/message'
18-
require 'facebook_data_analyzer/models/table'
19-
205
require 'axlsx'
216
require 'parallel'
227
require 'json'
238
require 'workbook'
249
require 'set'
2510

11+
require 'facebook_data_analyzer/analyzeables/analyzeable'
12+
require 'facebook_data_analyzer/analyzeables/contacts'
13+
require 'facebook_data_analyzer/analyzeables/friends'
14+
require 'facebook_data_analyzer/analyzeables/messages'
15+
require 'facebook_data_analyzer/contact'
16+
require 'facebook_data_analyzer/friend'
17+
require 'facebook_data_analyzer/message'
18+
2619
module FacebookDataAnalyzer
2720
def self.run(options = {})
2821
file_output = 'facebook_data_analyzer'

lib/facebook_data_analyzer/analyzeable.rb renamed to lib/facebook_data_analyzer/analyzeables/analyzeable.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ def self.parse
1010

1111
GROUP_BY = [].freeze
1212
COUNT_BY = [].freeze
13-
EXPORTS = [].freeze
1413

1514
def initialize(threads_supported: nil, processes_supported: nil, parallel: false)
1615
# Grouped by is weird and needs a hash for each GROUP_BY, hash for each unique group, and hash for attributes

lib/facebook_data_analyzer/contacts.rb renamed to lib/facebook_data_analyzer/analyzeables/contacts.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
module FacebookDataAnalyzer
44
class Contacts < Analyzeable
5-
include FacebookDataAnalyzer::ExportViewsMixin
65
attr_reader :contacts
7-
8-
EXPORTS = [:contact_list].freeze
9-
106
def initialize(catalog:)
117
@catalog = catalog
128
@directory = "#{catalog}/html/"
@@ -36,5 +32,22 @@ def analyze
3632
end
3733
end
3834
end
35+
36+
def export(package:)
37+
contact_list_sheet(package: package)
38+
end
39+
40+
private
41+
42+
def contact_list_sheet(package:)
43+
package.workbook.add_worksheet(name: 'Contact list') do |sheet|
44+
sheet.add_row ['Contact list']
45+
sheet.add_row ["Facebook imported #{@contacts.length} of your contacts"]
46+
sheet.add_row ['Name', 'Email']
47+
@contacts.sort_by(&:name).each do |contact|
48+
sheet.add_row [contact.name, contact.details]
49+
end
50+
end
51+
end
3952
end
4053
end
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# frozen_string_literal: true
2+
3+
module FacebookDataAnalyzer
4+
class Friends < Analyzeable
5+
attr_reader :friends
6+
# year, day_of_week, day, month: {#unit: count ...}
7+
# weekend: {weekend: count,
8+
# weekday: count}
9+
# month_year: {#month - #year: count ...}
10+
# week_year: {#week - #year: count ...}
11+
COUNT_BY = %i[year day_of_week day month weekend month_year week_year].freeze
12+
13+
def initialize(catalog:)
14+
@catalog = catalog
15+
@directory = "#{catalog}/html/"
16+
@file_pattern = 'friends.htm'
17+
@friends = []
18+
19+
super()
20+
end
21+
22+
def analyze
23+
Dir.chdir(@directory) do
24+
content = File.open(@file_pattern).read
25+
doc = Nokogiri::HTML(content)
26+
friends_list = doc.css('div.contents > ul')[0].css('li')
27+
28+
friends_list.each do |friend_element|
29+
friend = Friend.parse(friend_element: friend_element)
30+
31+
@friends << friend
32+
count(analyzeable: friend)
33+
end
34+
end
35+
end
36+
37+
def export(package:)
38+
making_friends_sheet(package: package)
39+
end
40+
41+
private
42+
43+
def making_friends_sheet(package:)
44+
package.workbook.add_worksheet(name: 'Making friends') do |sheet|
45+
sheet.add_row ['Making friends']
46+
sheet.add_row ['']
47+
48+
sheet.add_row ['Making friends by year']
49+
sheet.add_row ['Year', 'Number of friends added']
50+
@counted_by[:year].sort_by { |year, _count| year }.each do |year, count|
51+
sheet.add_row [year, count]
52+
end
53+
54+
sheet.add_row ['Making friends by week day']
55+
sheet.add_row ['Day of week', 'Number of friends added']
56+
@counted_by[:day_of_week].sort_by { |_day, count| count }.reverse.each do |day, count|
57+
sheet.add_row [day, count]
58+
end
59+
60+
sheet.add_row ['Making friends by month']
61+
sheet.add_row ['Month', 'Number of friends added']
62+
@counted_by[:month].sort_by { |_month, count| count }.reverse.each do |month, count|
63+
sheet.add_row [month, count]
64+
end
65+
66+
sheet.add_row ['Making friends on weekend vs. working days']
67+
sheet.add_row ['Working day or weekend', 'Number of friends added']
68+
@counted_by[:weekend].each do |type_of_day, count|
69+
sheet.add_row [type_of_day.to_s, count]
70+
end
71+
72+
sheet.add_row ['Most busy weeks for making friends (week number and year)']
73+
sheet.add_row ['Week and year', 'Number of friends added']
74+
@counted_by[:week_year].sort_by { |_week_year, count| count }.reverse.each do |week_year, count|
75+
sheet.add_row [week_year, count]
76+
end
77+
78+
sheet.add_row ['Most busy month-year by friends added']
79+
sheet.add_row ['Month year', 'Number of friends added']
80+
@counted_by[:month_year].sort_by { |_month_year, count| count }.reverse.each do |month_year, count|
81+
sheet.add_row [month_year, count]
82+
end
83+
84+
sheet.add_row ['Most busy making friends days']
85+
sheet.add_row ['Day', 'Number of friends added']
86+
@counted_by[:day].sort_by { |_day, count| count }.reverse.each do |day, count|
87+
sheet.add_row [day, count]
88+
end
89+
end
90+
end
91+
end
92+
end

0 commit comments

Comments
 (0)