how_is 24.0.0 → 25.0.0

Sign up to get free protection for your applications and to get access to all the features.
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