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.
- checksums.yaml +4 -4
- data/.github_changelog_generator +0 -1
- data/.rubocop.yml +37 -12
- data/.travis.yml +6 -3
- data/CHANGELOG.md +56 -0
- data/CONTRIBUTING.md +34 -0
- data/Gemfile +8 -4
- data/ISSUES.md +30 -54
- data/README.md +16 -91
- data/Rakefile +3 -31
- data/bin/prerelease-generate-changelog +1 -1
- data/bin/setup +0 -0
- data/build-debug.rb +20 -0
- data/exe/how_is +25 -22
- data/fixtures/vcr_cassettes/how-is-example-empty-repository.yml +334 -1
- data/fixtures/vcr_cassettes/how-is-example-repository.yml +350 -1
- data/fixtures/vcr_cassettes/how-is-from-config-frontmatter.yml +15234 -1
- data/fixtures/vcr_cassettes/how-is-how-is-travis-api-repos-builds.yml +2694 -1
- data/fixtures/vcr_cassettes/how-is-with-config-file.yml +15234 -1
- data/fixtures/vcr_cassettes/how_is_contributions_additions_count.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_all_contributors.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_changed_files.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_changes.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_commits.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_compare_url.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_default_branch.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_deletions_count.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_new_contributors.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_summary.yml +70 -1
- data/fixtures/vcr_cassettes/how_is_contributions_summary_2.yml +70 -1
- data/how_is.gemspec +12 -6
- data/lib/how_is/cacheable.rb +71 -0
- data/lib/how_is/cli.rb +121 -124
- data/lib/how_is/config.rb +123 -0
- data/lib/how_is/constants.rb +9 -0
- data/lib/how_is/date_time_helpers.rb +48 -0
- data/lib/how_is/frontmatter.rb +14 -9
- data/lib/how_is/report.rb +86 -58
- data/lib/how_is/report_collection.rb +113 -0
- data/lib/how_is/sources/ci/appveyor.rb +88 -0
- data/lib/how_is/sources/ci/travis.rb +159 -0
- data/lib/how_is/sources/github/contributions.rb +169 -128
- data/lib/how_is/sources/github/issue_fetcher.rb +148 -0
- data/lib/how_is/sources/github/issues.rb +86 -235
- data/lib/how_is/sources/github/pulls.rb +19 -18
- data/lib/how_is/sources/github.rb +40 -18
- data/lib/how_is/sources/github_helpers.rb +8 -91
- data/lib/how_is/sources.rb +2 -0
- data/lib/how_is/template.rb +9 -0
- data/lib/how_is/templates/contributions_partial.html +1 -0
- data/lib/how_is/templates/{issues_or_pulls_partial.html_template → issues_or_pulls_partial.html} +0 -0
- data/lib/how_is/templates/new_contributors_partial.html +5 -0
- data/lib/how_is/templates/{report.html_template → report.html} +0 -8
- data/lib/how_is/templates/{report_partial.html_template → report_partial.html} +3 -3
- data/lib/how_is/text.rb +26 -0
- data/lib/how_is/version.rb +2 -1
- data/lib/how_is.rb +33 -60
- metadata +28 -47
- data/.hound.yml +0 -2
- data/.rubocop_todo.yml +0 -21
- data/lib/how_is/sources/travis.rb +0 -37
- data/roadmap.markdown +0 -82
data/exe/how_is
CHANGED
@@ -4,40 +4,43 @@
|
|
4
4
|
|
5
5
|
require "how_is"
|
6
6
|
require "how_is/cli"
|
7
|
-
require "
|
7
|
+
require "how_is/config"
|
8
|
+
require "how_is/text"
|
8
9
|
|
9
10
|
begin
|
10
|
-
|
11
|
-
rescue
|
12
|
-
|
13
|
-
|
14
|
-
abort "Error: #{e.message} (See --help for usage.)"
|
11
|
+
cli = HowIs::CLI.parse(ARGV)
|
12
|
+
rescue OptionParser::ParseError => e
|
13
|
+
abort "how_is: error: #{e.message}"
|
15
14
|
end
|
16
15
|
|
17
|
-
options =
|
16
|
+
options = cli.options
|
18
17
|
|
19
|
-
if options[:help]
|
20
|
-
|
21
|
-
exit
|
22
|
-
elsif options[:version]
|
23
|
-
puts HowIs::VERSION
|
24
|
-
exit
|
25
|
-
end
|
18
|
+
abort cli.help_text if options[:help]
|
19
|
+
abort HowIs::VERSION_STRING if options[:version]
|
26
20
|
|
27
21
|
date = options[:date]
|
28
22
|
|
29
23
|
begin
|
30
|
-
|
31
|
-
reports = HowIs.from_config(YAML.load_file(options[:config]), date)
|
24
|
+
config = HowIs::Config.new
|
32
25
|
|
33
|
-
|
34
|
-
|
35
|
-
report = HowIs.new(options[:repository], date)
|
26
|
+
config.load_defaults unless options[:no_user_config]
|
27
|
+
config.load_env if options[:env_config]
|
36
28
|
|
37
|
-
|
29
|
+
if options[:config]
|
30
|
+
config.load_files(options[:config])
|
31
|
+
else
|
32
|
+
config.load(HowIs.default_config(options[:repository]))
|
38
33
|
end
|
34
|
+
|
35
|
+
reports = HowIs.from_config(config, date)
|
36
|
+
|
37
|
+
files = reports.save_all
|
38
|
+
HowIs::Text.puts "Saved reports to:"
|
39
|
+
files.each { |file| HowIs::Text.puts "- #{file}" }
|
39
40
|
rescue => e
|
40
|
-
raise if
|
41
|
+
raise if options[:verbose]
|
41
42
|
|
42
|
-
|
43
|
+
warn "how_is: error: #{e.message} (Pass --verbose for more details.)"
|
44
|
+
warn " at: #{e.backtrace_locations.first}"
|
45
|
+
exit 1
|
43
46
|
end
|
@@ -975342,4 +975342,337 @@ http_interactions:
|
|
975342
975342
|
string: '{"data":null,"errors":[{"message":"API rate limit exceeded","type":"RATE_LIMITED"}]}'
|
975343
975343
|
http_version:
|
975344
975344
|
recorded_at: Sat, 06 Jan 2018 21:50:39 GMT
|
975345
|
-
|
975345
|
+
- request:
|
975346
|
+
method: get
|
975347
|
+
uri: https://api.travis-ci.org/repo/how-is%2Fexample-empty-repository/branches?sort_by=default_branch
|
975348
|
+
body:
|
975349
|
+
encoding: US-ASCII
|
975350
|
+
string: ''
|
975351
|
+
headers:
|
975352
|
+
Accept-Encoding:
|
975353
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
975354
|
+
Accept:
|
975355
|
+
- application/json
|
975356
|
+
User-Agent:
|
975357
|
+
- how_is/24.0.0 (https://github.com/how-is/how_is/)
|
975358
|
+
Host:
|
975359
|
+
- api.travis-ci.org
|
975360
|
+
Travis-Api-Version:
|
975361
|
+
- '3'
|
975362
|
+
response:
|
975363
|
+
status:
|
975364
|
+
code: 200
|
975365
|
+
message: OK
|
975366
|
+
headers:
|
975367
|
+
Connection:
|
975368
|
+
- keep-alive
|
975369
|
+
Server:
|
975370
|
+
- nginx
|
975371
|
+
Date:
|
975372
|
+
- Fri, 30 Mar 2018 22:04:08 GMT
|
975373
|
+
Content-Type:
|
975374
|
+
- application/json
|
975375
|
+
Transfer-Encoding:
|
975376
|
+
- chunked
|
975377
|
+
Access-Control-Allow-Origin:
|
975378
|
+
- "*"
|
975379
|
+
Access-Control-Allow-Credentials:
|
975380
|
+
- 'true'
|
975381
|
+
Access-Control-Expose-Headers:
|
975382
|
+
- Content-Type, Cache-Control, Expires, Etag, Last-Modified, X-Request-ID
|
975383
|
+
Strict-Transport-Security:
|
975384
|
+
- max-age=31536000
|
975385
|
+
X-Endpoint:
|
975386
|
+
- Travis::API::V3::Services::Branches::Find
|
975387
|
+
X-Oauth-Scopes:
|
975388
|
+
- ''
|
975389
|
+
Vary:
|
975390
|
+
- Accept-Encoding
|
975391
|
+
X-Rack-Cache:
|
975392
|
+
- miss
|
975393
|
+
X-Request-Id:
|
975394
|
+
- ac2a4544-e1cd-4335-9ed1-b99c80bf1e3c
|
975395
|
+
Via:
|
975396
|
+
- 1.1 vegur
|
975397
|
+
body:
|
975398
|
+
encoding: ASCII-8BIT
|
975399
|
+
string: |-
|
975400
|
+
{
|
975401
|
+
"@type": "branches",
|
975402
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/branches?sort_by=default_branch",
|
975403
|
+
"@representation": "standard",
|
975404
|
+
"@pagination": {
|
975405
|
+
"limit": 25,
|
975406
|
+
"offset": 0,
|
975407
|
+
"count": 0,
|
975408
|
+
"is_first": true,
|
975409
|
+
"is_last": true,
|
975410
|
+
"next": null,
|
975411
|
+
"prev": null,
|
975412
|
+
"first": {
|
975413
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/branches?sort_by=default_branch",
|
975414
|
+
"offset": 0,
|
975415
|
+
"limit": 25
|
975416
|
+
},
|
975417
|
+
"last": {
|
975418
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/branches?limit=25&offset=-25&sort_by=default_branch",
|
975419
|
+
"offset": -25,
|
975420
|
+
"limit": 25
|
975421
|
+
}
|
975422
|
+
},
|
975423
|
+
"branches": [
|
975424
|
+
|
975425
|
+
]
|
975426
|
+
}
|
975427
|
+
http_version:
|
975428
|
+
recorded_at: Fri, 30 Mar 2018 22:04:08 GMT
|
975429
|
+
- request:
|
975430
|
+
method: get
|
975431
|
+
uri: https://api.travis-ci.org/repo/how-is%2Fexample-empty-repository/builds?branch.name&event_type=push
|
975432
|
+
body:
|
975433
|
+
encoding: US-ASCII
|
975434
|
+
string: ''
|
975435
|
+
headers:
|
975436
|
+
Accept-Encoding:
|
975437
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
975438
|
+
Accept:
|
975439
|
+
- application/json
|
975440
|
+
User-Agent:
|
975441
|
+
- how_is/24.0.0 (https://github.com/how-is/how_is/)
|
975442
|
+
Host:
|
975443
|
+
- api.travis-ci.org
|
975444
|
+
Travis-Api-Version:
|
975445
|
+
- '3'
|
975446
|
+
response:
|
975447
|
+
status:
|
975448
|
+
code: 200
|
975449
|
+
message: OK
|
975450
|
+
headers:
|
975451
|
+
Connection:
|
975452
|
+
- keep-alive
|
975453
|
+
Server:
|
975454
|
+
- nginx
|
975455
|
+
Date:
|
975456
|
+
- Sat, 31 Mar 2018 00:06:57 GMT
|
975457
|
+
Content-Type:
|
975458
|
+
- application/json
|
975459
|
+
Transfer-Encoding:
|
975460
|
+
- chunked
|
975461
|
+
Access-Control-Allow-Origin:
|
975462
|
+
- "*"
|
975463
|
+
Access-Control-Allow-Credentials:
|
975464
|
+
- 'true'
|
975465
|
+
Access-Control-Expose-Headers:
|
975466
|
+
- Content-Type, Cache-Control, Expires, Etag, Last-Modified, X-Request-ID
|
975467
|
+
Strict-Transport-Security:
|
975468
|
+
- max-age=31536000
|
975469
|
+
X-Endpoint:
|
975470
|
+
- Travis::API::V3::Services::Builds::Find
|
975471
|
+
X-Oauth-Scopes:
|
975472
|
+
- ''
|
975473
|
+
Vary:
|
975474
|
+
- Accept-Encoding
|
975475
|
+
X-Rack-Cache:
|
975476
|
+
- miss
|
975477
|
+
X-Request-Id:
|
975478
|
+
- 64807ed2-3986-4b7f-92f7-7e0fa4c29a05
|
975479
|
+
Via:
|
975480
|
+
- 1.1 vegur
|
975481
|
+
body:
|
975482
|
+
encoding: ASCII-8BIT
|
975483
|
+
string: |-
|
975484
|
+
{
|
975485
|
+
"@type": "builds",
|
975486
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/builds?event_type=push&branch.name",
|
975487
|
+
"@representation": "standard",
|
975488
|
+
"@pagination": {
|
975489
|
+
"limit": 25,
|
975490
|
+
"offset": 0,
|
975491
|
+
"count": 0,
|
975492
|
+
"is_first": true,
|
975493
|
+
"is_last": true,
|
975494
|
+
"next": null,
|
975495
|
+
"prev": null,
|
975496
|
+
"first": {
|
975497
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/builds?event_type=push&branch.name",
|
975498
|
+
"offset": 0,
|
975499
|
+
"limit": 25
|
975500
|
+
},
|
975501
|
+
"last": {
|
975502
|
+
"@href": "/repo/how-is%2Fexample-empty-repository/builds?branch.name&event_type=push&limit=25&offset=-25",
|
975503
|
+
"offset": -25,
|
975504
|
+
"limit": 25
|
975505
|
+
}
|
975506
|
+
},
|
975507
|
+
"builds": [
|
975508
|
+
|
975509
|
+
]
|
975510
|
+
}
|
975511
|
+
http_version:
|
975512
|
+
recorded_at: Sat, 31 Mar 2018 00:06:57 GMT
|
975513
|
+
- request:
|
975514
|
+
method: get
|
975515
|
+
uri: https://ci.appveyor.com/api/projects/how-is/example-empty-repository
|
975516
|
+
body:
|
975517
|
+
encoding: US-ASCII
|
975518
|
+
string: ''
|
975519
|
+
headers:
|
975520
|
+
Accept-Encoding:
|
975521
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
975522
|
+
Accept:
|
975523
|
+
- application/json
|
975524
|
+
User-Agent:
|
975525
|
+
- how_is/24.0.0 (https://github.com/how-is/how_is/)
|
975526
|
+
Host:
|
975527
|
+
- ci.appveyor.com
|
975528
|
+
response:
|
975529
|
+
status:
|
975530
|
+
code: 404
|
975531
|
+
message: Not Found
|
975532
|
+
headers:
|
975533
|
+
Cache-Control:
|
975534
|
+
- no-cache
|
975535
|
+
Pragma:
|
975536
|
+
- no-cache
|
975537
|
+
Content-Type:
|
975538
|
+
- application/json; charset=utf-8
|
975539
|
+
Expires:
|
975540
|
+
- "-1"
|
975541
|
+
X-Xss-Protection:
|
975542
|
+
- 1; mode=block
|
975543
|
+
X-Frame-Options:
|
975544
|
+
- SAMEORIGIN
|
975545
|
+
Strict-Transport-Security:
|
975546
|
+
- max-age=31536000
|
975547
|
+
X-Content-Type-Options:
|
975548
|
+
- nosniff
|
975549
|
+
Date:
|
975550
|
+
- Sat, 31 Mar 2018 00:07:00 GMT
|
975551
|
+
Content-Length:
|
975552
|
+
- '49'
|
975553
|
+
body:
|
975554
|
+
encoding: UTF-8
|
975555
|
+
string: '{"message":"Project not found or access denied."}'
|
975556
|
+
http_version:
|
975557
|
+
recorded_at: Sat, 31 Mar 2018 00:07:00 GMT
|
975558
|
+
- request:
|
975559
|
+
method: get
|
975560
|
+
uri: https://ci.appveyor.com/api/projects/how-is/example-empty-repository/history?recordsNumber=100
|
975561
|
+
body:
|
975562
|
+
encoding: US-ASCII
|
975563
|
+
string: ''
|
975564
|
+
headers:
|
975565
|
+
Accept-Encoding:
|
975566
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
975567
|
+
Accept:
|
975568
|
+
- application/json
|
975569
|
+
User-Agent:
|
975570
|
+
- how_is/24.0.0 (https://github.com/how-is/how_is/)
|
975571
|
+
Host:
|
975572
|
+
- ci.appveyor.com
|
975573
|
+
response:
|
975574
|
+
status:
|
975575
|
+
code: 404
|
975576
|
+
message: Not Found
|
975577
|
+
headers:
|
975578
|
+
Cache-Control:
|
975579
|
+
- no-cache
|
975580
|
+
Pragma:
|
975581
|
+
- no-cache
|
975582
|
+
Content-Type:
|
975583
|
+
- application/json; charset=utf-8
|
975584
|
+
Expires:
|
975585
|
+
- "-1"
|
975586
|
+
X-Xss-Protection:
|
975587
|
+
- 1; mode=block
|
975588
|
+
X-Frame-Options:
|
975589
|
+
- SAMEORIGIN
|
975590
|
+
Strict-Transport-Security:
|
975591
|
+
- max-age=31536000
|
975592
|
+
X-Content-Type-Options:
|
975593
|
+
- nosniff
|
975594
|
+
Date:
|
975595
|
+
- Fri, 25 May 2018 15:55:29 GMT
|
975596
|
+
Content-Length:
|
975597
|
+
- '49'
|
975598
|
+
body:
|
975599
|
+
encoding: UTF-8
|
975600
|
+
string: '{"message":"Project not found or access denied."}'
|
975601
|
+
http_version:
|
975602
|
+
recorded_at: Fri, 25 May 2018 15:55:30 GMT
|
975603
|
+
- request:
|
975604
|
+
method: get
|
975605
|
+
uri: https://api.github.com/repos/how-is/example-empty-repository/commits?author=me@duckie.co&until=2016-12-01
|
975606
|
+
body:
|
975607
|
+
encoding: US-ASCII
|
975608
|
+
string: ''
|
975609
|
+
headers:
|
975610
|
+
Accept:
|
975611
|
+
- application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1
|
975612
|
+
Accept-Charset:
|
975613
|
+
- utf-8
|
975614
|
+
User-Agent:
|
975615
|
+
- Github API Ruby Gem 0.18.2
|
975616
|
+
Authorization:
|
975617
|
+
- Basic ZHVja2luYXRvcjo5MTgyNzc3ZmYzYzAwNjc5NTE5M2E1NzBjZGFjMzI2YjY0NDU5ZGM5
|
975618
|
+
Accept-Encoding:
|
975619
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
975620
|
+
response:
|
975621
|
+
status:
|
975622
|
+
code: 200
|
975623
|
+
message: OK
|
975624
|
+
headers:
|
975625
|
+
Server:
|
975626
|
+
- GitHub.com
|
975627
|
+
Date:
|
975628
|
+
- Fri, 15 Mar 2019 21:54:15 GMT
|
975629
|
+
Content-Type:
|
975630
|
+
- application/json; charset=utf-8
|
975631
|
+
Content-Length:
|
975632
|
+
- '2'
|
975633
|
+
Status:
|
975634
|
+
- 200 OK
|
975635
|
+
X-Ratelimit-Limit:
|
975636
|
+
- '5000'
|
975637
|
+
X-Ratelimit-Remaining:
|
975638
|
+
- '4300'
|
975639
|
+
X-Ratelimit-Reset:
|
975640
|
+
- '1552689075'
|
975641
|
+
Cache-Control:
|
975642
|
+
- private, max-age=60, s-maxage=60
|
975643
|
+
Vary:
|
975644
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
975645
|
+
Etag:
|
975646
|
+
- '"74b5718094ce8869d8149d99338cb4f8"'
|
975647
|
+
X-Oauth-Scopes:
|
975648
|
+
- ''
|
975649
|
+
X-Accepted-Oauth-Scopes:
|
975650
|
+
- ''
|
975651
|
+
X-Github-Media-Type:
|
975652
|
+
- github.v3; format=json
|
975653
|
+
Access-Control-Expose-Headers:
|
975654
|
+
- ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining,
|
975655
|
+
X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval,
|
975656
|
+
X-GitHub-Media-Type
|
975657
|
+
Access-Control-Allow-Origin:
|
975658
|
+
- "*"
|
975659
|
+
Strict-Transport-Security:
|
975660
|
+
- max-age=31536000; includeSubdomains; preload
|
975661
|
+
X-Frame-Options:
|
975662
|
+
- deny
|
975663
|
+
X-Content-Type-Options:
|
975664
|
+
- nosniff
|
975665
|
+
X-Xss-Protection:
|
975666
|
+
- 1; mode=block
|
975667
|
+
Referrer-Policy:
|
975668
|
+
- origin-when-cross-origin, strict-origin-when-cross-origin
|
975669
|
+
Content-Security-Policy:
|
975670
|
+
- default-src 'none'
|
975671
|
+
X-Github-Request-Id:
|
975672
|
+
- '0481:36F9:CA51E9:1C279AE:5C8C1F07'
|
975673
|
+
body:
|
975674
|
+
encoding: UTF-8
|
975675
|
+
string: "[]"
|
975676
|
+
http_version:
|
975677
|
+
recorded_at: Fri, 15 Mar 2019 21:54:15 GMT
|
975678
|
+
recorded_with: VCR 4.0.0
|