cobench 0.0.21 → 0.0.24

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: 6117bbba07444b2da4210d173981f6199005ac182482fca43aa36c04d919ef1b
4
- data.tar.gz: 38172dfd6d7cb9cb8604d051ca0cf82b53aebb89c604edf23ac1bcb12a6c5c86
3
+ metadata.gz: c88b2884af1c5f379f0ffc146188ae2b1c7ab4ffd1fa6690a1bebc1120b2f848
4
+ data.tar.gz: 4ccd4da7ea79c1f0b121c289a28def7b4decbb6b4792856f59bc0b4ca8cd87d9
5
5
  SHA512:
6
- metadata.gz: f37e7867a1359bc99291f7607ec43f3c7ced2039fb46e2cefd8b50a2a3c1aeabaef18ac095a1579cc3a1e265a5132809a567504782211f593a1b79a72d8415e4
7
- data.tar.gz: 36115b07683f34eed5ea446a455ec4ab7b8b18bd70bf27e860c281d4711ebcdf5b9221d7730da3a3b80355328585c316c1599162619d585dd9652f19d1bd5bf4
6
+ metadata.gz: 884a2cf5e5bff6d1050a94e2abc09ea4c4c96d45144a529ae7e7a9c4b86382ce8ec73841f6119a0c5a42b96896105658b1436e6204ffb99e9bf80733f49204da
7
+ data.tar.gz: 9a55303410d004305736bcafa56e61c10e323fe698f7c59b210dbb8135e9c5b21836ae9fc29057b26c31cb3761e0634f3fc94230da830ef2237598ad6a722843
data/assets/index.xsl CHANGED
@@ -67,8 +67,14 @@ SOFTWARE.
67
67
  </header>
68
68
  <article>
69
69
  <table id="metrics">
70
- <xsl:apply-templates select="cobench/titles"/>
70
+ <thead>
71
+ <xsl:apply-templates select="cobench/titles"/>
72
+ </thead>
71
73
  <xsl:apply-templates select="cobench/coders"/>
74
+ <tfoot>
75
+ <xsl:apply-templates select="cobench/totals"/>
76
+ <xsl:apply-templates select="cobench/averages"/>
77
+ </tfoot>
72
78
  </table>
73
79
  </article>
74
80
  <footer>
@@ -133,6 +139,19 @@ SOFTWARE.
133
139
  </xsl:for-each>
134
140
  <xsl:text>.</xsl:text>
135
141
  </p>
142
+ <p>
143
+ <xsl:for-each select="cobench/titles/title[@subtitle]">
144
+ <xsl:if test="position() &gt; 1">
145
+ <xsl:text>, </xsl:text>
146
+ </xsl:if>
147
+ <xsl:text>"</xsl:text>
148
+ <xsl:value-of select="."/>
149
+ <xsl:text>"</xsl:text>
150
+ <xsl:text> stands for </xsl:text>
151
+ <xsl:value-of select="@subtitle"/>
152
+ </xsl:for-each>
153
+ <xsl:text>.</xsl:text>
154
+ </p>
136
155
  <p>
137
156
  <xsl:text>The numbers you see reflect the activity of the last </xsl:text>
138
157
  <b>
@@ -140,6 +159,12 @@ SOFTWARE.
140
159
  <xsl:text> days</xsl:text>
141
160
  </b>
142
161
  <xsl:text>.</xsl:text>
162
+ <br/>
163
+ <xsl:text>The XML with the data </xsl:text>
164
+ <a href="index.xml">
165
+ <xsl:text>is here</xsl:text>
166
+ </a>
167
+ <xsl:text>.</xsl:text>
143
168
  </p>
144
169
  </footer>
145
170
  </section>
@@ -147,18 +172,42 @@ SOFTWARE.
147
172
  </html>
148
173
  </xsl:template>
149
174
  <xsl:template match="cobench/titles">
