pairing_matrix 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9de294d0c49a37755ec26bef5fe0455a5e96c7fe
4
- data.tar.gz: 6b8f4f58eb23f7a0439e169970d963b5ded06c4b
3
+ metadata.gz: c09a1dee0449065d5c427e2066c56a052545ba24
4
+ data.tar.gz: eddae5874f7ad684ac3ba3894f4ecc20d77e6643
5
5
  SHA512:
6
- metadata.gz: 725f1224c7aa0dfd393ef4f541024a3ab438ead50d6b9f750cd1e49c5d8cf83b16b2bb960a514e2acc3d015ff1b351fbed432a99dc59987adfebd3487665e3f0
7
- data.tar.gz: aa04c0c2a9acfba65bcbe7d37c85e844cb494b9ef825c7c17973adbe1ef890837c5effe032ea3afee448f1d24df31e20921b7d90af68a83602b64aadecb9bd52
6
+ metadata.gz: 0f2634e24d49c030f730e00d487713d5f5c08f8f16b4a3a8b0f8975eb2413ea8eb98550f9d356d1f3a2c80335a22fdef6fceacf751ab28b4d63c6896ef5bf3f4
7
+ data.tar.gz: 2391abf8ff0bc0a1fdf780c348b0a5f88565e2cc650078dfed9478d7f08cae8233fa20c8afd2aee1bb9c97aca832f23b2ed3c0286a5d7b90db3355cb27913dee
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'sinatra'
3
+ gem 'sinatra'
4
+ gem 'octokit'
@@ -1,10 +1,20 @@
1
1
  module PairingMatrix
2
2
  class Config
3
- attr_reader :repos, :authors_regex
3
+ attr_reader :repos, :authors_regex, :github_access_token, :github_repos
4
4
 
5
- def initialize(repos, authors_regex)
5
+ def initialize(repos, authors_regex, github_access_token, github_repos)
6
6
  @repos = repos
7
7
  @authors_regex = authors_regex
8
+ @github_access_token = github_access_token
9
+ @github_repos = github_repos
10
+ end
11
+
12
+ def fetch_from_github?
13
+ !@github_repos.nil? && !@github_repos.empty?
14
+ end
15
+
16
+ def has_github_access_token?
17
+ !@github_access_token.nil? && !@github_access_token.empty?
8
18
  end
9
19
  end
10
20
  end
@@ -8,7 +8,12 @@ module PairingMatrix
8
8
 
9
9
  def config
10
10
  raw_config = YAML::load_file @config_file
11
- PairingMatrix::Config.new(raw_config['repos'], raw_config['authors_regex'])
11
+ PairingMatrix::Config.new(
12
+ raw_config['repos'],
13
+ raw_config['authors_regex'],
14
+ raw_config['github_access_token'],
15
+ raw_config['github_repos']
16
+ )
12
17
  end
13
18
  end
14
19
  end
@@ -0,0 +1,30 @@
1
+ require 'octokit'
2
+
3
+ Octokit.auto_paginate = true
4
+
5
+ module PairingMatrix
6
+ class GithubCommitReader < CommitReader
7
+ def initialize(config)
8
+ super(config)
9
+ @github_client = github_client
10
+ end
11
+
12
+ def read(since)
13
+ @config.github_repos.map do |repo|
14
+ puts "Fetching commits since #{since} for #{repo}"
15
+ commits = @github_client.commits_since(repo, since).map { |commit| commit.commit.message }
16
+ puts "Total commits: #{commits.size}"
17
+ commits
18
+ end.flatten
19
+ end
20
+
21
+ private
22
+ def github_client
23
+ if @config.has_github_access_token?
24
+ Octokit::Client.new(:access_token => @config.github_access_token)
25
+ else
26
+ Octokit::Client.new
27
+ end
28
+ end
29
+ end
30
+ end
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <title>Pairing Matrix</title>
5
5
  <link rel="stylesheet" href="style.css"/>
6
+ <link rel="stylesheet" href="loader.css"/>
6
7
 
7
8
  <script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.js"></script>
8
9
  <script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
@@ -12,12 +13,22 @@
12
13
  </head>
13
14
 
14
15
  <body>
