society 1.0.0 → 1.1.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/COPYING.txt +674 -0
- data/LICENSE.txt +13 -20
- data/README.md +8 -0
- data/bower.json +1 -1
- data/lib/society.rb +3 -2
- data/lib/society/clusterer.rb +188 -0
- data/lib/society/formatter/graph/json.rb +16 -6
- data/lib/society/formatter/report/json.rb +8 -7
- data/lib/society/formatter/report/templates/components/society-assets/society.css +4 -0
- data/lib/society/formatter/report/templates/components/society-assets/society.js +21 -7
- data/lib/society/object_graph.rb +1 -1
- data/lib/society/parser.rb +2 -2
- data/lib/society/version.rb +1 -1
- data/spec/clusterer_spec.rb +37 -0
- data/spec/fixtures/clustering/clusterer_fixtures.rb +144 -0
- data/spec/fixtures/clustering/edges_1.txt +322 -0
- data/spec/fixtures/{foo.rb → for_parser_spec/whaler.rb} +0 -0
- data/spec/formatter/report/json_spec.rb +29 -20
- data/spec/parser_spec.rb +2 -2
- metadata +12 -4
data/lib/society/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative 'fixtures/clustering/clusterer_fixtures.rb'
|
3
|
+
|
4
|
+
describe Society::Clusterer do
|
5
|
+
|
6
|
+
describe "#cluster" do
|
7
|
+
let(:clusterer) { Society::Clusterer.new }
|
8
|
+
|
9
|
+
it "detects clusters" do
|
10
|
+
clusters = clusterer.cluster(MCL::GRAPH_1).map(&:sort)
|
11
|
+
expected = MCL::CLUSTERS_1.map(&:sort)
|
12
|
+
expect(clusters).to match_array(expected)
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with inflation parameter set to 1.7" do
|
16
|
+
let(:clusterer) { Society::Clusterer.new(inflation: 1.7) }
|
17
|
+
|
18
|
+
it "detects clusters at coarser granularity" do
|
19
|
+
clusters = clusterer.cluster(MCL::GRAPH_1).map(&:sort)
|
20
|
+
expected = MCL::CLUSTERS_1_I17.map(&:sort)
|
21
|
+
expect(clusters).to match_array(expected)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with inflation parameter set to 4.0" do
|
26
|
+
let(:clusterer) { Society::Clusterer.new(inflation: 4.0) }
|
27
|
+
|
28
|
+
it "detects clusters at finer granularity" do
|
29
|
+
clusters = clusterer.cluster(MCL::GRAPH_1).map(&:sort)
|
30
|
+
expected = MCL::CLUSTERS_1_I40.map(&:sort)
|
31
|
+
expect(clusters).to match_array(expected)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# Reference results were calculated using the `minimcl` perl script from
|
2
|
+
# release 14-137 of the MCL-edge library. http://micans.org/mcl
|
3
|
+
|
4
|
+
require 'set'
|
5
|
+
|
6
|
+
module MCL
|
7
|
+
|
8
|
+
def self.graph_from_edges(path)
|
9
|
+
full_path = File.join(File.dirname(__FILE__), path)
|
10
|
+
nodes = Set.new
|
11
|
+
edges = []
|
12
|
+
edges_with_weights = /(\S+)\s+(\S+)\s+(\S+)/
|
13
|
+
edges_only = /(\S+)\s+(\S+)/
|
14
|
+
File.readlines(full_path).each do |line|
|
15
|
+
if data = line.match(edges_with_weights)
|
16
|
+
a,b,weight = data[1..-1]
|
17
|
+
# FIXME: disregarding weight for now -- include it once we have
|
18
|
+
# weights in Edges
|
19
|
+
edges << Society::Edge.new(from: a.to_i, to: b.to_i)
|
20
|
+
nodes << a << b
|
21
|
+
elsif data = line.match(edges_only)
|
22
|
+
a,b = data[1..-1]
|
23
|
+
edges << Society::Edge.new(from: a.to_i, to: b.to_i)
|
24
|
+
nodes << a << b
|
25
|
+
end
|
26
|
+
end
|
27
|
+
Society::ObjectGraph.new(nodes: nodes.to_a, edges: edges)
|
28
|
+
end
|
29
|
+
|
30
|
+
GRAPH_1 = graph_from_edges('edges_1.txt')
|
31
|
+
|
32
|
+
CLUSTERS_1 = [
|
33
|
+
[9, 10, 19, 24, 25, 26, 28, 29, 30, 39, 58, 68, 102, 189, 198, 200],
|
34
|
+
[46, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139],
|
35
|
+
[0, 1, 4, 11, 38, 49, 52, 59, 60, 61, 71, 125],
|
36
|
+
[109, 110, 144, 145, 146, 147, 148, 149],
|
37
|
+
[81, 121, 122, 184, 185, 188],
|
38
|
+
[12, 31, 32, 79, 91, 124],
|
39
|
+
[7, 47, 53, 54, 78, 82],
|
40
|
+
[33, 83, 96, 113, 119],
|
41
|
+
[17, 55, 56, 57, 65],
|
42
|
+
[13, 42, 115, 120],
|
43
|
+
[14, 15, 27, 190],
|
44
|
+
[43, 90, 99, 118],
|
45
|
+
[173, 175, 193],
|
46
|
+
[88, 116, 117],
|
47
|
+
[73, 143, 176],
|
48
|
+
[77, 114, 116],
|
49
|
+
[20, 69, 103],
|
50
|
+
[41, 44, 112],
|
51
|
+
[16, 97, 98],
|
52
|
+
[3, 23, 126],
|
53
|
+
[183, 186],
|
54
|
+
[100, 101],
|
55
|
+
[107, 108],
|
56
|
+
[70, 104],
|
57
|
+
[87, 106],
|
58
|
+
[86, 105],
|
59
|
+
[50, 140],
|
60
|
+
[67, 95],
|
61
|
+
[85, 94],
|
62
|
+
[8, 111],
|
63
|
+
[66, 92],
|
64
|
+
[2, 84],
|
65
|
+
[182],
|
66
|
+
[93]]
|
67
|
+
|
68
|
+
CLUSTERS_1_I17 = [
|
69
|
+
[8, 9, 10, 13, 14, 15, 17, 19, 20, 24, 25, 26, 27, 28, 29, 30, 39, 41, 42, 43, 44, 55, 56, 57, 58, 65, 68, 69, 93, 102, 103, 111, 112, 115, 120, 189, 190, 198, 200],
|
70
|
+
[46, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139],
|
71
|
+
[0, 1, 4, 11, 38, 49, 52, 59, 60, 61, 71, 125],
|
72
|
+
[33, 83, 90, 96, 99, 113, 118, 119],
|
73
|
+
[109, 110, 144, 145, 146, 147, 148, 149],
|
74
|
+
[2, 7, 47, 53, 54, 78, 82, 84],
|
75
|
+
[70, 86, 87, 104, 105, 106],
|
76
|
+
[81, 121, 122, 184, 185, 188],
|
77
|
+
[12, 31, 32, 79, 91, 124],
|
78
|
+
[73, 143, 173, 176],
|
79
|
+
[88, 116, 117],
|
80
|
+
[77, 114, 116],
|
81
|
+
[16, 97, 98],
|
82
|
+
[3, 23, 126],
|
83
|
+
[183, 186],
|
84
|
+
[100, 101],
|
85
|
+
[50, 140],
|
86
|
+
[175, 193],
|
87
|
+
[107, 108],
|
88
|
+
[66, 92],
|
89
|
+
[67, 95],
|
90
|
+
[85, 94],
|
91
|
+
[182]]
|
92
|
+
|
93
|
+
CLUSTERS_1_I40 = [
|
94
|
+
[46, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139],
|
95
|
+
[10, 28, 29, 30, 39, 58, 146, 198, 200],
|
96
|
+
[109, 110, 144, 145, 147, 148, 149],
|
97
|
+
[81, 121, 122, 184, 185, 188],
|
98
|
+
[7, 47, 53, 54, 78, 82],
|
99
|
+
[14, 15, 24, 27, 190],
|
100
|
+
[0, 4, 38, 60, 125],
|
101
|
+
[13, 42, 115, 120],
|
102
|
+
[31, 32, 91, 124],
|
103
|
+
[17, 55, 56, 65],
|
104
|
+
[73, 143, 176],
|
105
|
+
[20, 69, 103],
|
106
|
+
[41, 44, 112],
|
107
|
+
[33, 83, 113],
|
108
|
+
[3, 23, 126],
|
109
|
+
[16, 97, 98],
|
110
|
+
[175, 193],
|
111
|
+
[107, 108],
|
112
|
+
[183, 186],
|
113
|
+
[100, 101],
|
114
|
+
[70, 104],
|
115
|
+
[43, 118],
|
116
|
+
[68, 102],
|
117
|
+
[88, 117],
|
118
|
+
[19, 189],
|
119
|
+
[50, 140],
|
120
|
+
[86, 105],
|
121
|
+
[77, 114],
|
122
|
+
[87, 106],
|
123
|
+
[8, 111],
|
124
|
+
[67, 95],
|
125
|
+
[25, 26],
|
126
|
+
[85, 94],
|
127
|
+
[12, 79],
|
128
|
+
[11, 49],
|
129
|
+
[52, 71],
|
130
|
+
[66, 92],
|
131
|
+
[2, 84],
|
132
|
+
[1, 61],
|
133
|
+
[119],
|
134
|
+
[173],
|
135
|
+
[116],
|
136
|
+
[182],
|
137
|
+
[57],
|
138
|
+
[93],
|
139
|
+
[90],
|
140
|
+
[99],
|
141
|
+
[59],
|
142
|
+
[96],
|
143
|
+
[9]]
|
144
|
+
end
|
@@ -0,0 +1,322 @@
|
|
1
|
+
0 38 1
|
2
|
+
2 53 1
|
3
|
+
3 53 1
|
4
|
+
3 53 1
|
5
|
+
3 13 1
|
6
|
+
3 47 1
|
7
|
+
7 53 1
|
8
|
+
8 58 1
|
9
|
+
8 44 1
|
10
|
+
8 16 1
|
11
|
+
8 53 1
|
12
|
+
9 19 1
|
13
|
+
9 50 1
|
14
|
+
10 58 1
|
15
|
+
13 8 1
|
16
|
+
13 58 1
|
17
|
+
13 3 1
|
18
|
+
13 3 1
|
19
|
+
13 14 1
|
20
|
+
14 13 1
|
21
|
+
15 31 1
|
22
|
+
15 16 1
|
23
|
+
15 27 1
|
24
|
+
15 14 1
|
25
|
+
15 50 1
|
26
|
+
15 43 1
|
27
|
+
16 15 1
|
28
|
+
16 8 1
|
29
|
+
17 58 1
|
30
|
+
17 57 1
|
31
|
+
17 55 1
|
32
|
+
17 56 1
|
33
|
+
19 58 1
|
34
|
+
19 9 1
|
35
|
+
24 58 1
|
36
|
+
24 25 1
|
37
|
+
24 28 1
|
38
|
+
24 27 1
|
39
|
+
25 58 1
|
40
|
+
25 24 1
|
41
|
+
25 26 1
|
42
|
+
25 29 1
|
43
|
+
26 25 1
|
44
|
+
27 24 1
|
45
|
+
27 15 1
|
46
|
+
28 24 1
|
47
|
+
28 29 1
|
48
|
+
29 58 1
|
49
|
+
29 28 1
|
50
|
+
29 25 1
|
51
|
+
30 58 1
|
52
|
+
30 58 1
|
53
|
+
31 15 1
|
54
|
+
31 58 1
|
55
|
+
38 0 1
|
56
|
+
41 44 1
|
57
|
+
41 42 1
|
58
|
+
41 43 1
|
59
|
+
41 14 1
|
60
|
+
42 41 1
|
61
|
+
42 58 1
|
62
|
+
43 41 1
|
63
|
+
43 15 1
|
64
|
+
44 41 1
|
65
|
+
44 8 1
|
66
|
+
47 3 1
|
67
|
+
47 53 1
|
68
|
+
49 58 1
|
69
|
+
49 11 1
|
70
|
+
50 15 1
|
71
|
+
50 9 1
|
72
|
+
52 58 1
|
73
|
+
53 8 1
|
74
|
+
53 47 1
|
75
|
+
53 2 1
|
76
|
+
53 7 1
|
77
|
+
55 56 1
|
78
|
+
55 17 1
|
79
|
+
55 9 1
|
80
|
+
56 57 1
|
81
|
+
56 55 1
|
82
|
+
56 17 1
|
83
|
+
57 56 1
|
84
|
+
57 17 1
|
85
|
+
57 58 1
|
86
|
+
58 13 1
|
87
|
+
58 8 1
|
88
|
+
58 42 1
|
89
|
+
58 25 1
|
90
|
+
58 29 1
|
91
|
+
58 24 1
|
92
|
+
58 52 1
|
93
|
+
58 31 1
|
94
|
+
58 19 1
|
95
|
+
58 30 1
|
96
|
+
58 30 1
|
97
|
+
58 10 1
|
98
|
+
58 49 1
|
99
|
+
14 15 1
|
100
|
+
14 41 1
|
101
|
+
8 41 1
|
102
|
+
8 15 1
|
103
|
+
9 58 1
|
104
|
+
13 53 1
|
105
|
+
13 15 1
|
106
|
+
13 41 1
|
107
|
+
15 8 1
|
108
|
+
15 24 1
|
109
|
+
15 13 1
|
110
|
+
15 58 1
|
111
|
+
15 41 1
|
112
|
+
24 58 1
|
113
|
+
25 15 1
|
114
|
+
25 28 1
|
115
|
+
28 58 1
|
116
|
+
28 25 1
|
117
|
+
41 8 1
|
118
|
+
41 58 1
|
119
|
+
41 15 1
|
120
|
+
41 13 1
|
121
|
+
57 55 1
|
122
|
+
58 8 1
|
123
|
+
58 24 1
|
124
|
+
58 15 1
|
125
|
+
58 9 1
|
126
|
+
58 58 1
|
127
|
+
58 58 1
|
128
|
+
0 0 1
|
129
|
+
0 4 1
|
130
|
+
0 125 1
|
131
|
+
0 38 1
|
132
|
+
0 11 1
|
133
|
+
3 126 1
|
134
|
+
3 23 1
|
135
|
+
3 47 1
|
136
|
+
8 58 1
|
137
|
+
8 53 1
|
138
|
+
12 31 1
|
139
|
+
12 31 1
|
140
|
+
12 91 1
|
141
|
+
12 96 1
|
142
|
+
13 53 1
|
143
|
+
13 58 1
|
144
|
+
13 120 1
|
145
|
+
13 115 1
|
146
|
+
15 8 1
|
147
|
+
15 15 1
|
148
|
+
15 58 1
|
149
|
+
17 58 1
|
150
|
+
32 31 1
|
151
|
+
32 31 1
|
152
|
+
32 31 1
|
153
|
+
39 58 1
|
154
|
+
39 39 1
|
155
|
+
41 112 1
|
156
|
+
41 58 1
|
157
|
+
41 8 1
|
158
|
+
42 13 1
|
159
|
+
42 3 1
|
160
|
+
46 46 1
|
161
|
+
46 46 1
|
162
|
+
46 132 1
|
163
|
+
46 46 1
|
164
|
+
46 46 1
|
165
|
+
46 46 1
|
166
|
+
46 46 1
|
167
|
+
47 46 1
|
168
|
+
50 140 1
|
169
|
+
52 52 1
|
170
|
+
52 52 1
|
171
|
+
52 58 1
|
172
|
+
53 54 1
|
173
|
+
53 82 1
|
174
|
+
55 9 1
|
175
|
+
56 57 1
|
176
|
+
57 58 1
|
177
|
+
58 49 1
|
178
|
+
58 58 1
|
179
|
+
59 0 1
|
180
|
+
59 52 1
|
181
|
+
59 0 1
|
182
|
+
59 11 1
|
183
|
+
59 0 1
|
184
|
+
60 0 1
|
185
|
+
61 1 1
|
186
|
+
61 1 1
|
187
|
+
61 11 1
|
188
|
+
61 11 1
|
189
|
+
61 58 1
|
190
|
+
61 58 1
|
191
|
+
61 0 1
|
192
|
+
61 58 1
|
193
|
+
61 11 1
|
194
|
+
61 0 1
|
195
|
+
61 0 1
|
196
|
+
65 17 1
|
197
|
+
66 93 1
|
198
|
+
67 31 1
|
199
|
+
68 58 1
|
200
|
+
68 58 1
|
201
|
+
68 9 1
|
202
|
+
68 19 1
|
203
|
+
69 57 1
|
204
|
+
70 105 1
|
205
|
+
71 52 1
|
206
|
+
71 0 1
|
207
|
+
71 52 1
|
208
|
+
73 143 1
|
209
|
+
77 116 1
|
210
|
+
78 53 1
|
211
|
+
79 12 1
|
212
|
+
79 12 1
|
213
|
+
81 188 1
|
214
|
+
81 184 1
|
215
|
+
81 121 1
|
216
|
+
81 185 1
|
217
|
+
83 33 1
|
218
|
+
83 33 1
|
219
|
+
84 2 1
|
220
|
+
85 94 1
|
221
|
+
85 93 1
|
222
|
+
86 105 1
|
223
|
+
87 106 1
|
224
|
+
88 117 1
|
225
|
+
88 116 1
|
226
|
+
90 118 1
|
227
|
+
90 99 1
|
228
|
+
91 31 1
|
229
|
+
92 66 1
|
230
|
+
93 8 1
|
231
|
+
93 33 1
|
232
|
+
93 15 1
|
233
|
+
93 41 1
|
234
|
+
93 58 1
|
235
|
+
93 13 1
|
236
|
+
93 33 1
|
237
|
+
95 67 1
|
238
|
+
96 15 1
|
239
|
+
96 83 1
|
240
|
+
96 119 1
|
241
|
+
96 108 1
|
242
|
+
97 98 1
|
243
|
+
98 16 1
|
244
|
+
99 15 1
|
245
|
+
99 83 1
|
246
|
+
100 101 1
|
247
|
+
102 17 1
|
248
|
+
102 68 1
|
249
|
+
103 17 1
|
250
|
+
103 20 1
|
251
|
+
103 69 1
|
252
|
+
103 58 1
|
253
|
+
104 70 1
|
254
|
+
105 15 1
|
255
|
+
105 58 1
|
256
|
+
106 105 1
|
257
|
+
107 108 1
|
258
|
+
109 58 1
|
259
|
+
110 109 1
|
260
|
+
110 109 1
|
261
|
+
110 58 1
|
262
|
+
110 58 1
|
263
|
+
110 109 1
|
264
|
+
110 109 1
|
265
|
+
110 109 1
|
266
|
+
110 109 1
|
267
|
+
110 148 1
|
268
|
+
111 8 1
|
269
|
+
112 41 1
|
270
|
+
113 41 1
|
271
|
+
113 83 1
|
272
|
+
114 77 1
|
273
|
+
115 13 1
|
274
|
+
118 43 1
|
275
|
+
118 119 1
|
276
|
+
119 83 1
|
277
|
+
120 13 1
|
278
|
+
121 121 1
|
279
|
+
122 8 1
|
280
|
+
122 81 1
|
281
|
+
124 31 1
|
282
|
+
124 12 1
|
283
|
+
124 12 1
|
284
|
+
130 46 1
|
285
|
+
131 46 1
|
286
|
+
130 46 1
|
287
|
+
133 46 1
|
288
|
+
130 132 1
|
289
|
+
134 46 1
|
290
|
+
135 46 1
|
291
|
+
134 46 1
|
292
|
+
136 46 1
|
293
|
+
137 46 1
|
294
|
+
138 46 1
|
295
|
+
137 46 1
|
296
|
+
139 46 1
|
297
|
+
143 143 1
|
298
|
+
144 109 1
|
299
|
+
145 109 1
|
300
|
+
146 58 1
|
301
|
+
146 58 1
|
302
|
+
146 109 1
|
303
|
+
147 109 1
|
304
|
+
148 109 1
|
305
|
+
149 109 1
|
306
|
+
173 193 1
|
307
|
+
175 193 1
|
308
|
+
173 143 1
|
309
|
+
176 143 1
|
310
|
+
182 182 1
|
311
|
+
182 182 1
|
312
|
+
183 183 1
|
313
|
+
183 183 1
|
314
|
+
186 183 1
|
315
|
+
186 183 1
|
316
|
+
189 19 1
|
317
|
+
190 15 1
|
318
|
+
190 190 1
|
319
|
+
198 58 1
|
320
|
+
198 39 1
|
321
|
+
200 58 1
|
322
|
+
200 39 1
|