how_is 24.0.0 → 25.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github_changelog_generator +0 -1
  3. data/.rubocop.yml +37 -12
  4. data/.travis.yml +6 -3
  5. data/CHANGELOG.md +56 -0
  6. data/CONTRIBUTING.md +34 -0
  7. data/Gemfile +8 -4
  8. data/ISSUES.md +30 -54
  9. data/README.md +16 -91
  10. data/Rakefile +3 -31
  11. data/bin/prerelease-generate-changelog +1 -1
  12. data/bin/setup +0 -0
  13. data/build-debug.rb +20 -0
  14. data/exe/how_is +25 -22
  15. data/fixtures/vcr_cassettes/how-is-example-empty-repository.yml +334 -1
  16. data/fixtures/vcr_cassettes/how-is-example-repository.yml +350 -1
  17. data/fixtures/vcr_cassettes/how-is-from-config-frontmatter.yml +15234 -1
  18. data/fixtures/vcr_cassettes/how-is-how-is-travis-api-repos-builds.yml +2694 -1
  19. data/fixtures/vcr_cassettes/how-is-with-config-file.yml +15234 -1
  20. data/fixtures/vcr_cassettes/how_is_contributions_additions_count.yml +70 -1
  21. data/fixtures/vcr_cassettes/how_is_contributions_all_contributors.yml +70 -1
  22. data/fixtures/vcr_cassettes/how_is_contributions_changed_files.yml +70 -1
  23. data/fixtures/vcr_cassettes/how_is_contributions_changes.yml +70 -1
  24. data/fixtures/vcr_cassettes/how_is_contributions_commits.yml +70 -1
  25. data/fixtures/vcr_cassettes/how_is_contributions_compare_url.yml +70 -1
  26. data/fixtures/vcr_cassettes/how_is_contributions_default_branch.yml +70 -1
  27. data/fixtures/vcr_cassettes/how_is_contributions_deletions_count.yml +70 -1
  28. data/fixtures/vcr_cassettes/how_is_contributions_new_contributors.yml +70 -1
  29. data/fixtures/vcr_cassettes/how_is_contributions_summary.yml +70 -1
  30. data/fixtures/vcr_cassettes/how_is_contributions_summary_2.yml +70 -1
  31. data/how_is.gemspec +12 -6
  32. data/lib/how_is/cacheable.rb +71 -0
  33. data/lib/how_is/cli.rb +121 -124
  34. data/lib/how_is/config.rb +123 -0
  35. data/lib/how_is/constants.rb +9 -0
  36. data/lib/how_is/date_time_helpers.rb +48 -0
  37. data/lib/how_is/frontmatter.rb +14 -9
  38. data/lib/how_is/report.rb +86 -58
  39. data/lib/how_is/report_collection.rb +113 -0
  40. data/lib/how_is/sources/ci/appveyor.rb +88 -0
  41. data/lib/how_is/sources/ci/travis.rb +159 -0
  42. data/lib/how_is/sources/github/contributions.rb +169 -128
  43. data/lib/how_is/sources/github/issue_fetcher.rb +148 -0
  44. data/lib/how_is/sources/github/issues.rb +86 -235
  45. data/lib/how_is/sources/github/pulls.rb +19 -18
  46. data/lib/how_is/sources/github.rb +40 -18
  47. data/lib/how_is/sources/github_helpers.rb +8 -91
  48. data/lib/how_is/sources.rb +2 -0
  49. data/lib/how_is/template.rb +9 -0
  50. data/lib/how_is/templates/contributions_partial.html +1 -0
  51. data/lib/how_is/templates/{issues_or_pulls_partial.html_template → issues_or_pulls_partial.html} +0 -0
  52. data/lib/how_is/templates/new_contributors_partial.html +5 -0
  53. data/lib/how_is/templates/{report.html_template → report.html} +0 -8
  54. data/lib/how_is/templates/{report_partial.html_template → report_partial.html} +3 -3
  55. data/lib/how_is/text.rb +26 -0
  56. data/lib/how_is/version.rb +2 -1
  57. data/lib/how_is.rb +33 -60
  58. metadata +28 -47
  59. data/.hound.yml +0 -2
  60. data/.rubocop_todo.yml +0 -21
  61. data/lib/how_is/sources/travis.rb +0 -37
  62. data/roadmap.markdown +0 -82
