pairing_matrix 2.0 → 2.1
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/lib/pairing_matrix/commit_cache.rb +38 -0
- data/lib/pairing_matrix/github_commit_reader.rb +8 -1
- data/lib/pairing_matrix/server/public/index.html +29 -7
- data/lib/pairing_matrix/server/public/index.js +44 -10
- data/lib/pairing_matrix/server/public/matrix.js +1 -1
- data/lib/pairing_matrix/server/server.rb +3 -0
- data/lib/pairing_matrix/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbe4d5bda921f70c585704c0021380570c41393f
|
4
|
+
data.tar.gz: 8299d6cbc89154810b30388d8e6e424dfffa8c4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5062d6a462b5802c747dde64798d89773be670618372ec1a510ecd121a2898cc2f6ad5f445a3dc78aaef5c8c5359cb8c41c9c781c3c15eb5435945b3706b715f
|
7
|
+
data.tar.gz: 52363d79a8221d0df7c4405a8299c69274b8e97d53700709fec7e80b40bbd390335d591ad16ddad87e950061f835a4b078301673e4bf546ce726363d3702df65
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module PairingMatrix
|
4
|
+
def self.enable_caching=(enabled)
|
5
|
+
@cache_enabled = enabled
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.cache_enabled
|
9
|
+
@cache_enabled
|
10
|
+
end
|
11
|
+
|
12
|
+
class CommitCache
|
13
|
+
def initialize
|
14
|
+
@cache = {}
|
15
|
+
@timestamp = Date.today
|
16
|
+
end
|
17
|
+
|
18
|
+
def put(date, response)
|
19
|
+
@cache[date] = response
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(date)
|
23
|
+
return nil unless PairingMatrix.cache_enabled
|
24
|
+
|
25
|
+
if Date.today == @timestamp
|
26
|
+
@cache[date]
|
27
|
+
else
|
28
|
+
invalidate_cache
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def invalidate_cache
|
35
|
+
@cache = {}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'octokit'
|
2
2
|
require 'eldritch'
|
3
|
+
require_relative './commit_cache'
|
3
4
|
|
4
5
|
Octokit.auto_paginate = true
|
5
6
|
|
@@ -8,9 +9,13 @@ module PairingMatrix
|
|
8
9
|
def initialize(config)
|
9
10
|
super(config)
|
10
11
|
@github_client = github_client
|
12
|
+
@cache = CommitCache.new
|
11
13
|
end
|
12
14
|
|
13
15
|
def read(since)
|
16
|
+
cache = @cache.get(since)
|
17
|
+
return cache unless cache.nil?
|
18
|
+
|
14
19
|
commits = []
|
15
20
|
together do
|
16
21
|
@config.github_repos.map do |repo|
|
@@ -19,7 +24,9 @@ module PairingMatrix
|
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
22
|
-
commits.flatten
|
27
|
+
result = commits.flatten
|
28
|
+
@cache.put(since, result)
|
29
|
+
result
|
23
30
|
end
|
24
31
|
|
25
32
|
private
|
@@ -5,24 +5,46 @@
|
|
5
5
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
|
6
6
|
<link rel="stylesheet" href="style.css"/>
|
7
7
|
<link rel="stylesheet" href="loader.css"/>
|
8
|
+
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
8
9
|
|
9
10
|
<script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.js"></script>
|
10
11
|
<script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
11
12
|
<script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.7.3/d3.min.js"></script>
|
12
13
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
14
|
+
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
13
15
|
<script language="javascript" src="matrix.js"></script>
|
14
16
|
<script language="javascript" src="index.js"></script>
|
15
17
|
</head>
|
16
18
|
|
17
19
|
<body>
|
18
20
|
<div class="visualize_matrix_container form-group form-inline">
|
19
|
-
<
|
20
|
-
|
21
|
-
|
22
|
-
<div class="
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
<div class="row">
|
22
|
+
<div class="col-lg-offset-3 col-lg-6">
|
23
|
+
<div class="input-group">
|
24
|
+
<div class="input-group">
|
25
|
+
<span class="input-group-addon" id="basic-addon2">Days</span>
|
26
|
+
<input type="text" id="days" value="30" class="form-control" placeholder="Recipient's username" aria-describedby="basic-addon2">
|
27
|
+
</div>
|
28
|
+
<span class="input-group-btn">
|
29
|
+
<div class="btn-group">
|
30
|
+
<button id="visualize" type="button" class="btn btn-primary">Visualize</button>
|
31
|
+
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
32
|
+
<span class="caret"></span>
|
33
|
+
<span class="sr-only">Toggle Dropdown</span>
|
34
|
+
</button>
|
35
|
+
<ul class="dropdown-menu">
|
36
|
+
<li><a id="a_week" href="#">A Week</a></li>
|
37
|
+
<li><a id="two_weeks" href="#">Two Weeks</a></li>
|
38
|
+
<li><a id="a_month" href="#">A Month</a></li>
|
39
|
+
<li><a id="two_months" href="#">Two Months</a></li>
|
40
|
+
</ul>
|
41
|
+
</div>
|
42
|
+
</span>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
<input class="cache-toggle" type="checkbox" data-toggle="toggle"
|
46
|
+
data-on="Cache Enabled" data-off="Cache Disabled"/>
|
47
|
+
</div>
|
26
48
|
</div>
|
27
49
|
|
28
50
|
<div class="loaderContainer">
|
@@ -1,23 +1,24 @@
|
|
1
1
|
$(document).ready(function () {
|
2
2
|
var playground = new PlayGround(".area");
|
3
3
|
var pairingData = [];
|
4
|
-
var renderMatrix = function (
|
5
|
-
$('#
|
4
|
+
var renderMatrix = function () {
|
5
|
+
var days = $('#days').val();
|
6
6
|
hideMatrix();
|
7
7
|
showLoader();
|
8
|
-
$.get('/data/' + days).done(function (data) {
|
8
|
+
$.get('/data/' + days + "?cache_enabled=" + isCachingEnabled()).done(function (data) {
|
9
9
|
pairingData = JSON.parse(data);
|
10
10
|
playground.load(pairingData);
|
11
11
|
hideLoader();
|
12
12
|
showMatrix();
|
13
13
|
}).fail(function () {
|
14
|
-
alert('
|
14
|
+
alert('Error fetching data from server!');
|
15
15
|
hideLoader();
|
16
16
|
showMatrix();
|
17
17
|
});
|
18
18
|
};
|
19
19
|
|
20
20
|
var hideMatrix = function () {
|
21
|
+
$(".authors_container").hide();
|
21
22
|
$('.viz_container').hide();
|
22
23
|
};
|
23
24
|
|
@@ -35,7 +36,7 @@ $(document).ready(function () {
|
|
35
36
|
return 0;
|
36
37
|
});
|
37
38
|
_.each(sortedNames, function (name) {
|
38
|
-
$('.authors').append("<input type='checkbox' checked='true' name='" + name + "'><label for='" + name + "'>" + name + "</label></br>");
|
39
|
+
$('.authors').append("<input type='checkbox' class='author' checked='true' name='" + name + "'><label for='" + name + "'>" + name + "</label></br>");
|
39
40
|
});
|
40
41
|
|
41
42
|
$(".authors_container").show();
|
@@ -49,21 +50,51 @@ $(document).ready(function () {
|
|
49
50
|
$('.loaderContainer').show();
|
50
51
|
};
|
51
52
|
|
53
|
+
var enableCaching = function () {
|
54
|
+
$('.cache-toggle').bootstrapToggle('on');
|
55
|
+
};
|
56
|
+
|
57
|
+
var isCachingEnabled = function () {
|
58
|
+
return $('.cache-toggle').prop('checked');
|
59
|
+
};
|
60
|
+
|
61
|
+
var updateDays = function(days) {
|
62
|
+
var $days = $('#days');
|
63
|
+
$days.val(days);
|
64
|
+
};
|
65
|
+
|
52
66
|
$('#visualize').on('click', function () {
|
53
|
-
|
54
|
-
renderMatrix($('#days').val())
|
67
|
+
renderMatrix()
|
55
68
|
});
|
56
69
|
|
57
|
-
|
70
|
+
$('#a_week').on('click', function () {
|
71
|
+
updateDays('7');
|
72
|
+
renderMatrix()
|
73
|
+
});
|
74
|
+
|
75
|
+
$('#two_weeks').on('click', function () {
|
76
|
+
updateDays('14');
|
77
|
+
renderMatrix()
|
78
|
+
});
|
79
|
+
|
80
|
+
$('#a_month').on('click', function () {
|
81
|
+
updateDays('30');
|
82
|
+
renderMatrix()
|
83
|
+
});
|
84
|
+
|
85
|
+
$('#two_months').on('click', function () {
|
86
|
+
updateDays('60');
|
87
|
+
renderMatrix()
|
88
|
+
});
|
58
89
|
|
59
90
|
$('#reset').click(function () {
|
60
|
-
_.each($('
|
91
|
+
_.each($('.author'), function (e) {
|
61
92
|
e.checked = false;
|
62
93
|
});
|
63
94
|
});
|
64
95
|
|
65
96
|
$('#render').click(function (e) {
|
66
|
-
var checked = _.filter($('
|
97
|
+
var checked = _.filter($('.author'), function (e) {
|
67
98
|
return e.checked
|
68
99
|
});
|
69
100
|
var names = _.map(checked, function (checkbox) {
|
@@ -76,4 +107,7 @@ $(document).ready(function () {
|
|
76
107
|
|
77
108
|
playground.load(filteredPairingData);
|
78
109
|
});
|
110
|
+
|
111
|
+
enableCaching();
|
112
|
+
renderMatrix();
|
79
113
|
});
|
@@ -196,7 +196,7 @@ function PlayGround(selector) {
|
|
196
196
|
|
197
197
|
this.getValidPairs = function (pairingData) {
|
198
198
|
return _.filter(pairingData, function (data) {
|
199
|
-
return (!_.isEmpty(data[0]) && !_.isEmpty(data[1]));
|
199
|
+
return (!_.isEmpty(data[0]) && !_.isEmpty(data[1])) && data.length == 3;
|
200
200
|
})
|
201
201
|
};
|
202
202
|
|
@@ -3,6 +3,7 @@ require 'json'
|
|
3
3
|
require_relative '../../pairing_matrix'
|
4
4
|
require_relative '../config/config_reader'
|
5
5
|
require_relative '../commit_reader'
|
6
|
+
require_relative '../commit_cache'
|
6
7
|
require_relative '../github_commit_reader'
|
7
8
|
|
8
9
|
module PairingMatrix
|
@@ -20,12 +21,14 @@ module PairingMatrix
|
|
20
21
|
use Rack::CommonLogger, logging_file
|
21
22
|
end
|
22
23
|
|
24
|
+
PairingMatrix.enable_caching = true
|
23
25
|
config_reader = PairingMatrix::ConfigReader.new('pairing_matrix.yml')
|
24
26
|
config = config_reader.config
|
25
27
|
commit_reader = PairingMatrix::CommitReader.new(config)
|
26
28
|
commit_reader = PairingMatrix::GithubCommitReader.new(config) if config.fetch_from_github?
|
27
29
|
|
28
30
|
get '/data/:days' do
|
31
|
+
PairingMatrix.enable_caching = params[:cache_enabled] != 'false'
|
29
32
|
commit_reader.authors_with_commits(params['days'].to_i).to_json
|
30
33
|
end
|
31
34
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pairing_matrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ajit Singh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- bin/pairing_matrix
|
83
83
|
- lib/pairing_matrix.rb
|
84
|
+
- lib/pairing_matrix/commit_cache.rb
|
84
85
|
- lib/pairing_matrix/commit_reader.rb
|
85
86
|
- lib/pairing_matrix/config/config.rb
|
86
87
|
- lib/pairing_matrix/config/config_reader.rb
|