15
- <div>
16
+ <div class="visualize_matrix_container">
16
17
  <span>Display data of last</span>
17
18
  <input type="number" id="days" value="10"/>
18
19
  <span>days</span>
19
20
  <button id="visualize">Visualize</button>
20
21
  </div>
22
+
23
+ <div class="loaderContainer">
24
+ <div class="loader">
25
+ <span class="dot dot_1"></span>
26
+ <span class="dot dot_2"></span>
27
+ <span class="dot dot_3"></span>
28
+ <span class="dot dot_4"></span>
29
+ </div>
30
+ </div>
31
+
21
32
  <div class="viz_container">
22
33
  <svg>
23
34
  <g class="area">
@@ -1,15 +1,33 @@
1
1
  $(document).ready(function () {
2
2
  var playground = new PlayGround(".area");
3
3
  var renderMatrix = function (days) {
4
- $.get('/data/' + days, function (data, status) {
5
- if (status == 'success') {
6
- playground.load(JSON.parse(data));
4
+ hideMatrix();
5
+ showLoader();
6
+ $.get('/data/' + days).done(function (data) {
7
+ playground.load(JSON.parse(data));
8
+ hideLoader();
9
+ showMatrix();
10
+ }).fail(function () {
11
+ alert('error occurred!');
12
+ hideLoader();
13
+ showMatrix();
14
+ });
15
+ };
16
+
17
+ var hideMatrix = function () {
18
+ $('.viz_container').hide();
19
+ };
20
+
21
+ var showMatrix = function () {
22
+ $('.viz_container').show();
23
+ };
24
+
25
+ var hideLoader = function () {
26
+ $('.loaderContainer').hide();
27
+ };
7
28
 
8
- } else {
9
- console.log(data);
10
- alert('error occurred!')
11
- }
12
- })
29
+ var showLoader = function () {
30
+ $('.loaderContainer').show();
13
31
  };
14
32
 
15
33
  $('#visualize').on('click', function () {
@@ -0,0 +1,99 @@
1
+ .loaderContainer {
2
+ margin-top: 250px;
3
+ }
4
+
5
+ .loader {
6
+ position: relative;
7
+ width: 44px;
8
+ height: 8px;
9
+ margin: 12px auto;
10
+ }
11
+
12
+ .dot {
13
+ display: inline-block;
14
+ width: 8px;
15
+ height: 8px;
16
+ border-radius: 4px;
17
+ background: #ccc;
18
+ position: absolute;
19
+ }
20
+
21
+ .dot_1 {
22
+ animation: animateDot1 1.5s linear infinite;
23
+ left: 12px;
24
+ background: #e579b8;
25
+ }
26
+
27
+ .dot_2 {
28
+ animation: animateDot2 1.5s linear infinite;
29
+ animation-delay: 0.5s;
30
+ left: 24px;
31
+ }
32
+
33
+ .dot_3 {
34
+ animation: animateDot3 1.5s linear infinite;
35
+ left: 12px;
36
+ }
37
+
38
+ .dot_4 {
39
+ animation: animateDot4 1.5s linear infinite;
40
+ animation-delay: 0.5s;
41
+ left: 24px;
42
+ }
43
+
44
+ @keyframes animateDot1 {
45
+ 0% {
46
+ transform: rotate(0deg) translateX(-12px);
47
+ }
48
+ 25% {
49
+ transform: rotate(180deg) translateX(-12px);
50
+ }
51
+ 75% {
52
+ transform: rotate(180deg) translateX(-12px);
53
+ }
54
+ 100% {
55
+ transform: rotate(360deg) translateX(-12px);
56
+ }
57
+ }
58
+ @keyframes animateDot2 {
59
+ 0% {
60
+ transform: rotate(0deg) translateX(-12px);
61
+ }
62
+ 25% {
63
+ transform: rotate(-180deg) translateX(-12px);
64
+ }
65
+ 75% {
66
+ transform: rotate(-180deg) translateX(-12px);
67
+ }
68
+ 100% {
69
+ transform: rotate(-360deg) translateX(-12px);
70
+ }
71
+ }
72
+ @keyframes animateDot3 {
73
+ 0% {
74
+ transform: rotate(0deg) translateX(12px);
75
+ }
76
+ 25% {
77
+ transform: rotate(180deg) translateX(12px);
78
+ }
79
+ 75% {
80
+ transform: rotate(180deg) translateX(12px);
81
+ }
82
+ 100% {
83
+ transform: rotate(360deg) translateX(12px);
84
+ }
85
+ }
86
+ @keyframes animateDot4 {
87
+ 0% {
88
+ transform: rotate(0deg) translateX(12px);
89
+ }
90
+ 25% {
91
+ transform: rotate(-180deg) translateX(12px);
92
+ }
93
+ 75% {
94
+ transform: rotate(-180deg) translateX(12px);
95
+ }
96
+ 100% {
97
+ transform: rotate(-360deg) translateX(12px);
98
+ }
99
+ }
@@ -48,12 +48,9 @@ function PlayGround(selector) {
48
48
  toCoordinates.x + " " + toCoordinates.y;
49
49
  })
50
50
  .attr("id", function(d) {return d.join('_')})
51
- .attr("fill", "none")
52
- .attr("stroke", "#DD1031")
53
51
  .attr("stroke-width", function (d) {
54
52
  return playground.connectionScale(d[2])
55
53
  })
56
- .attr("stroke-opacity", 0.75)
57
54
  .attr("data-from", function (d) {
58
55
  return d[0]
59
56
  })
@@ -83,15 +80,10 @@ function PlayGround(selector) {
83
80
  .attr("cy", function (d, i) {
84
81
  return playground.getPlayerCoordinates(i).y
85
82
  })
86
- .attr("r", 20)
87
83
  .attr("fill", colors)
88
- .attr("fill-opacity", 0.75)
89
- .attr("stroke", "#EE1031")
90
- .attr("stroke-opacity", 0.75)
91
84
  .attr("stroke-width", function (d) {
92
85
  return playground.connectionScale(playground.getSoloContribution(d))
93
86
  })
94
- .attr("z-index", 10)
95
87
  .attr("class", "player")
96
88
  .attr("id", function (d) {
97
89
  return d
@@ -118,52 +110,37 @@ function PlayGround(selector) {
118
110
  });
119
111
  };
120
112
 
113
+ this.toggleClass = function toggleClass(newClass, pair) {
114
+ for(ii = 0; ii < 2; ii++) {
115
+ d3.selectAll($("#" + pair[ii]))
116
+ .attr("class", newClass)
117
+ }
118
+ }
119
+
121
120
  this.mouseOut = function(id) {
122
121
  var connectedPairs = playground.getAllPairsContaining(id);
123
122
  connectedPairs.forEach(function(pair) {
124
- var firstPerson = pair[0];
125
- var secondPerson = pair[1];
126
- d3.selectAll($("#" + firstPerson))
127
- .style("fill", function(d) {return d.color})
128
- .style("stroke", "#EE1031")
129
- d3.selectAll($("#" + secondPerson))
130
- .style("fill", function(d) {return d.color})
131
- .style("stroke", "#EE1031")
123
+ playground.toggleClass("player", pair);
132
124
  var pairId = pair.join('_');
133
125
  d3.selectAll($("#" + pairId))
134
- .style("fill", "none")
135
- .style("stroke", "red")
136
- .style("stroke-width", function(d) {return d.color})
126
+ .attr("class", "connect")
127
+ .style("stroke-width", function(d) {return playground.connectionScale(d[2])})
137
128
  })
138
129
  d3.selectAll($("#" + id))
139
- .style("fill", function(d) {return d.color})
140
- .style("stroke", "#EE1031")
141
- .attr("stroke-opacity", 0.75)
142
- .attr("stroke-width", function (d) {
143
- return playground.connectionScale(playground.getSoloContribution(d))
144
- });
130
+ .attr("class", "player")
145
131
  }
146
132
 
147
133
  this.mouseOver = function (id) {
148
134
  var connectedPairs = playground.getAllPairsContaining(id);
149
135
  connectedPairs.forEach(function(pair) {
150
- var firstPerson = pair[0];
151
- var secondPerson = pair[1];
152
- d3.selectAll($("#" + firstPerson))
153
- .style("fill", "red")
154
- .style("stroke", "blue");
155
- d3.selectAll($("#" + secondPerson))
156
- .style("fill", "red")
157
- .style("stroke", "blue");
136
+ playground.toggleClass("playerLarge", pair)
158
137
  var pairId = pair.join('_');
159
138
  d3.selectAll($("#" + pairId))
160
- .style("fill", "none")
161
- .style("stroke", "black")
162
- .style("stroke-width", "2px")
139
+ .attr("class", "connectLarge")
140
+ .style("stroke-width", function(d) {return playground.connectionScale(d[2]) * 3})
163
141
  })
164
142
  d3.selectAll($("#" + id))
165
- .style("fill", "red")
166
- .style("stroke", "blue");
143
+ .attr("class", "playerLarge")
167
144
  };
168
145
 
169
146
  this.updateConnectorsPath = function (playerId, newPoint) {
@@ -42,6 +42,10 @@ textarea#pairing_text {
42
42
  margin-top: 10px;
43
43
  }
44
44
 
45
+ .visualize_matrix_container {
46
+ text-align: center;
47
+ }
48
+
45
49
  .viz_container {
46
50
  text-align: center;
47
51
  }
@@ -53,6 +57,21 @@ svg {
53
57
 
54
58
  .player {
55
59
  cursor: pointer;
60
+ r: 20px;
61
+ fill-opacity: 0.75;
62
+ stroke: #EE1031;
63
+ stroke-opacity: 0.75;
64
+ z-index: 10;
65
+ }
66
+
67
+ .playerLarge {
68
+ cursor: pointer;
69
+ r: 25px;
70
+ fill: red;
71
+ fill-opacity: 0.75;
72
+ stroke: blue;
73
+ stroke-opacity: 0.75;
74
+ z-index: 10;
56
75
  }
57
76
 
58
77
  .player_names {
@@ -62,4 +81,16 @@ svg {
62
81
  .input-container {
63
82
  height: 300px;
64
83
  overflow: scroll;
84
+ }
85
+
86
+ .connect {
87
+ fill: none;
88
+ stroke: #DD1031;
89
+ stroke-opacity: 0.75;
90
+ }
91
+
92
+ .connectLarge {
93
+ fill: none;
94
+ stroke: black;
95
+ stroke-opacity: 0.75;
65
96
  }
@@ -9,6 +9,7 @@ module PairingMatrix
9
9
  config_reader = PairingMatrix::ConfigReader.new('pairing_matrix.yml')
10
10
  config = config_reader.config
11
11
  commit_reader = PairingMatrix::CommitReader.new(config)
12
+ commit_reader = PairingMatrix::GithubCommitReader.new(config) if config.fetch_from_github?
12
13
 
13
14
  get '/data/:days' do
14
15
  commit_reader.authors_with_commits(params['days'].to_i).to_json
@@ -1,3 +1,3 @@
1
1
  module PairingMatrix
2
- VERSION = '0.1.2'
2
+ VERSION = '1.0'
3
3
  end
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.6'
22
22
  spec.add_dependency 'sinatra', '~> 1.4.8'
23
+ spec.add_dependency 'octokit', '~> 4.6.2'
23
24
  end
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: 0.1.2
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ajit Singh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2017-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.4.8
41
+ - !ruby/object:Gem::Dependency
42
+ name: octokit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.6.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.6.2
41
55
  description: Draw pairing matrix from given repos and configurations
42
56
  email:
43
57
  - jeetsingh.ajit@gmail.com
@@ -56,8 +70,10 @@ files:
56
70
  - lib/pairing_matrix/commit_reader.rb
57
71
  - lib/pairing_matrix/config/config.rb
58
72
  - lib/pairing_matrix/config/config_reader.rb
73
+ - lib/pairing_matrix/github_commit_reader.rb
59
74
  - lib/pairing_matrix/server/public/index.html
60
75
  - lib/pairing_matrix/server/public/index.js
76
+ - lib/pairing_matrix/server/public/loader.css
61
77
  - lib/pairing_matrix/server/public/matrix.js
62
78
  - lib/pairing_matrix/server/public/style.css
63
79
  - lib/pairing_matrix/server/server.rb