@@ -1135,4 +1135,353 @@ http_interactions:
1135
1135
  commit","tree":{"sha":"7bee2a10cc8c7c036d5006fa0aacadd869d09c4e","url":"https://api.github.com/repos/how-is/example-repository/git/trees/7bee2a10cc8c7c036d5006fa0aacadd869d09c4e"},"url":"https://api.github.com/repos/how-is/example-repository/git/commits/9e29405efa433529b86722542b8fb4b34dfd9edd","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/how-is/example-repository/commits/9e29405efa433529b86722542b8fb4b34dfd9edd","html_url":"https://github.com/how-is/example-repository/commit/9e29405efa433529b86722542b8fb4b34dfd9edd","comments_url":"https://api.github.com/repos/how-is/example-repository/commits/9e29405efa433529b86722542b8fb4b34dfd9edd/comments","author":{"login":"duckinator","id":39698,"avatar_url":"https://avatars3.githubusercontent.com/u/39698?v=4","gravatar_id":"","url":"https://api.github.com/users/duckinator","html_url":"https://github.com/duckinator","followers_url":"https://api.github.com/users/duckinator/followers","following_url":"https://api.github.com/users/duckinator/following{/other_user}","gists_url":"https://api.github.com/users/duckinator/gists{/gist_id}","starred_url":"https://api.github.com/users/duckinator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckinator/subscriptions","organizations_url":"https://api.github.com/users/duckinator/orgs","repos_url":"https://api.github.com/users/duckinator/repos","events_url":"https://api.github.com/users/duckinator/events{/privacy}","received_events_url":"https://api.github.com/users/duckinator/received_events","type":"User","site_admin":false},"committer":{"login":"duckinator","id":39698,"avatar_url":"https://avatars3.githubusercontent.com/u/39698?v=4","gravatar_id":"","url":"https://api.github.com/users/duckinator","html_url":"https://github.com/duckinator","followers_url":"https://api.github.com/users/duckinator/followers","following_url":"https://api.github.com/users/duckinator/following{/other_user}","gists_url":"https://api.github.com/users/duckinator/gists{/gist_id}","starred_url":"https://api.github.com/users/duckinator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckinator/subscriptions","organizations_url":"https://api.github.com/users/duckinator/orgs","repos_url":"https://api.github.com/users/duckinator/repos","events_url":"https://api.github.com/users/duckinator/events{/privacy}","received_events_url":"https://api.github.com/users/duckinator/received_events","type":"User","site_admin":false},"parents":[]}]'
1136
1136
  http_version:
1137
1137
  recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1138
