developer_cliques 0.5.0 → 1.0.0
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/bin/devcliques +2 -1
- data/lib/developer_cliques/connected_developers.rb +38 -18
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 839910177cc707b33079ae83c711f08a78ade9fa682573744d96979e734cf37e
|
4
|
+
data.tar.gz: a1eb783db9364cf5f2a0ad66254b0a7e65dd2f6fe4fbcc2f5dacdb2a01250506
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1eeda407b660235afda0c709415148ba6d0f9d4a80be558d32db7e8459b9fd304e5263cf512a295f13218000ae93edcafee2ed234a9e60419038e8532e986b2f
|
7
|
+
data.tar.gz: 6f0f6925e2c1a128740265686e6dd5c0d0a26a1a89f6090c37feb176d36482d3ddbbb5fa73b8324d4c9535b548744e40e5015c041fd8f873f4f5b4ebb7b22411
|
data/bin/devcliques
CHANGED
@@ -11,7 +11,7 @@ begin
|
|
11
11
|
opts.banner = "Usage: developer_cliques.rb [options]"
|
12
12
|
|
13
13
|
opts.on("-f", "--file USERNAMES", "Calculates maximal cliques") do |file|
|
14
|
-
DeveloperCliques.new(file: file).max_cliques.each
|
14
|
+
DeveloperCliques.new(file: file).max_cliques.each{ |clique| puts clique.join(' ') }
|
15
15
|
end
|
16
16
|
|
17
17
|
opts.on_tail("-e", "--env ENVIRONMENT_VARS", "Calculates maximal cliques") do |env|
|
@@ -30,3 +30,4 @@ rescue OptionParser::MissingArgument => error
|
|
30
30
|
puts error
|
31
31
|
puts opt_parser
|
32
32
|
end
|
33
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'twitter'
|
3
3
|
require 'octokit'
|
4
|
+
require 'concurrent'
|
4
5
|
require_relative '../../config/app_logger'
|
5
6
|
|
6
7
|
class ConnectedDevelopers
|
@@ -40,31 +41,50 @@ class ConnectedDevelopers
|
|
40
41
|
developers_graph = {}
|
41
42
|
excluded = []
|
42
43
|
|
43
|
-
|
44
|
-
AppLogger.debug "GITHUB USER: #{developer}"
|
45
|
-
AppLogger.debug "ORGANIZATIONS: #{organizations(developer)}"
|
46
|
-
|
44
|
+
promises = developers.map do |developer|
|
47
45
|
excluded << developer
|
48
46
|
developers_graph[developer] ||= []
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# And reverse direction
|
57
|
-
developers_graph[developer2] ||= []
|
58
|
-
developers_graph[developer2] << developer
|
59
|
-
end
|
60
|
-
end
|
48
|
+
graph_by_developer developers_graph: developers_graph, developer: developer, excluded: excluded.clone
|
49
|
+
end
|
50
|
+
|
51
|
+
Concurrent::Promise.all?(*promises).execute.wait!
|
52
|
+
developers_graph
|
53
|
+
end
|
61
54
|
|
62
|
-
|
63
|
-
|
55
|
+
def graph_by_developer developers_graph:, developer:, excluded:
|
56
|
+
AppLogger.debug "GITHUB USER: #{developer}"
|
57
|
+
AppLogger.debug "ORGANIZATIONS: #{organizations(developer)}"
|
58
|
+
|
59
|
+
Concurrent::Promise.new {
|
60
|
+
graph_by_organization developers_graph: developers_graph,
|
61
|
+
remaining_devs: developers-excluded,
|
62
|
+
current_developer: developer
|
63
|
+
}.then{ |relationships|
|
64
|
+
developers_graph[developer] = twitter_friendships developer: developer, relationships: relationships
|
65
|
+
}
|
66
|
+
end
|
64
67
|
|
68
|
+
def graph_by_organization developers_graph:, remaining_devs:, current_developer:
|
69
|
+
#Bidireccional relationship. It excludes iterated developers and itself. We look only in one way
|
70
|
+
AppLogger.debug "REMAINING DEVS: #{remaining_devs}"
|
71
|
+
remaining_devs.each do |related_developer|
|
72
|
+
# Intersection between organizations if there are some organization in common goes in
|
73
|
+
unless (organizations(current_developer) & organizations(related_developer)).empty?
|
74
|
+
#It creates relationship in one direction
|
75
|
+
developers_graph[current_developer] << related_developer
|
76
|
+
# And reverse direction
|
77
|
+
developers_graph[related_developer] ||= []
|
78
|
+
developers_graph[related_developer] << current_developer
|
79
|
+
end
|
65
80
|
end
|
81
|
+
developers_graph[current_developer]
|
82
|
+
end
|
66
83
|
|
67
|
-
|
84
|
+
def twitter_friendships developer:, relationships:
|
85
|
+
#Intersection between friends, followers and current relationships by organizations in common
|
86
|
+
relationships &= friends(developer) & followers(developer) unless relationships.empty?
|
87
|
+
relationships
|
68
88
|
end
|
69
89
|
|
70
90
|
def twitter_retry &block
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: developer_cliques
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrián Cepillo
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-10-04 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: octokit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: twitter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '6.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dotenv
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
13
55
|
description: Calculates maximal cliques from developers social connections
|
14
56
|
email: adrian.cepillo@gmail.com
|
15
57
|
executables:
|