150
- <thead>
151
- <tr>
152
- <th/>
153
- <th/>
154
- <xsl:for-each select="title[generate-id() = generate-id(key('titles', .)[1])]">
155
- <xsl:sort select="."/>
156
- <th class="sorter num">
157
- <xsl:value-of select="."/>
158
- </th>
159
- </xsl:for-each>
160
- </tr>
161
- </thead>
175
+ <tr>
176
+ <th/>
177
+ <th/>
178
+ <xsl:for-each select="title[generate-id() = generate-id(key('titles', .)[1])]">
179
+ <xsl:sort select="."/>
180
+ <th class="sorter num">
181
+ <xsl:value-of select="."/>
182
+ </th>
183
+ </xsl:for-each>
184
+ </tr>
185
+ </xsl:template>
186
+ <xsl:template match="cobench/totals">
187
+ <xsl:variable name="totals" select="."/>
188
+ <tr>
189
+ <td colspan="2" style="text-align:right">Total:</td>
190
+ <xsl:for-each select="/cobench/titles/title[generate-id() = generate-id(key('titles', .)[1])]">
191
+ <xsl:sort select="."/>
192
+ <xsl:variable name="t" select="."/>
193
+ <td class="num">
194
+ <xsl:value-of select="$totals/w[@id=$t]"/>
195
+ </td>
196
+ </xsl:for-each>
197
+ </tr>
198
+ </xsl:template>
199
+ <xsl:template match="cobench/averages">
200
+ <xsl:variable name="averages" select="."/>
201
+ <tr>
202
+ <td colspan="2" style="text-align:right">Average:</td>
203
+ <xsl:for-each select="/cobench/titles/title[generate-id() = generate-id(key('titles', .)[1])]">
204
+ <xsl:sort select="."/>
205
+ <xsl:variable name="t" select="."/>
206
+ <td class="num">
207
+ <xsl:value-of select="$averages/w[@id=$t]"/>
208
+ </td>
209
+ </xsl:for-each>
210
+ </tr>
162
211
  </xsl:template>
163
212
  <xsl:template match="cobench/coders">
164
213
  <tbody>
@@ -175,10 +224,12 @@ SOFTWARE.
175
224
  <xsl:text>@</xsl:text>
176
225
  <xsl:value-of select="@id"/>
177
226
  </a>
178
- <br/>
179
- <span class="subtitle">
180
- <xsl:value-of select="@details"/>
181
- </span>
227
+ <xsl:if test="@details">
228
+ <br/>
229
+ <span class="subtitle">
230
+ <xsl:value-of select="@details"/>
231
+ </span>
232
+ </xsl:if>
182
233
  </td>
183
234
  <xsl:for-each select="metrics/m">
184
235
  <xsl:sort select="@id"/>
@@ -189,13 +240,13 @@ SOFTWARE.
189
240
  <xsl:template match="m">
190
241
  <xsl:variable name="body">
191
242
  <xsl:choose>
192
- <xsl:when test="@href = ''">
193
- <xsl:value-of select="."/>
194
- </xsl:when>
195
- <xsl:otherwise>
243
+ <xsl:when test="@href">
196
244
  <a href="{@href}">
197
245
  <xsl:value-of select="."/>
198
246
  </a>
247
+ </xsl:when>
248
+ <xsl:otherwise>
249
+ <xsl:value-of select="."/>
199
250
  </xsl:otherwise>
200
251
  </xsl:choose>
201
252
  </xsl:variable>
@@ -203,11 +254,11 @@ SOFTWARE.
203
254
  <xsl:choose>
204
255
  <xsl:when test="@actual">
205
256
  <span class="firebrick">
206
- <xsl:value-of select="$body"/>
257
+ <xsl:copy-of select="$body"/>
207
258
  </span>
208
259
  </xsl:when>
209
260
  <xsl:otherwise>
210
- <xsl:value-of select="$body"/>
261
+ <xsl:copy-of select="$body"/>
211
262
  </xsl:otherwise>
212
263
  </xsl:choose>
213
264
  <xsl:if test="@actual">
data/bin/cobench CHANGED
@@ -121,7 +121,7 @@ def build_xml(opts, loog)
121
121
  end
122
122
  end
123
123
  caps = {
124
- 'HoC' => lambda { |ms| ms['Commits'][:total] * 512 },
124
+ 'HoC' => lambda { |ms| ms['Pulls'][:total] * 1024 },
125
125
  }