- recorded_with: VCR 3.0.3
1138
+ - request:
1139
+ method: get
1140
+ uri: https://api.travis-ci.org/repo/how-is%2Fexample-repository/branches?sort_by=default_branch
1141
+ body:
1142
+ encoding: US-ASCII
1143
+ string: ''
1144
+ headers:
1145
+ Accept-Encoding:
1146
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1147
+ Accept:
1148
+ - application/json
1149
+ User-Agent:
1150
+ - how_is/24.0.0 (https://github.com/how-is/how_is/)
1151
+ Host:
1152
+ - api.travis-ci.org
1153
+ Travis-Api-Version:
1154
+ - '3'
1155
+ response:
1156
+ status:
1157
+ code: 200
1158
+ message: OK
1159
+ headers:
1160
+ Connection:
1161
+ - keep-alive
1162
+ Server:
1163
+ - nginx
1164
+ Date:
1165
+ - Fri, 30 Mar 2018 22:04:02 GMT
1166
+ Content-Type:
1167
+ - application/json
1168
+ Transfer-Encoding:
1169
+ - chunked
1170
+ Access-Control-Allow-Origin:
1171
+ - "*"
1172
+ Access-Control-Allow-Credentials:
1173
+ - 'true'
1174
+ Access-Control-Expose-Headers:
1175
+ - Content-Type, Cache-Control, Expires, Etag, Last-Modified, X-Request-ID
1176
+ Strict-Transport-Security:
1177
+ - max-age=31536000
1178
+ X-Endpoint:
1179
+ - Travis::API::V3::Services::Branches::Find
1180
+ X-Oauth-Scopes:
1181
+ - ''
1182
+ Vary:
1183
+ - Accept-Encoding
1184
+ X-Rack-Cache:
1185
+ - miss
1186
+ X-Request-Id:
1187
+ - 508118b3-e746-442e-8e4f-381b7fc763ec
1188
+ Via:
1189
+ - 1.1 vegur
1190
+ body:
1191
+ encoding: ASCII-8BIT
1192
+ string: |-
1193
+ {
1194
+ "@type": "branches",
1195
+ "@href": "/repo/how-is%2Fexample-repository/branches?sort_by=default_branch",
1196
+ "@representation": "standard",
1197
+ "@pagination": {
1198
+ "limit": 25,
1199
+ "offset": 0,
1200
+ "count": 1,
1201
+ "is_first": true,
1202
+ "is_last": true,
1203
+ "next": null,
1204
+ "prev": null,
1205
+ "first": {
1206
+ "@href": "/repo/how-is%2Fexample-repository/branches?sort_by=default_branch",
1207
+ "offset": 0,
1208
+ "limit": 25
1209
+ },
1210
+ "last": {
1211
+ "@href": "/repo/how-is%2Fexample-repository/branches?sort_by=default_branch",
1212
+ "offset": 0,
1213
+ "limit": 25
1214
+ }
1215
+ },
1216
+ "branches": [
1217
+ {
1218
+ "@type": "branch",
1219
+ "@href": "/repo/9682159/branch/master",
1220
+ "@representation": "standard",
1221
+ "name": "master",
1222
+ "repository": {
1223
+ "@type": "repository",
1224
+ "@href": "/repo/9682159",
1225
+ "@representation": "minimal",
1226
+ "id": 9682159,
1227
+ "name": "example-repository",
1228
+ "slug": "how-is/example-repository"
1229
+ },
1230
+ "default_branch": true,
1231
+ "exists_on_github": true,
1232
+ "last_build": null
1233
+ }
1234
+ ]
1235
+ }
1236
+ http_version:
1237
+ recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1238
+ - request:
1239
+ method: get
1240
+ uri: https://api.travis-ci.org/repo/how-is%2Fexample-repository/builds?branch.name=master&event_type=push
1241
+ body:
1242
+ encoding: US-ASCII
1243
+ string: ''
1244
+ headers:
1245
+ Accept-Encoding:
1246
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1247
+ Accept:
1248
+ - application/json
1249
+ User-Agent:
1250
+ - how_is/24.0.0 (https://github.com/how-is/how_is/)
1251
+ Host:
1252
+ - api.travis-ci.org
1253
+ Travis-Api-Version:
1254
+ - '3'
1255
+ response:
1256
+ status:
1257
+ code: 200
1258
+ message: OK
1259
+ headers:
1260
+ Connection:
1261
+ - keep-alive
1262
+ Server:
1263
+ - nginx
1264
+ Date:
1265
+ - Fri, 30 Mar 2018 22:04:02 GMT
1266
+ Content-Type:
1267
+ - application/json
1268
+ Transfer-Encoding:
1269
+ - chunked
1270
+ Access-Control-Allow-Origin:
1271
+ - "*"
1272
+ Access-Control-Allow-Credentials:
1273
+ - 'true'
1274
+ Access-Control-Expose-Headers:
1275
+ - Content-Type, Cache-Control, Expires, Etag, Last-Modified, X-Request-ID
1276
+ Strict-Transport-Security:
1277
+ - max-age=31536000
1278
+ X-Endpoint:
1279
+ - Travis::API::V3::Services::Builds::Find
1280
+ X-Oauth-Scopes:
1281
+ - ''
1282
+ Vary:
1283
+ - Accept-Encoding
1284
+ X-Rack-Cache:
1285
+ - miss
1286
+ X-Request-Id:
1287
+ - 137b385a-8828-4b6b-9366-48720615036e
1288
+ Via:
1289
+ - 1.1 vegur
1290
+ body:
1291
+ encoding: ASCII-8BIT
1292
+ string: |-
1293
+ {
1294
+ "@type": "builds",
1295
+ "@href": "/repo/how-is%2Fexample-repository/builds?event_type=push&branch.name=master",
1296
+ "@representation": "standard",
1297
+ "@pagination": {
1298
+ "limit": 25,
1299
+ "offset": 0,
1300
+ "count": 0,
1301
+ "is_first": true,
1302
+ "is_last": true,
1303
+ "next": null,
1304
+ "prev": null,
1305
+ "first": {
1306
+ "@href": "/repo/how-is%2Fexample-repository/builds?event_type=push&branch.name=master",
1307
+ "offset": 0,
1308
+ "limit": 25
1309
+ },
1310
+ "last": {
1311
+ "@href": "/repo/how-is%2Fexample-repository/builds?branch.name=master&event_type=push&limit=25&offset=-25",
1312
+ "offset": -25,
1313
+ "limit": 25
1314
+ }
1315
+ },
1316
+ "builds": [
1317
+
1318
+ ]
1319
+ }
1320
+ http_version:
1321
+ recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1322
+ - request:
1323
+ method: get
1324
+ uri: https://ci.appveyor.com/api/projects/how-is/example-repository
1325
+ body:
1326
+ encoding: US-ASCII
1327
+ string: ''
1328
+ headers:
1329
+ Accept-Encoding:
1330
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1331
+ Accept:
1332
+ - application/json
1333
+ User-Agent:
1334
+ - how_is/24.0.0 (https://github.com/how-is/how_is/)
1335
+ Host:
1336
+ - ci.appveyor.com
1337
+ response:
1338
+ status:
1339
+ code: 404
1340
+ message: Not Found
1341
+ headers:
1342
+ Cache-Control:
1343
+ - no-cache
1344
+ Pragma:
1345
+ - no-cache
1346
+ Content-Type:
1347
+ - application/json; charset=utf-8
1348
+ Expires:
1349
+ - "-1"
1350
+ X-Xss-Protection:
1351
+ - 1; mode=block
1352
+ X-Frame-Options:
1353
+ - SAMEORIGIN
1354
+ Strict-Transport-Security:
1355
+ - max-age=31536000
1356
+ X-Content-Type-Options:
1357
+ - nosniff
1358
+ Date:
1359
+ - Fri, 30 Mar 2018 22:04:02 GMT
1360
+ Content-Length:
1361
+ - '49'
1362
+ body:
1363
+ encoding: UTF-8
1364
+ string: '{"message":"Project not found or access denied."}'
1365
+ http_version:
1366
+ recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1367
+ - request:
1368
+ method: get
1369
+ uri: https://ci.appveyor.com/api/projects/how-is/example-repository/history?recordsNumber=100
1370
+ body:
1371
+ encoding: US-ASCII
1372
+ string: ''
1373
+ headers:
1374
+ Accept-Encoding:
1375
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1376
+ Accept:
1377
+ - application/json
1378
+ User-Agent:
1379
+ - how_is/24.0.0 (https://github.com/how-is/how_is/)
1380
+ Host:
1381
+ - ci.appveyor.com
1382
+ response:
1383
+ status:
1384
+ code: 404
1385
+ message: Not Found
1386
+ headers:
1387
+ Cache-Control:
1388
+ - no-cache
1389
+ Pragma:
1390
+ - no-cache
1391
+ Content-Type:
1392
+ - application/json; charset=utf-8
1393
+ Expires:
1394
+ - "-1"
1395
+ X-Xss-Protection:
1396
+ - 1; mode=block
1397
+ X-Frame-Options:
1398
+ - SAMEORIGIN
1399
+ Strict-Transport-Security:
1400
+ - max-age=31536000
1401
+ X-Content-Type-Options:
1402
+ - nosniff
1403
+ Date:
1404
+ - Fri, 25 May 2018 15:54:59 GMT
1405
+ Content-Length:
1406
+ - '49'
1407
+ body:
1408
+ encoding: UTF-8
1409
+ string: '{"message":"Project not found or access denied."}'
1410
+ http_version:
1411
+ recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1412
+ - request:
1413
+ method: get
1414
+ uri: https://api.github.com/repos/how-is/example-repository/commits?author=me@duckie.co&until=2016-08-01
1415
+ body:
1416
+ encoding: US-ASCII
1417
+ string: ''
1418
+ headers:
1419
+ Accept:
1420
+ - application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1
1421
+ Accept-Charset:
1422
+ - utf-8
1423
+ User-Agent:
1424
+ - Github API Ruby Gem 0.18.2
1425
+ Authorization:
1426
+ - Basic ZHVja2luYXRvcjo5MTgyNzc3ZmYzYzAwNjc5NTE5M2E1NzBjZGFjMzI2YjY0NDU5ZGM5
1427
+ Accept-Encoding:
1428
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
1429
+ response:
1430
+ status:
1431
+ code: 200
1432
+ message: OK
1433
+ headers:
1434
+ Server:
1435
+ - GitHub.com
1436
+ Date:
1437
+ - Fri, 15 Mar 2019 21:54:09 GMT
1438
+ Content-Type:
1439
+ - application/json; charset=utf-8
1440
+ Content-Length:
1441
+ - '2'
1442
+ Status:
1443
+ - 200 OK
1444
+ X-Ratelimit-Limit:
1445
+ - '5000'
1446
+ X-Ratelimit-Remaining:
1447
+ - '4301'
1448
+ X-Ratelimit-Reset:
1449
+ - '1552689075'
1450
+ Cache-Control:
1451
+ - private, max-age=60, s-maxage=60
1452
+ Vary:
1453
+ - Accept, Authorization, Cookie, X-GitHub-OTP
1454
+ Etag:
1455
+ - '"74b5718094ce8869d8149d99338cb4f8"'
1456
+ X-Oauth-Scopes:
1457
+ - ''
1458
+ X-Accepted-Oauth-Scopes:
1459
+ - ''
1460
+ X-Github-Media-Type:
1461
+ - github.v3; format=json
1462
+ Access-Control-Expose-Headers:
1463
+ - ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining,
1464
+ X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval,
1465
+ X-GitHub-Media-Type
1466
+ Access-Control-Allow-Origin:
1467
+ - "*"
1468
+ Strict-Transport-Security:
1469
+ - max-age=31536000; includeSubdomains; preload
1470
+ X-Frame-Options:
1471
+ - deny
1472
+ X-Content-Type-Options:
1473
+ - nosniff
1474
+ X-Xss-Protection:
1475
+ - 1; mode=block
1476
+ Referrer-Policy:
1477
+ - origin-when-cross-origin, strict-origin-when-cross-origin
1478
+ Content-Security-Policy:
1479
+ - default-src 'none'
1480
+ X-Github-Request-Id:
1481
+ - 87EF:64A4:11E9D23:22562CD:5C8C1F01
1482
+ body:
1483
+ encoding: UTF-8
1484
+ string: "[]"
1485
+ http_version:
1486
+ recorded_at: Tue, 01 Nov 2016 00:00:00 GMT
1487
+ recorded_with: VCR 4.0.0