how_is 18.1.0 → 19.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12f40c2d14b7dbee11526ad2f15bd79ad3a40098
4
- data.tar.gz: 2a6af70ce9d9b881c4ad31fde73b9c7558e78023
3
+ metadata.gz: 179757abf82f4dd4e9b214d5f128c5ebd81d0ff0
4
+ data.tar.gz: d252caf2ae299e2a88c6491e228e06589561e404
5
5
  SHA512:
6
- metadata.gz: ba87d6976df416f2be30c93023ef7082c7d815a8cd90a475dcca11041b296c263d547b3176c4ef57700ad19defef13c7377cadc2e18079e5a92cdd91ce0d57b7
7
- data.tar.gz: 1b699cce4a95ed0bc1bbd946b8728c53c85393bf069ecdb7099955d8662cc97812b7d2704636e6f3a171d7b6f0cba4fdf24d33097beaa068247fd8b6c1d44096
6
+ metadata.gz: 4ff22d8943d1b5f051bec0ce43901cacf39848aa0331b534390f9d9ffd033bb1134bc419ec1729257ce094a0fbe6a032d52a76cb0981460edf2ec33dbf4fb766
7
+ data.tar.gz: e09adb9c29bb218b750cdda73c0fd8f3f01439ebfa0dbfe8bdc8f6caee7ad32064fd4dc1f1d1fe47e64cb1b741443c229ee9a2d049ceef55f126b7176a3fa7fb
data/.codeclimate.yml ADDED
@@ -0,0 +1,22 @@
1
+ ---
2
+ engines:
3
+ bundler-audit:
4
+ enabled: false
5
+ duplication:
6
+ enabled: true
7
+ config:
8
+ languages:
9
+ - ruby
10
+ fixme:
11
+ enabled: true
12
+ rubocop:
13
+ enabled: true
14
+ channel: rubocop-0-49
15
+ ratings:
16
+ paths:
17
+ - Gemfile.lock
18
+ - "**.rb"
19
+ exclude_paths:
20
+ - spec/
21
+ - ".bundle/"
22
+ - vendor/
data/CHANGELOG.md CHANGED
@@ -1,10 +1,33 @@
1
1
  # Change Log
2
2
 