126
126
  data.each do |u, ms|
127
127
  ms.map do |t, h|
@@ -136,39 +136,75 @@ def build_xml(opts, loog)
136
136
  end
137
137
  weights = {
138
138
  'HoC' => 1,
139
- 'Pulls' => 200,
139
+ 'Pulls' => 250,
140
140
  'Issues' => 50,
141
141
  'Commits' => 5,
142
- 'Reviews' => 75
142
+ 'Reviews' => 150
143
143
  }
144
144
  data.each do |u, ms|
145
145
  score = ms.map do |t, h|
146
146
  raise "Unknown title '#{t}'" unless weights.key?(t)
147
147
  h[:total] * weights[t]
148
148
  end.inject(0, :+)
149
- data[u]['Score'] = { total: score, href: '' }
149
+ data[u]['Score'] = { total: score }
150
+ end
151
+ averages = {
152
+ 'HpP': {
153
+ f: lambda { |ms| ms['HoC'][:total] / ms['Pulls'][:total] },
154
+ title: 'HoC per Pull'
155
+ },
156
+ 'HpC': {
157
+ f: lambda { |ms| ms['HoC'][:total] / ms['Commits'][:total] },
158
+ title: 'HoC per Commit'
159
+ }
160
+ }
161
+ data.each do |u, ms|
162
+ averages.each do |k, a|
163
+ data[u][k] = { total: a[:f].call(ms) }
164
+ end
150
165
  end
151
166
  builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
152
167
  xml.cobench(time: Time.now, days: opts[:days]) do
153
168
  xml.titles do
154
- data.map { |_, ms| ms.keys }.flatten.each do |t|
155
- xml.title t
169
+ data.map { |_, ms| ms.keys }.flatten.uniq.each do |t|
170
+ xml.title do
171
+ xml.parent.set_attribute('subtitle', averages[t][:title]) if averages.key?(t)
172
+ xml.text t
173
+ end
156
174
  end
157
175
  end
158
176
  xml.weights do
159
177
  weights.each do |t, w|
160
178
  xml.w(id: t) do
161
- xml.text w
179
+ xml.text(w)
180
+ end
181
+ end
182
+ end
183
+ xml.totals do
184
+ data.map { |_, ms| ms.keys }.flatten.uniq.each do |t|
185
+ next if t == 'Score'
186
+ next if averages.key?(t)
187
+ xml.w(id: t) do
188
+ xml.text(data.values.map { |ms| ms[t][:total] }.inject(&:+))
189
+ end
190
+ end
191
+ end
192
+ xml.averages do
193
+ data.map { |_, ms| ms.keys }.flatten.uniq.each do |t|
194
+ next if t == 'Score'
195
+ xml.w(id: t) do
196
+ vals = data.values.map { |ms| ms[t][:total] }.select { |v| v > 0 }
197
+ xml.text(vals.inject(&:+) / vals.count)
162
198
  end
163
199
  end
164
200
  end
165
201
  xml.coders do
166
202
  data.each do |u, ms|
167
203
  xml.coder(id: u) do
168
- xml.parent.set_attribute('details', api.user(u).name)
204
+ xml.parent.set_attribute('details', api.user(u).name) unless opts[:dry]
169
205
  xml.metrics do
170
206
  ms.each do |k, v|
171
- xml.m(id: k, href: v[:href]) do
207
+ xml.m(id: k) do
172
208
  xml.parent.set_attribute('actual', v[:actual]) unless v[:actual].nil?
173
209
  xml.parent.set_attribute('href', v[:href]) unless v[:href].nil?
174
210
  xml.text v[:total]
@@ -57,8 +57,7 @@ class Cobench::Commits
57
57
  },
58
58
  {
59
59
  title: 'HoC',
60
- total: hoc,
61
- href: ''
60
+ total: hoc
62
61
  }
63
62
  ]
64
63
  end
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2022 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Cobench
26
- VERSION = '0.0.21'.freeze
26
+ VERSION = '0.0.24'.freeze
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cobench
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-29 00:00:00.000000000 Z
11
+ date: 2022-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace