forked from maxdemarzi/hive_plot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhive_plot.rb
More file actions
50 lines (42 loc) · 1.49 KB
/
hive_plot.rb
File metadata and controls
50 lines (42 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
require 'rubygems'
require 'neography'
require 'sinatra'
require 'uri'
require 'json'
def wroterepos(language)
neo = Neography::Rest.new
neo.execute_script("m = [:]
g.V.filter{it.type == 'language' && it.name == '#{language}'}.in.transform{m[it.name] = it.in('wrote').gather{it.name}.next()}.iterate()
m")
end
def forkedrepos(language)
neo = Neography::Rest.new
neo.execute_script("m = [:]
g.V.filter{it.type == 'language' && it.name == '#{language}'}.in.transform{m[it.name] = it.in('forked').gather{it.name}.next()}.iterate()
m")
end
get '/hive/:name' do
repos = []
writers = []
forkers = []
temp_forkers = []
temp_writers = []
wroterepos(params[:name]).each_pair do |key, value|
repos << {"name" => key, "imports" => value, "node_type" => "repo"}
temp_writers << { "name" => value[0] }
end
i = 0
forkedrepos(params[:name]).each_pair do |key, value|
repos[i]["imports"] = repos[i]["imports"] + value
temp_writers[i]["imports"] = value
temp_forkers << value
i += 1
end
temp_writers.group_by {|i| i["name"]}.each do |w, f|
writers << {"name" => w, "imports" => f.collect{|y| y["imports"]}.flatten.uniq, "node_type" => "worker"}
end
temp_forkers.flatten.uniq.delete_if{|x| writers.collect{|y| y["name"]}.include?(x)}.each do |f|
forkers << {"name" => f, "imports" => [], "node_type" => "forker"}
end
(repos + writers + forkers).to_json
end