3
+ ## [19.0.0](https://github.com/how-is/how_is/tree/19.0.0) (2017-09-15)
4
+ [Full Changelog](https://github.com/how-is/how_is/compare/v18.1.0...19.0.0)
5
+
6
+ **Closed issues:**
7
+
8
+ - move away from slop bc of conflicts [\#202](https://github.com/how-is/how_is/issues/202)
9
+ - Contributions: look up default\_branch in GitHub API [\#195](https://github.com/how-is/how_is/issues/195)
10
+ - Only enable VCR when used [\#185](https://github.com/how-is/how_is/issues/185)
11
+
12
+ **Merged pull requests:**
13
+
14
+ - Move away from slop [\#205](https://github.com/how-is/how_is/pull/205) ([duckinator](https://github.com/duckinator))
15
+ - add .codeclimate.yml [\#204](https://github.com/how-is/how_is/pull/204) ([duckinator](https://github.com/duckinator))
16
+ - quick refactor of spec/capture\_warnings. [\#203](https://github.com/how-is/how_is/pull/203) ([duckinator](https://github.com/duckinator))
17
+ - \[docs\] YARD annotation for example [\#201](https://github.com/how-is/how_is/pull/201) ([olleolleolle](https://github.com/olleolleolle))
18
+ - Refactor: introduce pretty\_date\(date\) [\#199](https://github.com/how-is/how_is/pull/199) ([olleolleolle](https://github.com/olleolleolle))
19
+ - update VCR fixture [\#197](https://github.com/how-is/how_is/pull/197) ([duckinator](https://github.com/duckinator))
20
+ - Contributions: default\_branch fetching [\#196](https://github.com/how-is/how_is/pull/196) ([olleolleolle](https://github.com/olleolleolle))
21
+ - update tessellator-fetcher to ~\>5.0.2 [\#193](https://github.com/how-is/how_is/pull/193) ([duckinator](https://github.com/duckinator))
22
+ - Builds: a Travis CI API fetcher [\#192](https://github.com/how-is/how_is/pull/192) ([olleolleolle](https://github.com/olleolleolle))
23
+ - Contributions: YARD docblock type typo; typos [\#191](https://github.com/how-is/how_is/pull/191) ([olleolleolle](https://github.com/olleolleolle))
24
+
3
25
  ## [v18.1.0](https://github.com/how-is/how_is/tree/v18.1.0) (2017-08-06)
4
26
  [Full Changelog](https://github.com/how-is/how_is/compare/v18.0.5...v18.1.0)
5
27
 
6
28
  **Merged pull requests:**
7
29
 
30
+ - bump version -- 18.1.0 [\#190](https://github.com/how-is/how_is/pull/190) ([duckinator](https://github.com/duckinator))
8
31
  - Replace Pulse scraping with API calls [\#187](https://github.com/how-is/how_is/pull/187) ([duckinator](https://github.com/duckinator))
9
32
 
10
33
  ## [v18.0.5](https://github.com/how-is/how_is/tree/v18.0.5) (2017-08-06)
data/Rakefile CHANGED
@@ -87,3 +87,14 @@ task :new_contributors, [:user, :repo, :start_date] => [] do |_t, args|
87
87
  puts contributions.summary
88
88
  puts contributions.new_contributors
89
89
  end
90
+
91
+ desc "Display duration of latest CI build. CI builds supported include Travis."
92
+ task :test_execution_time, [:user, :repo] => [] do |_t, args|
93
+ require "how_is/builds"
94
+ user = args[:user] || "how-is"
95
+ repo = args[:repo] || "how_is"
96
+ builds = HowIs::Builds.new(user: user, repo: repo)
97
+
98
+ puts "Test execution information:"
99
+ puts builds.summary
100
+ end
@@ -0,0 +1,165 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.travis-ci.org/repos/how-is/how_is/builds?event_type=push
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - application/vnd.travis-ci.2+json
14
+ User-Agent:
15
+ - TessellatorFetcher/v5.0.1
16
+ Host:
17
+ - api.travis-ci.org
18
+ response:
19
+ status:
20
+ code: 301
21
+ message: Moved Permanently
22
+ headers:
23
+ Connection:
24
+ - keep-alive
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Sun, 06 Aug 2017 19:19:39 GMT
29
+ Content-Type:
30
+ - text/html
31
+ Content-Length:
32
+ - '0'
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ Access-Control-Allow-Credentials:
36
+ - 'true'
37
+ Access-Control-Expose-Headers:
38
+ - Content-Type, Cache-Control, Expires, Etag, Last-Modified
39
+ Location:
40
+ - https://api.travis-ci.org/repos/how-is/how_is/builds?event_type=push
41
+ X-Request-Id:
42
+ - 10b0ed57-ec0e-48c2-ba64-6d89e18d6ca1
43
+ Via:
44
+ - 1.1 vegur
45
+ body:
46
+ encoding: UTF-8
47
+ string: ''
48
+ http_version:
49
+ recorded_at: Sun, 06 Aug 2017 19:19:39 GMT
50
+ - request:
51
+ method: get
52
+ uri: https://api.travis-ci.org/repos/how-is/how_is/builds?event_type=push
53
+ body:
54
+ encoding: US-ASCII
55
+ string: ''
56
+ headers:
57
+ Accept-Encoding:
58
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
59
+ Accept:
60
+ - application/vnd.travis-ci.2+json
61
+ User-Agent:
62
+ - TessellatorFetcher/v5.0.1
63
+ Host:
64
+ - api.travis-ci.org
65
+ response:
66
+ status:
67
+ code: 200
68
+ message: OK
69
+ headers:
70
+ Connection:
71
+ - keep-alive
72
+ Server:
73
+ - nginx
74
+ Date:
75
+ - Sun, 06 Aug 2017 19:20:42 GMT
76
+ Content-Type:
77
+ - application/json;charset=utf-8
78
+ Transfer-Encoding:
79
+ - chunked
80
+ Access-Control-Allow-Origin:
81
+ - "*"
82
+ Access-Control-Allow-Credentials:
83
+ - 'true'
84
+ Access-Control-Expose-Headers:
85
+ - Content-Type, Cache-Control, Expires, Etag, Last-Modified
86
+ Strict-Transport-Security:
87
+ - max-age=31536000
88
+ X-Endpoint:
89
+ - Travis::Api::App::Endpoint::Repos
90
+ X-Pattern:
91
+ - "/:owner_name/:name/builds"
92
+ X-Oauth-Scopes:
93
+ - public
94
+ X-Accepted-Oauth-Scopes:
95
+ - public
96
+ Vary:
97
+ - Accept,Accept-Encoding
98
+ Cache-Control:
99
+ - no-cache
100
+ X-Rack-Cache:
101
+ - miss
102
+ X-Request-Id:
103
+ - ccc7b2b7-9214-42eb-8203-ab4b1783d7ff
104
+ Via:
105
+ - 1.1 vegur
106
+ body:
107
+ encoding: ASCII-8BIT
108
+ string: '{"builds":[{"id":261544542,"repository_id":8014235,"commit_id":76060199,"number":"594","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:56:07Z","finished_at":"2017-08-06T14:57:18Z","duration":137,"job_ids":[261544543,261544544]},{"id":261544463,"repository_id":8014235,"commit_id":76060169,"number":"593","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:55:34Z","finished_at":"2017-08-06T14:56:46Z","duration":138,"job_ids":[261544464,261544465]},{"id":261543823,"repository_id":8014235,"commit_id":76059955,"number":"591","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:51:49Z","finished_at":"2017-08-06T14:53:57Z","duration":203,"job_ids":[261543824,261543825]},{"id":261542619,"repository_id":8014235,"commit_id":76059595,"number":"590","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:45:38Z","finished_at":"2017-08-06T14:47:27Z","duration":181,"job_ids":[261542620,261542621]},{"id":261541975,"repository_id":8014235,"commit_id":76059412,"number":"588","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:42:39Z","finished_at":"2017-08-06T14:45:18Z","duration":220,"job_ids":[261541976,261541977]},{"id":261541831,"repository_id":8014235,"commit_id":76059360,"number":"586","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T14:41:33Z","finished_at":"2017-08-06T14:42:58Z","duration":157,"job_ids":[261541832,261541833]},{"id":261540169,"repository_id":8014235,"commit_id":76058893,"number":"584","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"failed","started_at":"2017-08-06T14:34:55Z","finished_at":"2017-08-06T14:37:05Z","duration":247,"job_ids":[261540170,261540171]},{"id":261539470,"repository_id":8014235,"commit_id":76058657,"number":"583","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"failed","started_at":"2017-08-06T14:30:55Z","finished_at":"2017-08-06T14:32:10Z","duration":143,"job_ids":[261539471,261539472]},{"id":261538934,"repository_id":8014235,"commit_id":76058517,"number":"580","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"failed","started_at":"2017-08-06T14:28:24Z","finished_at":"2017-08-06T14:29:47Z","duration":160,"job_ids":[261538935,261538936]},{"id":261538363,"repository_id":8014235,"commit_id":76058330,"number":"578","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"failed","started_at":"2017-08-06T14:24:52Z","finished_at":"2017-08-06T14:27:08Z","duration":203,"job_ids":[261538364,261538365]},{"id":261525512,"repository_id":8014235,"commit_id":76054257,"number":"576","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T13:14:14Z","finished_at":"2017-08-06T13:16:27Z","duration":259,"job_ids":[261525513,261525514]},{"id":261517523,"repository_id":8014235,"commit_id":76051565,"number":"575","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T12:25:48Z","finished_at":"2017-08-06T12:27:03Z","duration":144,"job_ids":[261517524,261517525]},{"id":261517503,"repository_id":8014235,"commit_id":76051555,"number":"574","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T12:25:32Z","finished_at":"2017-08-06T12:27:20Z","duration":178,"job_ids":[261517504,261517505]},{"id":261514987,"repository_id":8014235,"commit_id":76050771,"number":"571","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T12:10:31Z","finished_at":"2017-08-06T12:12:16Z","duration":188,"job_ids":[261514988,261514989]},{"id":261513254,"repository_id":8014235,"commit_id":76050220,"number":"570","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T12:00:41Z","finished_at":"2017-08-06T12:04:12Z","duration":269,"job_ids":[261513255,261513256]},{"id":261482578,"repository_id":8014235,"commit_id":76039974,"number":"569","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T08:40:46Z","finished_at":"2017-08-06T08:42:30Z","duration":143,"job_ids":[261482579,261482580]},{"id":261457931,"repository_id":8014235,"commit_id":76032205,"number":"567","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-06T05:25:31Z","finished_at":"2017-08-06T05:26:36Z","duration":127,"job_ids":[261457932,261457933]},{"id":261399424,"repository_id":8014235,"commit_id":76015649,"number":"566","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-08-05T21:22:52Z","finished_at":"2017-08-05T21:24:24Z","duration":163,"job_ids":[261399425,261399426]},{"id":257049384,"repository_id":8014235,"commit_id":74727936,"number":"551","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-24T20:29:15Z","finished_at":"2017-07-24T20:30:24Z","duration":133,"job_ids":[257049385,257049386]},{"id":257047944,"repository_id":8014235,"commit_id":74727483,"number":"549","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-24T20:25:37Z","finished_at":"2017-07-24T20:27:42Z","duration":189,"job_ids":[257047946,257047948]},{"id":257044081,"repository_id":8014235,"commit_id":74726378,"number":"548","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-24T20:15:30Z","finished_at":"2017-07-24T20:17:19Z","duration":208,"job_ids":[257044082,257044083]},{"id":254221687,"repository_id":8014235,"commit_id":73884312,"number":"544","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-16T19:43:21Z","finished_at":"2017-07-16T19:45:15Z","duration":164,"job_ids":[254221688,254221689]},{"id":254221003,"repository_id":8014235,"commit_id":73884104,"number":"542","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-16T19:40:11Z","finished_at":"2017-07-16T19:42:04Z","duration":224,"job_ids":[254221004,254221005]},{"id":254178194,"repository_id":8014235,"commit_id":73871523,"number":"532","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-16T16:24:08Z","finished_at":"2017-07-16T16:25:44Z","duration":161,"job_ids":[254178195,254178196]},{"id":254177271,"repository_id":8014235,"commit_id":73871232,"number":"529","event_type":"push","pull_request":false,"pull_request_title":null,"pull_request_number":null,"config":{"language":"ruby","rvm":["2.3.3","2.4.1"],".result":"configured","group":"stable","dist":"precise"},"state":"passed","started_at":"2017-07-16T16:19:33Z","finished_at":"2017-07-16T16:21:34Z","duration":218,"job_ids":[254177272,254177273]}],"commits":[{"id":76060199,"sha":"5d148159a2d5e64f817cc0a844f5be8cd3b586ff","branch":"v18.1.0","message":"Merge
109
+ pull request #190 from how-is/new-release\n\nbump version -- 18.1.0","committed_at":null,"author_name":"Ellen
110
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/v18.1.0","pull_request_number":null},{"id":76060169,"sha":"5d148159a2d5e64f817cc0a844f5be8cd3b586ff","branch":"master","message":"Merge
111
+ pull request #190 from how-is/new-release\n\nbump version -- 18.1.0","committed_at":"2017-08-06T14:55:30Z","author_name":"Ellen
112
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/591a16aa48ec...5d148159a2d5","pull_request_number":null},{"id":76059955,"sha":"407f8d59d932ffa868cedf9a745bcaa767db38af","branch":"new-release","message":"bump
113
+ version -- 18.1.0","committed_at":"2017-08-06T14:51:36Z","author_name":"Ellen
114
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/407f8d59d932","pull_request_number":null},{"id":76059595,"sha":"591a16aa48ec4000b40391d0c0970722c576d7f1","branch":"master","message":"Merge
115
+ pull request #187 from how-is/replace-pulse-with-api-calls\n\n[WIP] Replace
116
+ Pulse scraping with API calls","committed_at":"2017-08-06T14:45:31Z","author_name":"Ellen
117
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/25d9cafea1ba...591a16aa48ec","pull_request_number":null},{"id":76059412,"sha":"9869738c7a0f591212f2f0e1f1fb4a3897b57c3d","branch":"replace-pulse-with-api-calls","message":"follow
118
+ rubocop style guide","committed_at":"2017-08-06T14:42:04Z","author_name":"Ellen
119
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/3e4b53fa3a99...9869738c7a0f","pull_request_number":null},{"id":76059360,"sha":"3e4b53fa3a993fa2b13143ec037d7d8b1455e6c5","branch":"replace-pulse-with-api-calls","message":"fix
120
+ warning","committed_at":"2017-08-06T14:41:10Z","author_name":"Ellen Marie
121
+ Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/8a7efd57b650...3e4b53fa3a99","pull_request_number":null},{"id":76058893,"sha":"8a7efd57b650065685bd43faccb9ce8d2b5e68e4","branch":"replace-pulse-with-api-calls","message":"remove
122
+ unneccessary comment","committed_at":"2017-08-06T14:34:48Z","author_name":"Ellen
123
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/6ac661226c15...8a7efd57b650","pull_request_number":null},{"id":76058657,"sha":"6ac661226c159260056c619fd582188a676c0a63","branch":"replace-pulse-with-api-calls","message":"misc
124
+ cleanup","committed_at":"2017-08-06T14:29:31Z","author_name":"Ellen Marie
125
+ Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/ae42b759f810...6ac661226c15","pull_request_number":null},{"id":76058517,"sha":"ae42b759f810af9db4fe02fb90a61273865af569","branch":"replace-pulse-with-api-calls","message":"^.^","committed_at":"2017-08-06T14:28:18Z","author_name":"Ellen
126
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/e73594a7477e...ae42b759f810","pull_request_number":null},{"id":76058330,"sha":"e73594a7477e27662b27f5cc1d4e632c704a9993","branch":"replace-pulse-with-api-calls","message":"WOOOOOOOOO","committed_at":"2017-08-06T14:24:44Z","author_name":"Ellen
127
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/d714b771a1fd...e73594a7477e","pull_request_number":null},{"id":76054257,"sha":"d714b771a1fde5a5e615f3b1e15c4fb7038fbb00","branch":"replace-pulse-with-api-calls","message":"fix
128
+ Rakefile, handle authentication.","committed_at":"2017-08-06T13:13:03Z","author_name":"Ellen
129
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/compare/8074b4861928...d714b771a1fd","pull_request_number":null},{"id":76051565,"sha":"25d9cafea1ba25f114f6bcaabb18974fd745a4d3","branch":"v18.0.5","message":"Merge
130
+ pull request #188 from how-is/new-release\n\nversion bump -- v18.0.5","committed_at":null,"author_name":"Ellen
131
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/v18.0.5","pull_request_number":null},{"id":76051555,"sha":"25d9cafea1ba25f114f6bcaabb18974fd745a4d3","branch":"master","message":"Merge
132
+ pull request #188 from how-is/new-release\n\nversion bump -- v18.0.5","committed_at":"2017-08-06T12:25:28Z","author_name":"Ellen
133
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/406d29d0d78e...25d9cafea1ba","pull_request_number":null},{"id":76050771,"sha":"54ddc4564208b271764c64019d521b23f0350e43","branch":"new-release","message":"version
134
+ bump -- v18.0.5","committed_at":"2017-08-06T12:10:22Z","author_name":"Ellen
135
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/54ddc4564208","pull_request_number":null},{"id":76050220,"sha":"8074b48619283f9dc124401bf5b336e78bc15eb4","branch":"replace-pulse-with-api-calls","message":"beginning
136
+ of work on replacing Pulse","committed_at":"2017-08-06T12:00:29Z","author_name":"Ellen
137
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/8074b4861928","pull_request_number":null},{"id":76039974,"sha":"406d29d0d78e3e8bf930c18ee779aca3c70f462c","branch":"master","message":"Merge
138
+ pull request #186 from how-is/ignore-gemfile-lock\n\nre-add Gemfile.lock to
139
+ .gitignore","committed_at":"2017-08-06T08:40:37Z","author_name":"Ellen Marie
140
+ Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/7ab3658ef795...406d29d0d78e","pull_request_number":null},{"id":76032205,"sha":"8b676f7d2d501385c4e533cb428d800e90c8fa85","branch":"ignore-gemfile-lock","message":"re-add
141
+ Gemfile.lock to .gitignore","committed_at":"2017-08-06T05:25:18Z","author_name":"Ellen
142
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/8b676f7d2d50","pull_request_number":null},{"id":76015649,"sha":"7ab3658ef795581837d5a2a38f830566cd3d1901","branch":"master","message":"Merge
143
+ pull request #184 from olleolleolle/feature/track-new-contributors\n\nList
144
+ new contributors during period","committed_at":"2017-08-05T21:22:47Z","author_name":"Ellen
145
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/6baf9704252e...7ab3658ef795","pull_request_number":null},{"id":74727936,"sha":"6baf9704252e08989c6119f0d9b5fd931bf7a1e2","branch":"master","message":"Merge
146
+ pull request #183 from how-is/remove-gemfile-lock\n\nRemove Gemfile.lock.","committed_at":"2017-07-24T20:29:09Z","author_name":"Ellen
147
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/d22d6fa70b0d...6baf9704252e","pull_request_number":null},{"id":74727483,"sha":"2549a25b5a2eea47623c31c2101fc2d7c57119e5","branch":"remove-gemfile-lock","message":"Remove
148
+ Gemfile.lock.\n\nSee: http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/","committed_at":"2017-07-24T20:23:53Z","author_name":"Ellen
149
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/2549a25b5a2e","pull_request_number":null},{"id":74726378,"sha":"d22d6fa70b0d952cf16c538498752659b97bfa3c","branch":"master","message":"Merge
150
+ pull request #182 from olleolleolle/fix/pr-180-replacement\n\nGemfile: add
151
+ pry as Git dep","committed_at":"2017-07-24T20:15:24Z","author_name":"Ellen
152
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/7402d28c9a5c...d22d6fa70b0d","pull_request_number":null},{"id":73884312,"sha":"7402d28c9a5c99d00d6d7d7864ddde0d1ed839f4","branch":"master","message":"Merge
153
+ pull request #179 from olleolleolle/fix/params-file-for-github_changelog_generator\n\nAdd
154
+ config file for github_changelog_generator","committed_at":"2017-07-16T19:43:14Z","author_name":"Ellen
155
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/d2311beacc83...7402d28c9a5c","pull_request_number":null},{"id":73884104,"sha":"d2311beacc8380e7f7c3ca37180ba5deb7ed9181","branch":"master","message":"Merge
156
+ pull request #178 from olleolleolle/fix/rubocop-warnings\n\nRuboCop linting","committed_at":"2017-07-16T19:40:05Z","author_name":"Ellen
157
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/50a9b616043f...d2311beacc83","pull_request_number":null},{"id":73871523,"sha":"50a9b616043fdadfcb262d68c5be32bb5f350c5d","branch":"master","message":"Merge
158
+ pull request #177 from how-is/changelog-stuff\n\nUse github_changelog_generator
159
+ for generating the changelog.","committed_at":"2017-07-16T16:23:56Z","author_name":"Ellen
160
+ Marie Dash","author_email":"the@smallest.dog","committer_name":"GitHub","committer_email":"noreply@github.com","compare_url":"https://github.com/how-is/how_is/compare/b4a24011f4c9...50a9b616043f","pull_request_number":null},{"id":73871232,"sha":"27b252d3625d198ded7dee32a86387a8ec613588","branch":"changelog-stuff","message":"Use
161
+ github_changelog_generator for generating the changelog!","committed_at":"2017-07-16T16:19:20Z","author_name":"Ellen
162
+ Marie Dash","author_email":"me@duckie.co","committer_name":"Ellen Marie Dash","committer_email":"me@duckie.co","compare_url":"https://github.com/how-is/how_is/commit/27b252d3625d","pull_request_number":null}]}'
163
+ http_version:
164
+ recorded_at: Sun, 06 Aug 2017 19:20:42 GMT
165
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,151 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.github.com/repos/how-is/how_is
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - Github API Ruby Gem 0.17.0
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - GitHub.com
25
+ Date:
26
+ - Thu, 10 Aug 2017 20:59:50 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Status:
32
+ - 200 OK
33
+ X-Ratelimit-Limit:
34
+ - '60'
35
+ X-Ratelimit-Remaining:
36
+ - '59'
37
+ X-Ratelimit-Reset:
38
+ - '1502402390'
39
+ Cache-Control:
40
+ - public, max-age=60, s-maxage=60
41
+ Vary:
42
+ - Accept
43
+ Etag:
44
+ - W/"5a8e2fe83bdc6bf80131eb88c2cc2ddb"
45
+ Last-Modified:
46
+ - Thu, 15 Jun 2017 21:46:29 GMT
47
+ X-Github-Media-Type:
48
+ - github.v3; format=json
49
+ Access-Control-Expose-Headers:
50
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
51
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
52
+ Access-Control-Allow-Origin:
53
+ - "*"
54
+ Content-Security-Policy:
55
+ - default-src 'none'
56
+ Strict-Transport-Security:
57
+ - max-age=31536000; includeSubdomains; preload
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ X-Frame-Options:
61
+ - deny
62
+ X-Xss-Protection:
63
+ - 1; mode=block
64
+ X-Runtime-Rack:
65
+ - '0.028766'
66
+ X-Github-Request-Id:
67
+ - CB49:5C59:4C6E84:A743C3:598CC946
68
+ body:
69
+ encoding: ASCII-8BIT
70
+ string: '{"id":54295243,"name":"how_is","full_name":"how-is/how_is","owner":{"login":"how-is","id":20577802,"avatar_url":"https://avatars0.githubusercontent.com/u/20577802?v=4","gravatar_id":"","url":"https://api.github.com/users/how-is","html_url":"https://github.com/how-is","followers_url":"https://api.github.com/users/how-is/followers","following_url":"https://api.github.com/users/how-is/following{/other_user}","gists_url":"https://api.github.com/users/how-is/gists{/gist_id}","starred_url":"https://api.github.com/users/how-is/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/how-is/subscriptions","organizations_url":"https://api.github.com/users/how-is/orgs","repos_url":"https://api.github.com/users/how-is/repos","events_url":"https://api.github.com/users/how-is/events{/privacy}","received_events_url":"https://api.github.com/users/how-is/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/how-is/how_is","description":"A
71
+ gem that explains the state of a GitHub repository.","fork":false,"url":"https://api.github.com/repos/how-is/how_is","forks_url":"https://api.github.com/repos/how-is/how_is/forks","keys_url":"https://api.github.com/repos/how-is/how_is/keys{/key_id}","collaborators_url":"https://api.github.com/repos/how-is/how_is/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/how-is/how_is/teams","hooks_url":"https://api.github.com/repos/how-is/how_is/hooks","issue_events_url":"https://api.github.com/repos/how-is/how_is/issues/events{/number}","events_url":"https://api.github.com/repos/how-is/how_is/events","assignees_url":"https://api.github.com/repos/how-is/how_is/assignees{/user}","branches_url":"https://api.github.com/repos/how-is/how_is/branches{/branch}","tags_url":"https://api.github.com/repos/how-is/how_is/tags","blobs_url":"https://api.github.com/repos/how-is/how_is/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/how-is/how_is/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/how-is/how_is/git/refs{/sha}","trees_url":"https://api.github.com/repos/how-is/how_is/git/trees{/sha}","statuses_url":"https://api.github.com/repos/how-is/how_is/statuses/{sha}","languages_url":"https://api.github.com/repos/how-is/how_is/languages","stargazers_url":"https://api.github.com/repos/how-is/how_is/stargazers","contributors_url":"https://api.github.com/repos/how-is/how_is/contributors","subscribers_url":"https://api.github.com/repos/how-is/how_is/subscribers","subscription_url":"https://api.github.com/repos/how-is/how_is/subscription","commits_url":"https://api.github.com/repos/how-is/how_is/commits{/sha}","git_commits_url":"https://api.github.com/repos/how-is/how_is/git/commits{/sha}","comments_url":"https://api.github.com/repos/how-is/how_is/comments{/number}","issue_comment_url":"https://api.github.com/repos/how-is/how_is/issues/comments{/number}","contents_url":"https://api.github.com/repos/how-is/how_is/contents/{+path}","compare_url":"https://api.github.com/repos/how-is/how_is/compare/{base}...{head}","merges_url":"https://api.github.com/repos/how-is/how_is/merges","archive_url":"https://api.github.com/repos/how-is/how_is/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/how-is/how_is/downloads","issues_url":"https://api.github.com/repos/how-is/how_is/issues{/number}","pulls_url":"https://api.github.com/repos/how-is/how_is/pulls{/number}","milestones_url":"https://api.github.com/repos/how-is/how_is/milestones{/number}","notifications_url":"https://api.github.com/repos/how-is/how_is/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/how-is/how_is/labels{/name}","releases_url":"https://api.github.com/repos/how-is/how_is/releases{/id}","deployments_url":"https://api.github.com/repos/how-is/how_is/deployments","created_at":"2016-03-20T01:37:02Z","updated_at":"2017-06-15T21:46:29Z","pushed_at":"2017-08-09T07:51:43Z","git_url":"git://github.com/how-is/how_is.git","ssh_url":"git@github.com:how-is/how_is.git","clone_url":"https://github.com/how-is/how_is.git","svn_url":"https://github.com/how-is/how_is","homepage":"","size":1353,"stargazers_count":27,"watchers_count":27,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":20,"forks":5,"open_issues":20,"watchers":27,"default_branch":"master","organization":{"login":"how-is","id":20577802,"avatar_url":"https://avatars0.githubusercontent.com/u/20577802?v=4","gravatar_id":"","url":"https://api.github.com/users/how-is","html_url":"https://github.com/how-is","followers_url":"https://api.github.com/users/how-is/followers","following_url":"https://api.github.com/users/how-is/following{/other_user}","gists_url":"https://api.github.com/users/how-is/gists{/gist_id}","starred_url":"https://api.github.com/users/how-is/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/how-is/subscriptions","organizations_url":"https://api.github.com/users/how-is/orgs","repos_url":"https://api.github.com/users/how-is/repos","events_url":"https://api.github.com/users/how-is/events{/privacy}","received_events_url":"https://api.github.com/users/how-is/received_events","type":"Organization","site_admin":false},"network_count":5,"subscribers_count":2}'
72
+ http_version:
73
+ recorded_at: Thu, 10 Aug 2017 20:59:56 GMT
74
+ - request:
75
+ method: get
76
+ uri: https://api.github.com/repos/how-is/example-repository
77
+ body:
78
+ encoding: US-ASCII
79
+ string: ''
80
+ headers:
81
+ Accept:
82
+ - application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1
83
+ Accept-Charset:
84
+ - utf-8
85
+ User-Agent:
86
+ - Github API Ruby Gem 0.17.0
87
+ Authorization:
88
+ - Basic ZHVja2luYXRvcjo5MTgyNzc3ZmYzYzAwNjc5NTE5M2E1NzBjZGFjMzI2YjY0NDU5ZGM5"
89
+ Accept-Encoding:
90
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
91
+ response:
92
+ status:
93
+ code: 200
94
+ message: OK
95
+ headers:
96
+ Server:
97
+ - GitHub.com
98
+ Date:
99
+ - Fri, 11 Aug 2017 04:15:20 GMT
100
+ Content-Type:
101
+ - application/json; charset=utf-8
102
+ Transfer-Encoding:
103
+ - chunked
104
+ Status:
105
+ - 200 OK
106
+ X-Ratelimit-Limit:
107
+ - '5000'
108
+ X-Ratelimit-Remaining:
109
+ - '4986'
110
+ X-Ratelimit-Reset:
111
+ - '1502425710'
112
+ Cache-Control:
113
+ - private, max-age=60, s-maxage=60
114
+ Vary:
115
+ - Accept, Authorization, Cookie, X-GitHub-OTP
116
+ Etag:
117
+ - W/"43d9383ed14ed79ce34282a54e3d9815"
118
+ Last-Modified:
119
+ - Sun, 07 Aug 2016 03:52:53 GMT
120
+ X-Oauth-Scopes:
121
+ - ''
122
+ X-Accepted-Oauth-Scopes:
123
+ - repo
124
+ X-Github-Media-Type:
125
+ - github.v3; format=json
126
+ Access-Control-Expose-Headers:
127
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
128
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
129
+ Access-Control-Allow-Origin:
130
+ - "*"
131
+ Content-Security-Policy:
132
+ - default-src 'none'
133
+ Strict-Transport-Security:
134
+ - max-age=31536000; includeSubdomains; preload
135
+ X-Content-Type-Options:
136
+ - nosniff
137
+ X-Frame-Options:
138
+ - deny
139
+ X-Xss-Protection:
140
+ - 1; mode=block
141
+ X-Runtime-Rack:
142
+ - '0.040584'
143
+ X-Github-Request-Id:
144
+ - 9D7E:1122:3D7850:7B6762:598D2F58
145
+ body:
146
+ encoding: ASCII-8BIT
147
+ string: '{"id":65114449,"name":"example-repository","full_name":"how-is/example-repository","owner":{"login":"how-is","id":20577802,"avatar_url":"https://avatars0.githubusercontent.com/u/20577802?v=4","gravatar_id":"","url":"https://api.github.com/users/how-is","html_url":"https://github.com/how-is","followers_url":"https://api.github.com/users/how-is/followers","following_url":"https://api.github.com/users/how-is/following{/other_user}","gists_url":"https://api.github.com/users/how-is/gists{/gist_id}","starred_url":"https://api.github.com/users/how-is/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/how-is/subscriptions","organizations_url":"https://api.github.com/users/how-is/orgs","repos_url":"https://api.github.com/users/how-is/repos","events_url":"https://api.github.com/users/how-is/events{/privacy}","received_events_url":"https://api.github.com/users/how-is/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/how-is/example-repository","description":"Example
148
+ repository for testing how_is.","fork":false,"url":"https://api.github.com/repos/how-is/example-repository","forks_url":"https://api.github.com/repos/how-is/example-repository/forks","keys_url":"https://api.github.com/repos/how-is/example-repository/keys{/key_id}","collaborators_url":"https://api.github.com/repos/how-is/example-repository/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/how-is/example-repository/teams","hooks_url":"https://api.github.com/repos/how-is/example-repository/hooks","issue_events_url":"https://api.github.com/repos/how-is/example-repository/issues/events{/number}","events_url":"https://api.github.com/repos/how-is/example-repository/events","assignees_url":"https://api.github.com/repos/how-is/example-repository/assignees{/user}","branches_url":"https://api.github.com/repos/how-is/example-repository/branches{/branch}","tags_url":"https://api.github.com/repos/how-is/example-repository/tags","blobs_url":"https://api.github.com/repos/how-is/example-repository/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/how-is/example-repository/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/how-is/example-repository/git/refs{/sha}","trees_url":"https://api.github.com/repos/how-is/example-repository/git/trees{/sha}","statuses_url":"https://api.github.com/repos/how-is/example-repository/statuses/{sha}","languages_url":"https://api.github.com/repos/how-is/example-repository/languages","stargazers_url":"https://api.github.com/repos/how-is/example-repository/stargazers","contributors_url":"https://api.github.com/repos/how-is/example-repository/contributors","subscribers_url":"https://api.github.com/repos/how-is/example-repository/subscribers","subscription_url":"https://api.github.com/repos/how-is/example-repository/subscription","commits_url":"https://api.github.com/repos/how-is/example-repository/commits{/sha}","git_commits_url":"https://api.github.com/repos/how-is/example-repository/git/commits{/sha}","comments_url":"https://api.github.com/repos/how-is/example-repository/comments{/number}","issue_comment_url":"https://api.github.com/repos/how-is/example-repository/issues/comments{/number}","contents_url":"https://api.github.com/repos/how-is/example-repository/contents/{+path}","compare_url":"https://api.github.com/repos/how-is/example-repository/compare/{base}...{head}","merges_url":"https://api.github.com/repos/how-is/example-repository/merges","archive_url":"https://api.github.com/repos/how-is/example-repository/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/how-is/example-repository/downloads","issues_url":"https://api.github.com/repos/how-is/example-repository/issues{/number}","pulls_url":"https://api.github.com/repos/how-is/example-repository/pulls{/number}","milestones_url":"https://api.github.com/repos/how-is/example-repository/milestones{/number}","notifications_url":"https://api.github.com/repos/how-is/example-repository/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/how-is/example-repository/labels{/name}","releases_url":"https://api.github.com/repos/how-is/example-repository/releases{/id}","deployments_url":"https://api.github.com/repos/how-is/example-repository/deployments","created_at":"2016-08-07T03:52:53Z","updated_at":"2016-08-07T03:52:53Z","pushed_at":"2017-08-05T20:39:30Z","git_url":"git://github.com/how-is/example-repository.git","ssh_url":"git@github.com:how-is/example-repository.git","clone_url":"https://github.com/how-is/example-repository.git","svn_url":"https://github.com/how-is/example-repository","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":4,"forks":0,"open_issues":4,"watchers":0,"default_branch":"master","permissions":{"admin":true,"push":true,"pull":true},"organization":{"login":"how-is","id":20577802,"avatar_url":"https://avatars0.githubusercontent.com/u/20577802?v=4","gravatar_id":"","url":"https://api.github.com/users/how-is","html_url":"https://github.com/how-is","followers_url":"https://api.github.com/users/how-is/followers","following_url":"https://api.github.com/users/how-is/following{/other_user}","gists_url":"https://api.github.com/users/how-is/gists{/gist_id}","starred_url":"https://api.github.com/users/how-is/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/how-is/subscriptions","organizations_url":"https://api.github.com/users/how-is/orgs","repos_url":"https://api.github.com/users/how-is/repos","events_url":"https://api.github.com/users/how-is/events{/privacy}","received_events_url":"https://api.github.com/users/how-is/received_events","type":"Organization","site_admin":false},"network_count":0,"subscribers_count":1}'
149
+ http_version:
150
+ recorded_at: Fri, 11 Aug 2017 04:15:20 GMT
151
+ recorded_with: VCR 3.0.3
data/how_is.gemspec CHANGED
@@ -21,9 +21,8 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_runtime_dependency "github_api", "~> 0.17.0"
23
23
  spec.add_runtime_dependency "contracts", "~> 0.16.0"
24
- spec.add_runtime_dependency "slop", "~> 4.4.1"
25
24
 
26
- spec.add_runtime_dependency "tessellator-fetcher", "~> 5.0.0"
25
+ spec.add_runtime_dependency "tessellator-fetcher", "~> 5.0.2"
27
26
 
28
27
  spec.add_development_dependency "bundler", "~> 1.11"
29
28
  spec.add_development_dependency "rake", "~> 11.2"
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "how_is/fetcher"
4
+
5
+ class HowIs
6
+ # Fetches metadata about CI builds.
7
+ #
8
+ # Supports Travis
9
+ class Builds
10
+ # @param user [String] GitHub user of repository.
11
+ # @param repo [String] GitHub repository name.
12
+ def initialize(user:, repo:)
13
+ @user = user
14
+ @repo = repo
15
+ # TODO: Figure out Default Branch of the repo
16
+ end
17
+
18
+ def summary
19
+ JSON.parse(travis_builds)
20
+ end
21
+
22
+ # Returns API result of /repos/:user/:repo/builds for Push type Travis
23
+ # events.
24
+ #
25
+ # @return [String] JSON result
26
+ def travis_builds
27
+ Tessellator::Fetcher::Request::HTTP.call(
28
+ Tessellator::Fetcher::Config.new,
29
+ "get",
30
+ "http://api.travis-ci.org/repos/#{@user}/#{@repo}/builds?event_type=push",
31
+ {},
32
+ headers: {"Accept" => "application/vnd.travis-ci.2+json"}
33
+ ).body
34
+ end
35
+ end
36
+ end
data/lib/how_is/cli.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # NOPE THIS IS BROKEN // frozen_string_literal: // true
2
2
 
3
3
  require "how_is"
4
- require "slop"
4
+ require "optparse"
5
5
 
6
6
  class HowIs::CLI
7
7
  DEFAULT_REPORT_FILE = "report.#{HowIs::DEFAULT_FORMAT}".freeze
@@ -27,83 +27,104 @@ class HowIs::CLI
27
27
  # Parses +argv+ to generate an options Hash to control the behavior of
28
28
  # the library.
29
29
  def self.parse(argv)
30
- opts = Slop::Options.new
31
-
32
- # General usage information.
33
- opts.banner =
34
- <<-EOF.gsub(/ *\| ?/, '')
30
+ options = {}
31
+ opts_ = nil
32
+
33
+ opt_parser = OptionParser.new do |opts|
34
+ opts_ = opts
35
+ # General usage information.
36
+ opts.banner =
37
+ <<-EOF.gsub(/ *\| ?/, '')
35
38
  | Usage: how_is REPOSITORY [--report REPORT_FILE] [--from JSON_FILE]
36
39
  | how_is --config CONFIG_FILE
37
40
  |
38
41
  | Where REPOSITORY is <GitHub username or org>/<repository name>.
39
- | CONFIG_FILE defaults to how_is.yml.
40
42
  |
41
43
  | E.g., if you wanted to check https://github.com/how-is/how_is,
42
44
  | you'd run `how_is how-is/how_is`.
43
45
  |
44
46
  EOF
45
47
 
46
- opts.separator ""
47
- opts.separator "Options:"
48
-
49
- # The extra spaces make this a lot easier to comprehend, so we don't want
50
- # RuboCop to complain about them.
51
- #
52
- # Same for line length.
53
- #
54
- # rubocop:disable Style/SpaceBeforeFirstArg
55
- # rubocop:disable Metrics/LineLength
48
+ opts.separator ""
49
+ opts.separator "Options:"
56
50
 
57
- # Allowed arguments:
58
- opts.bool "-h", "--help", "Print help text"
59
- opts.string "--config", "YAML config file, used to generate a group of reports"
60
- opts.string "--from", "JSON report file, used instead of fetching the data again"
61
- opts.string "--report", "output file for the report (valid extensions: #{HowIs.supported_formats.join(', ')}; default: #{DEFAULT_REPORT_FILE})"
62
- opts.bool "-v", "--version", "prints the version"
63
-
64
- # rubocop:enable Style/SpaceBeforeFirstArg
65
- # rubocop:enable Metrics/LineLength
51
+ # The extra spaces make this a lot easier to comprehend, so we don't want
52
+ # RuboCop to complain about them.
53
+ #
54
+ # Same for line length.
55
+ #
56
+ # rubocop:disable Style/SpaceBeforeFirstArg
57
+ # rubocop:disable Metrics/LineLength
66
58
 
67
- # Parse the arguments.
68
- parser = Slop::Parser.new(opts)
69
- result = parser.parse(argv)
59
+ opts.on("--config CONFIG_FILE",
60
+ "YAML config file, used to generate a group of reports") do |filename|
61
+ options[:config] = filename
62
+ end
70
63
 
71
- # +options+ is a Hash of flags/values.
72
- options = result.to_hash
73
- # +arguments+ is an Array of values that don't correspond to a flag.
74
- arguments = result.arguments
64
+ opts.on("--from JSON_FILE",
65
+ "JSON report file, used instead of fetching the data again") do |filename|
66
+ options[:from] = filename
67
+ end
75
68
 
76
- # If --report isn't specified, default to DEFAULT_REPORT_FILE.
77
- options[:report] ||= DEFAULT_REPORT_FILE
69
+ opts.on("--report REPORT_FILE",
70
+ "Output file for the report (valid extensions: #{HowIs.supported_formats.join(', ')}; default: #{DEFAULT_REPORT_FILE})") do |filename|
71
+ options[:report] = filename
72
+ end
78
73
 
79
- # The following are only useful if they're not nil or false.
80
- # Removing them here simplifies contracts and keyword args for
81
- # other APIs.
82
- options.delete(:config) unless options[:config]
83
- options.delete(:help) unless options[:help]
84
- options.delete(:version) unless options[:version]
74
+ opts.on("-v", "--version",
75
+ "Prints version information") do
76
+ options[:version] = true
77
+ end
85
78
 
86
- # If we can't export to the specified file, raise an exception.
87
- unless HowIs.can_export_to?(options[:report])
88
- raise InvalidOutputFileError, "Invalid file: #{options[:report]}. Supported formats: #{HowIs.supported_formats.join(', ')}"
79
+ opts.on("-h", "--help",
80
+ "Print help text") do
81
+ options[:help] = true
82
+ end
89
83
  end
84
+ # rubocop:enable Style/SpaceBeforeFirstArg
85
+ # rubocop:enable Metrics/LineLength
90
86
 
91
- # If we pass --config, other options (excluding --help and
92
- # --version) are ignored. As such, when --config is passed,
93
- # everything in this `unless` block is irrelevant.
94
- unless options[:config]
95
- if options[:from]
96
- raise InvalidInputFileError, "No such file: #{options[:from]}" unless File.file?(options[:from])
97
-
98
- # Opening the file here is a bit gross, but I couldn't find a
99
- # better way to do it. -@duckinator
100
- options[:repository] = JSON.parse(open(options[:from]).read)['repository']
101
-
102
- raise InvalidInputFileError, "Invalid JSON report file." unless options[:repository]
87
+ # `.parse!` populates the `options` Hash that was
88
+ # created above, and the return value is any non-flag
89
+ # arguments.
90
+ arguments = opt_parser.parse!(argv)
91
+
92
+ # TODO: Should this raise an exception instead?
93
+ keep_only = lambda { |options_, key| options_.select {|k, v| k == key } }
94
+
95
+ if options[:help]
96
+ # If --help is passed, _only_ accept --help.
97
+ options = keep_only.call(options, :help)
98
+ elsif options[:version]
99
+ # If --version is passed, _only_ accept --version.
100
+ options = keep_only.call(options, :version)
101
+ elsif options[:config]
102
+ # If --config is passed, _only_ accept --config.
103
+ options = keep_only.call(options, :config)
104
+ elsif options[:from]
105
+ # Handle --from.
106
+
107
+ raise InvalidInputFileError, "No such file: #{options[:from]}" unless File.file?(options[:from])
108
+
109
+ # Opening the file here is a bit gross, but I couldn't find a
110
+ # better way to do it. -@duckinator
111
+ options[:repository] = JSON.parse(open(options[:from]).read)['repository']
112
+
113
+ raise InvalidInputFileError, "Invalid JSON report file." unless options[:repository]
114
+ else
115
+ # If we get here, we're generating a report from the command line,
116
+ # without using --from or --config.
117
+
118
+ # If --report isn't specified, default to DEFAULT_REPORT_FILE.
119
+ options[:report] ||= DEFAULT_REPORT_FILE
120
+
121
+ # If we can't export to the specified file, raise an exception.
122
+ unless HowIs.can_export_to?(options[:report])
123
+ raise InvalidOutputFileError, "Invalid file: #{options[:report]}. Supported formats: #{HowIs.supported_formats.join(', ')}"
124
+ end
103
125
 
104
- elsif argv.length >= 1
126
+ if argv.length >= 1
105
127
  options[:repository] = argv.delete_at(0)
106
-
107
128
  else
108
129
  raise NoRepositoryError, "No repository specified."
109
130
  end
@@ -116,7 +137,7 @@ class HowIs::CLI
116
137
  # +arguments+: an Array of arguments that don't have a
117
138
  # corresponding flags.
118
139
  {
119
- opts: opts,
140
+ opts: opts_,
120
141
  options: options,
121
142
  arguments: arguments,
122
143
  }
@@ -37,11 +37,13 @@ class HowIs
37
37
 
38
38
  @user = user
39
39
  @repo = repo
40
+
41
+ @commit = {}
40
42
  end
41
43
 
42
44
  # Returns a list of contributors that have zero commits before the @since_date.
43
45
  #
44
- # @return [Hash{String => Hash] Committers keyed by GitHub login name
46
+ # @return [Hash{String => Hash}] Contributors keyed by email
45
47
  def new_contributors
46
48
  # author: GitHub login, name or email by which to filter by commit author.
47
49
  @new_contributors ||= contributors.select do |email, _committer|
@@ -61,18 +63,19 @@ class HowIs
61
63
  end
62
64
 
63
65
  def commits
64
- return @commits if defined?(@commits)
65
-
66
- commits = @github.repos.commits.list(user: @user, repo: @repo, since: @since_date)
67
-
68
- # The commits list endpoint doesn't include all commit data, e.g. stats.
69
- # So, we make N requests here, where N == number of commits returned,
70
- # and then we die a bit inside.
71
- @commits = commits.map { |c| commit(c.sha) }
66
+ @commits ||= begin
67
+ @github.repos.commits.list(user: @user,
68
+ repo: @repo,
69
+ since: @since_date).map { |c|
70
+ # The commits list endpoint doesn't include all commit data, e.g. stats.
71
+ # So, we make N requests here, where N == number of commits returned,
72
+ # and then we die a bit inside.
73
+ commit(c.sha)
74
+ }
75
+ end
72
76
  end
73
77
 
74
78
  def commit(sha)
75
- @commit ||= {}
76
79
  @commit[sha] ||= @github.repos.commits.get(user: @user, repo: @repo, sha: sha)
77
80
  end
78
81
 
@@ -100,11 +103,6 @@ class HowIs
100
103
  {"stats" => @stats, "files" => @changed_files}
101
104
  end
102
105
 
103
- # TODO: Don't hard-code the default branch.
104
- def default_branch
105
- "master"
106
- end
107
-
108
106
  def changed_files
109
107
  changes["files"]
110
108
  end
@@ -120,15 +118,12 @@ class HowIs
120
118
  def compare_url
121
119
  since_timestamp = @since_date.to_time.to_i
122
120
  until_timestamp = @until_date.to_time.to_i
123
- "https://github.com/#{@user}/#{@repo}/compare/#{default_branch}@%7B#{since_timestamp}%7D...#{default_branch}@%7B#{until_timestamp}%7D"
124
- end
125
-
126
- def pretty_start_date
127
- @since_date.strftime("%b %d, %Y")
121
+ "https://github.com/#{@user}/#{@repo}/compare/#{default_branch}@%7B#{since_timestamp}%7D...#{default_branch}@%7B#{until_timestamp}%7D" # rubocop:disable Metrics/LineLength
128
122
  end
129
123
 
130
- def pretty_end_date
131
- @until_date.strftime("%b %d, %Y")
124
+ def default_branch
125
+ @default_branch ||= @github.repos.get(user: @user,
126
+ repo: @repo).default_branch
132
127
  end
133
128
 
134
129
  def summary(start_text: nil)
@@ -137,7 +132,7 @@ class HowIs
137
132
  # to /repos/:owner/:repo/commits.
138
133
  # https://developer.github.com/v3/repos/commits/
139
134
 
140
- start_text ||= "From #{pretty_start_date} through #{pretty_end_date}"
135
+ start_text ||= "From #{pretty_date(@since_date)} through #{pretty_date(@until_date)}"
141
136
 
142
137
  "#{start_text}, #{@user}/#{@repo} gained "\
143
138
  "<a href=\"#{compare_url}\">#{pluralize('new commit', commits.length)}</a>, " \
@@ -150,6 +145,10 @@ class HowIs
150
145
 
151
146
  private
152
147
 
148
+ def pretty_date(date)
149
+ date.strftime("%b %d, %Y")
150
+ end
151
+
153
152
  def pluralize(string, number)
154
153
  "#{number} #{string}#{(number == 1) ? '' : 's'}"
155
154
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class HowIs
4
- VERSION = "18.1.0"
4
+ VERSION = "19.0.0"
5
5
  end
data/lib/how_is.rb CHANGED
@@ -197,8 +197,9 @@ class HowIs
197
197
  str.string
198
198
  end
199
199
 
200
- # convert_keys({'foo' => 'bar'}, :to_sym)
201
- # => {:foo => 'bar'}
200
+ # @example
201
+ # convert_keys({'foo' => 'bar'}, :to_sym)
202
+ # # => {:foo => 'bar'}
202
203
  def self.convert_keys(data, method_name)
203
204
  data.map { |k, v| [k.send(method_name), v] }.to_h
204
205
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: how_is
3
3
  version: !ruby/object:Gem::Version
4
- version: 18.1.0
4
+ version: 19.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ellen Marie Dash
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-06 00:00:00.000000000 Z
11
+ date: 2017-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api
@@ -38,34 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.16.0
41
- - !ruby/object:Gem::Dependency
42
- name: slop
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 4.4.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 4.4.1
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: tessellator-fetcher
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: 5.0.0
47
+ version: 5.0.2
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: 5.0.0
54
+ version: 5.0.2
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -186,6 +172,7 @@ executables:
186
172
  extensions: []
187
173
  extra_rdoc_files: []
188
174
  files:
175
+ - ".codeclimate.yml"
189
176
  - ".github_changelog_generator"
190
177
  - ".gitignore"
191
178
  - ".hound.yml"
@@ -208,12 +195,15 @@ files:
208
195
  - fixtures/vcr_cassettes/how-is-example-empty-repository.yml
209
196
  - fixtures/vcr_cassettes/how-is-example-repository.yml
210
197
  - fixtures/vcr_cassettes/how-is-from-config-frontmatter.yml
198
+ - fixtures/vcr_cassettes/how-is-how-is-travis-api-repos-builds.yml
211
199
  - fixtures/vcr_cassettes/how-is-with-config-file.yml
212
200
  - fixtures/vcr_cassettes/how_is_contributions_all_contributors.yml
201
+ - fixtures/vcr_cassettes/how_is_contributions_default_branch.yml
213
202
  - fixtures/vcr_cassettes/how_is_contributions_new_contributors.yml
214
203
  - how_is.gemspec
215
204
  - lib/how_is.rb
216
205
  - lib/how_is/analyzer.rb
206
+ - lib/how_is/builds.rb
217
207
  - lib/how_is/cli.rb
218
208
  - lib/how_is/contributions.rb
219
209
  - lib/how_is/fetcher.rb
@@ -244,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
234
  version: '0'
245
235
  requirements: []
246
236
  rubyforge_project:
247
- rubygems_version: 2.6.11
237
+ rubygems_version: 2.6.13
248
238
  signing_key:
249
239
  specification_version: 4
250
240
  summary: Quantify the health of a GitHub repository.