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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7c3671bced3ec1f9c2dad3c41542e37fa78378235e0a0e5edc452e7f82449da9
4
- data.tar.gz: 710b910a669260612d682d4af97422e19b5a5543cc0ced7b332fde72588afdb7
3
+ metadata.gz: 839910177cc707b33079ae83c711f08a78ade9fa682573744d96979e734cf37e
4
+ data.tar.gz: a1eb783db9364cf5f2a0ad66254b0a7e65dd2f6fe4fbcc2f5dacdb2a01250506
5
5
  SHA512:
6
- metadata.gz: 563afcf91b96c60d415699e3848a85a8354594258ea3e841f48093c66978be235be8bae77fe780a9a82e87c6335b2487a2740bbb4ac0e916abf4bd347f4c2aa6
7
- data.tar.gz: 00bd75cf2688dfe664aff807502067f79b64c6ee217c462f63113e043196c4378d325d77b244ce235451c6ad0ddcf38bf602b92cc629d174f494dad9807ef1b7
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 { |clique| puts clique.join(' ') }
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
- @developers.each do |developer|
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
- #Bidireccional relationship. It excludes iterated developers and itself. We look in one way only
51
- (@developers-excluded).each do |developer2|
52
- # Intersection between organizations if there are some organization in common goes in
53
- unless (organizations(developer) & organizations(developer2)).empty?
54
- #It creates relationship in one direction
55
- developers_graph[developer] << developer2
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
- #Intersection between friends, followers and current relationships by organizations in common
63
- developers_graph[developer] &= friends(developer) & followers(developer) unless developers_graph[developer].empty?
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
- developers_graph
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.5.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: