github_api 0.11.2 → 0.11.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +139 -78
- data/Rakefile +13 -1
- data/features/cassettes/{auths/list.yml → repos/pages/get.yml} +14 -12
- data/features/cassettes/repos/pages/list_builds.yml +63 -0
- data/features/cassettes/repos/pages/list_latest_builds.yml +62 -0
- data/features/repos/pages.feature +24 -0
- data/features/settings.yml +7 -0
- data/lib/github_api.rb +0 -1
- data/lib/github_api/authorizations.rb +55 -41
- data/lib/github_api/authorizations/app.rb +77 -0
- data/lib/github_api/core_ext/array.rb +13 -5
- data/lib/github_api/core_ext/hash.rb +49 -30
- data/lib/github_api/repos.rb +6 -0
- data/lib/github_api/repos/deployments.rb +8 -0
- data/lib/github_api/repos/pages.rb +49 -0
- data/lib/github_api/validations/required.rb +1 -1
- data/lib/github_api/version.rb +1 -1
- data/spec/github/authorizations/app/create_spec.rb +44 -0
- data/spec/github/authorizations/app/delete_spec.rb +59 -0
- data/spec/github/authorizations/create_spec.rb +13 -13
- data/spec/github/authorizations/delete_spec.rb +5 -4
- data/spec/github/core_ext/hash_spec.rb +5 -5
- data/spec/github/normalizer_spec.rb +2 -2
- data/spec/github/parameter_filter_spec.rb +5 -5
- metadata +49 -43
- data/features/authorizations.feature +0 -12
- data/lib/github_api/core_ext/deep_merge.rb +0 -13
- data/lib/github_api/ssl_certs/cacert.pem +0 -41
data/README.md
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
A Ruby wrapper for the GitHub REST API v3.
|
18
18
|
|
19
|
-
Supports all the API methods
|
19
|
+
Supports all the API methods. It's built in a modular way. You can either instantiate the whole API wrapper Github.new or use parts of it i.e. Github::Repos.new if working solely with repositories is your main concern.
|
20
20
|
|
21
21
|
## Features
|
22
22
|
|
@@ -31,7 +31,7 @@ Supports all the API methods (nearly 200). It's built in a modular way. You can
|
|
31
31
|
* Supports multithreaded environment.
|
32
32
|
* Custom media type specification through the 'media' parameter. [media](#media-types)
|
33
33
|
* Request results caching (Status: TODO)
|
34
|
-
* Fully tested with test coverage above 90% with over 1,
|
34
|
+
* Fully tested with test coverage above 90% with over 1,700 specs and 1000 features. [testing](#testing)
|
35
35
|
|
36
36
|
## Installation
|
37
37
|
|
@@ -47,7 +47,26 @@ or put it in your Gemfile and run `bundle install`
|
|
47
47
|
gem "github_api"
|
48
48
|
```
|
49
49
|
|
50
|
-
##
|
50
|
+
## Contents
|
51
|
+
|
52
|
+
* [1. Usage](#1-usage)
|
53
|
+
* [2. Arguments & Parameters](#2-arguments--parameters)
|
54
|
+
* [3. Advanced Configuration](#3-advanced-configuration)
|
55
|
+
* [4. Authentication](#4-authentication)
|
56
|
+
* [5. SSL](#5-ssl)
|
57
|
+
* [6. API](#6-api)
|
58
|
+
* [7. Media Types](#7-media-types)
|
59
|
+
* [8. Hypermeida](#8-hypermedia)
|
60
|
+
* [9. Configuration](#9-configurations)
|
61
|
+
* [10. Pagination](#10-pagination)
|
62
|
+
* [11. Caching](#11-caching)
|
63
|
+
* [12. Debugging](#12-debugging)
|
64
|
+
* [13. Error Handling](#13-error-handling)
|
65
|
+
* [14. Response Message](#14-response-message)
|
66
|
+
* [15. Examples](#15-examples)
|
67
|
+
* [16. Testing](#16-testing)
|
68
|
+
|
69
|
+
## 1 Usage
|
51
70
|
|
52
71
|
To start using the gem, you can either perform direct calls on `Github`
|
53
72
|
|
@@ -61,6 +80,8 @@ or create a new client instance
|
|
61
80
|
github = Github.new
|
62
81
|
```
|
63
82
|
|
83
|
+
### 1.1 Options
|
84
|
+
|
64
85
|
At this stage, you can also supply various configuration parameters, such as
|
65
86
|
```
|
66
87
|
adapter # http client used for performing requests
|
@@ -108,6 +129,8 @@ or using a convenience method:
|
|
108
129
|
github = Github.new basic_auth: 'login:password'
|
109
130
|
```
|
110
131
|
|
132
|
+
### 1.2 API navigation
|
133
|
+
|
111
134
|
This gem closely mirrors the GitHub API hierarchy i.e. if you want to create a download resource,
|
112
135
|
look up the GitHub API spec and issue the request as in `github.repos.downloads.create`
|
113
136
|
|
@@ -119,6 +142,8 @@ github.repos.hooks.create 'user-name', 'repo-name', name: "web", active: true
|
|
119
142
|
github.repos.keys.get 'user-name', 'repo-name'
|
120
143
|
```
|
121
144
|
|
145
|
+
### 1.3 Modularity
|
146
|
+
|
122
147
|
The code base is modular and allows for you to work specifically with a given part of GitHub API e.g. blobs
|
123
148
|
|
124
149
|
```ruby
|
@@ -126,18 +151,19 @@ blobs = Github::GitData::Blobs.new
|
|
126
151
|
blobs.create 'peter-murach', 'github', content: 'Blob content'
|
127
152
|
```
|
128
153
|
|
154
|
+
### 1.4 Response querying
|
129
155
|
The response is of type [Github::ResponseWrapper] which allows traversing all the json response attributes like method calls i.e.
|
130
156
|
|
131
157
|
```ruby
|
132
|
-
repos = Github::Repos.new :
|
158
|
+
repos = Github::Repos.new user: 'peter-murach', repo: 'github'
|
133
159
|
repos.branches do |branch|
|
134
160
|
puts branch.name
|
135
161
|
end
|
136
162
|
```
|
137
163
|
|
138
|
-
## Arguments & Parameters
|
164
|
+
## 2 Arguments & Parameters
|
139
165
|
|
140
|
-
The library allows for flexible argument parsing. Therefore, arguments can be passed during instance creation:
|
166
|
+
The **GithubAPI** library allows for flexible argument parsing. Therefore, arguments can be passed during instance creation:
|
141
167
|
|
142
168
|
```ruby
|
143
169
|
issues = Github::Issues.new user: 'peter-murach', repo: 'github'
|
@@ -178,7 +204,7 @@ Finally, use the `with` scope to clearly denote your requests
|
|
178
204
|
|
179
205
|
```ruby
|
180
206
|
issues = Github::Issues.new
|
181
|
-
issues.milestones.with(user:'peter-murach', repo: 'github').list
|
207
|
+
issues.milestones.with(user: 'peter-murach', repo: 'github').list
|
182
208
|
```
|
183
209
|
|
184
210
|
Some API methods apart from required parameters such as username, repository name
|
@@ -202,7 +228,7 @@ github.git_data.trees.get 'peter-murach', 'github', 'c18647b75d72f19c1e0cc8af031
|
|
202
228
|
end
|
203
229
|
```
|
204
230
|
|
205
|
-
## Advanced Configuration
|
231
|
+
## 3 Advanced Configuration
|
206
232
|
|
207
233
|
The `github_api` gem will use the default middleware stack which is exposed by calling `stack` on a client instance. However, this stack can be freely modified with methods such as `insert`, `insert_after`, `delete` and `swap`. For instance, to add your `CustomMiddleware` do
|
208
234
|
|
@@ -225,71 +251,32 @@ github = Github.new do |config|
|
|
225
251
|
end
|
226
252
|
```
|
227
253
|
|
254
|
+
## 4 Authentication
|
228
255
|
|
229
|
-
|
256
|
+
### 4.1 Basic
|
230
257
|
|
231
|
-
|
258
|
+
To start making requests as authenticated user you can use your GitHub username and password like so
|
232
259
|
|
233
260
|
```ruby
|
234
|
-
Github
|
235
|
-
|
236
|
-
Github::Gists Github::GitData Github::Repos Github::Search
|
237
|
-
Github::Orgs Github::Issues Github::Authorizations
|
238
|
-
Github::PullRequests Github::Users Github::Activity
|
261
|
+
Github.new basic_auth: 'login:password'
|
239
262
|
```
|
240
263
|
|
241
|
-
|
242
|
-
|
243
|
-
```ruby
|
244
|
-
Github::Users::Emails
|
245
|
-
Github::Users::Keys
|
246
|
-
```
|
247
|
-
|
248
|
-
All method calls form Ruby like sentences and allow for intuitive API navigation, for instance
|
249
|
-
|
250
|
-
```ruby
|
251
|
-
github = Github.new :oauth_token => '...'
|
252
|
-
github.users.followers.following 'wycats' # => returns users that 'wycats' is following
|
253
|
-
github.users.followers.following? 'wycats' # => returns true if following, otherwise false
|
254
|
-
```
|
255
|
-
|
256
|
-
For specifications on all available methods, go to http://developer.github.com/v3/ or
|
257
|
-
read the rdoc. All methods are documented there with examples of usage.
|
258
|
-
|
259
|
-
Alternatively, you can find out which methods are supported by calling `actions` on a class instance in your `irb`:
|
264
|
+
Though this method is convenient you should strongly consider using `OAuth` for improved security reasons.
|
260
265
|
|
261
|
-
|
262
|
-
>> Github::Repos.actions >> github.issues.actions
|
263
|
-
--- ---
|
264
|
-
|--> all |--> all
|
265
|
-
|--> branches |--> comments
|
266
|
-
|--> collaborators |--> create
|
267
|
-
|--> commits |--> edit
|
268
|
-
|--> contribs |--> events
|
269
|
-
|--> contributors |--> find
|
270
|
-
|--> create |--> get
|
271
|
-
|--> downloads |--> labels
|
272
|
-
|--> edit |--> list
|
273
|
-
|--> find |--> list_repo
|
274
|
-
|--> forks |--> list_repository
|
275
|
-
|--> get |--> milestones
|
276
|
-
|--> hooks ...
|
277
|
-
...
|
278
|
-
```
|
266
|
+
### 4.2 Application OAuth access
|
279
267
|
|
280
|
-
|
268
|
+
In order to authenticate your app through OAuth2 on GitHub you need to
|
281
269
|
|
282
|
-
|
283
|
-
|
284
|
-
* visit https://github.com/settings/applications/new and register your app
|
270
|
+
* Visit https://github.com/settings/applications/new and register your app.
|
285
271
|
You will need to be logged in to initially register the application.
|
286
272
|
|
287
|
-
*
|
288
|
-
|
273
|
+
* Authorize your credentials https://github.com/login/oauth/authorize
|
274
|
+
|
275
|
+
You can use convenience methods to help you achieve this using **GithubAPI** gem:
|
289
276
|
|
290
277
|
```ruby
|
291
|
-
github = Github.new :
|
292
|
-
github.authorize_url :
|
278
|
+
github = Github.new client_id: '...', client_secret: '...'
|
279
|
+
github.authorize_url redirect_uri: 'http://localhost', scope: 'repo'
|
293
280
|
# => "https://github.com/login/oauth/authorize?scope=repo&response_type=code&client_id='...'&redirect_uri=http%3A%2F%2Flocalhost"
|
294
281
|
```
|
295
282
|
After you get your authorization code, call to receive your access_token
|
@@ -302,18 +289,42 @@ Once you have your access token, configure your github instance following instru
|
|
302
289
|
|
303
290
|
**Note**: If you are working locally (i.e. your app URL and callback URL are localhost), do not specify a ```:redirect_uri``` otherwise you will get a ```redirect_uri_mismatch``` error.
|
304
291
|
|
305
|
-
### Authorizations API
|
292
|
+
### 4.3 Authorizations API
|
293
|
+
|
294
|
+
#### 4.3.1 For an User
|
306
295
|
|
307
|
-
|
296
|
+
To create an access token through the GitHub Authrizations API, you are required to pass your basic credentials and scopes you wish to have for the authentication token.
|
308
297
|
|
309
298
|
```ruby
|
310
299
|
github = Github.new basic_auth: 'login:password'
|
311
|
-
github.oauth.create
|
300
|
+
github.oauth.create scopes: ['repo']
|
312
301
|
```
|
313
302
|
|
314
303
|
You can add more than one scope from the `user`, `public_repo`, `repo`, `gist` or leave the scopes parameter out, in which case, the default read-only access will be assumed (includes public user profile info, public repo info, and gists).
|
315
304
|
|
316
|
-
|
305
|
+
#### 4.3.2 For an App
|
306
|
+
|
307
|
+
Furthermore, to create auth token for an application you need to pass `:app` argument together with `:client_id` and `:client_secret` parameters.
|
308
|
+
|
309
|
+
```ruby
|
310
|
+
github = Github.new basic_auth: 'login:password'
|
311
|
+
github.oauth.app.create 'clinet-id', scopes: ['repo']
|
312
|
+
```
|
313
|
+
|
314
|
+
In order to revoke auth token(s) for an application you must use basic authentication with `client_id` as login and `client_secret` as password.
|
315
|
+
|
316
|
+
```ruby
|
317
|
+
github = Github.new basic_auth: "client_id:client_secret"
|
318
|
+
github.oauth.app.delete 'client-id'
|
319
|
+
```
|
320
|
+
|
321
|
+
Revoke a specific app token.
|
322
|
+
|
323
|
+
```ruby
|
324
|
+
github.oauth.app.delete 'client-id', 'access-token'
|
325
|
+
```
|
326
|
+
|
327
|
+
### 4.4 Scopes
|
317
328
|
|
318
329
|
You can check OAuth scopes you have by:
|
319
330
|
|
@@ -332,7 +343,7 @@ To list the scopes that the particular GitHub API action checks for do:
|
|
332
343
|
|
333
344
|
To understand what each scope means refer to [documentation](http://developer.github.com/v3/oauth/#scopes)
|
334
345
|
|
335
|
-
## SSL
|
346
|
+
## 5 SSL
|
336
347
|
|
337
348
|
By default requests over SSL are set to OpenSSL::SSL::VERIFY_PEER. However, you can turn off peer verification by
|
338
349
|
|
@@ -354,7 +365,58 @@ If your client fails to find CA certs, you can pass other SSL options to specify
|
|
354
365
|
For instance, download CA root certificates from Mozilla [cacert](http://curl.haxx.se/ca/cacert.pem) and point ca_file at your certificate bundle location.
|
355
366
|
This will allow the client to verify the github.com ssl certificate as authentic.
|
356
367
|
|
357
|
-
##
|
368
|
+
## 6 API
|
369
|
+
|
370
|
+
Main API methods are grouped into the following classes that can be instantiated on their own
|
371
|
+
|
372
|
+
```ruby
|
373
|
+
Github - full API access
|
374
|
+
|
375
|
+
Github::Gists Github::GitData Github::Repos Github::Search
|
376
|
+
Github::Orgs Github::Issues Github::Authorizations
|
377
|
+
Github::PullRequests Github::Users Github::Activity
|
378
|
+
```
|
379
|
+
|
380
|
+
Some parts of GitHub API v3 require you to be authenticated, for instance the following are examples of APIs only for the authenticated user
|
381
|
+
|
382
|
+
```ruby
|
383
|
+
Github::Users::Emails
|
384
|
+
Github::Users::Keys
|
385
|
+
```
|
386
|
+
|
387
|
+
All method calls form Ruby like sentences and allow for intuitive API navigation, for instance
|
388
|
+
|
389
|
+
```ruby
|
390
|
+
github = Github.new :oauth_token => '...'
|
391
|
+
github.users.followers.following 'wycats' # => returns users that 'wycats' is following
|
392
|
+
github.users.followers.following? 'wycats' # => returns true if following, otherwise false
|
393
|
+
```
|
394
|
+
|
395
|
+
For specifications on all available methods, go to http://developer.github.com/v3/ or
|
396
|
+
read the rdoc. All methods are documented there with examples of usage.
|
397
|
+
|
398
|
+
Alternatively, you can find out which methods are supported by calling `actions` on a class instance in your `irb`:
|
399
|
+
|
400
|
+
```ruby
|
401
|
+
>> Github::Repos.actions >> github.issues.actions
|
402
|
+
--- ---
|
403
|
+
|--> all |--> all
|
404
|
+
|--> branches |--> comments
|
405
|
+
|--> collaborators |--> create
|
406
|
+
|--> commits |--> edit
|
407
|
+
|--> contribs |--> events
|
408
|
+
|--> contributors |--> find
|
409
|
+
|--> create |--> get
|
410
|
+
|--> downloads |--> labels
|
411
|
+
|--> edit |--> list
|
412
|
+
|--> find |--> list_repo
|
413
|
+
|--> forks |--> list_repository
|
414
|
+
|--> get |--> milestones
|
415
|
+
|--> hooks ...
|
416
|
+
...
|
417
|
+
```
|
418
|
+
|
419
|
+
## 7 Media Types
|
358
420
|
|
359
421
|
You can specify custom media types to choose the format of the data you wish to receive. To make things easier you can specify the following shortcuts
|
360
422
|
`json`, `blob`, `raw`, `text`, `html`, `full`. For instance:
|
@@ -374,12 +436,11 @@ Finally, you can always pass the whole accept header like so
|
|
374
436
|
github.issues.get 'peter-murach', 'github', 108, accept: 'application/vnd.github.raw'
|
375
437
|
```
|
376
438
|
|
377
|
-
## Hypermedia
|
439
|
+
## 8 Hypermedia
|
378
440
|
|
379
|
-
TODO
|
380
|
-
Github::Resource for each *_url key
|
441
|
+
TODO
|
381
442
|
|
382
|
-
## Configuration
|
443
|
+
## 9 Configuration
|
383
444
|
|
384
445
|
Certain methods require authentication. To get your GitHub OAuth v2 credentials,
|
385
446
|
register an app at https://github.com/settings/applications/
|
@@ -402,7 +463,7 @@ All parameters can be overwritten each method call by passing a parameters hash.
|
|
402
463
|
|
403
464
|
By default, no caching will be performed. In order to set the cache do... If no cache type is provided, a default memoization is done.
|
404
465
|
|
405
|
-
## Pagination
|
466
|
+
## 10 Pagination
|
406
467
|
|
407
468
|
Any request that returns multiple items will be paginated to 30 items by default. You can specify custom `page` and `per_page` query parameters to alter default behavior. For instance:
|
408
469
|
|
@@ -464,15 +525,15 @@ res.prev_page # Get previous page
|
|
464
525
|
res.last_page # Get last page
|
465
526
|
```
|
466
527
|
|
467
|
-
|
528
|
+
## 11 Caching
|
468
529
|
|
469
530
|
TODO: explaing how to add faraday-cache midlleware
|
470
531
|
|
471
|
-
|
532
|
+
## 12 Debugging
|
472
533
|
|
473
534
|
run with ENV['DEBUG'] flag or include middleware by passing `debug` flag
|
474
535
|
|
475
|
-
## Error Handling
|
536
|
+
## 13 Error Handling
|
476
537
|
|
477
538
|
The generic error class `Github::Error::GithubError` will handle both the client (`Github::Error::ClientError`) and service (`Github::Error::ServiceError`) side errors. For instance in your code you can catch errors like
|
478
539
|
|
@@ -490,7 +551,7 @@ rescue Github::Error::GithubError => e
|
|
490
551
|
end
|
491
552
|
```
|
492
553
|
|
493
|
-
## Response Message
|
554
|
+
## 14 Response Message
|
494
555
|
|
495
556
|
Each response comes packaged with methods allowing for inspection of HTTP start line and headers. For example, to check for rate limits and status codes, call
|
496
557
|
|
@@ -504,7 +565,7 @@ res.headers.etag # "\"2c5dfc54b3fe498779ef3a9ada9a0af9\""
|
|
504
565
|
res.headers.cache_control # "public, max-age=60, s-maxage=60"
|
505
566
|
```
|
506
567
|
|
507
|
-
## Examples
|
568
|
+
## 15 Examples
|
508
569
|
|
509
570
|
Some API methods require input parameters. These are simply added as a hash of properties, for instance
|
510
571
|
|
@@ -536,7 +597,7 @@ github = Github.new
|
|
536
597
|
github.orgs.members.member? 'github', 'technoweenie', public: true # => true
|
537
598
|
```
|
538
599
|
|
539
|
-
|
600
|
+
### 15.1 Rails Example
|
540
601
|
|
541
602
|
A Rails controller that allows a user to authorize their GitHub account and then performs a request.
|
542
603
|
|
@@ -560,7 +621,7 @@ class GithubController < ApplicationController
|
|
560
621
|
end
|
561
622
|
```
|
562
623
|
|
563
|
-
## Testing
|
624
|
+
## 16 Testing
|
564
625
|
|
565
626
|
The test suite is split into two groups, `live` and `mock`.
|
566
627
|
|
data/Rakefile
CHANGED
@@ -12,4 +12,16 @@ Cucumber::Rake::Task.new(:features)
|
|
12
12
|
|
13
13
|
FileList['tasks/**/*.rake'].each { |task| import task }
|
14
14
|
|
15
|
-
task :
|
15
|
+
task default: [:spec, :features]
|
16
|
+
|
17
|
+
desc 'Run all specs'
|
18
|
+
task ci: %w[ spec features ]
|
19
|
+
|
20
|
+
desc 'Load gem inside irb console'
|
21
|
+
task :console do
|
22
|
+
require 'irb'
|
23
|
+
require 'irb/completion'
|
24
|
+
require File.join(__FILE__, '../lib/github_api')
|
25
|
+
ARGV.clear
|
26
|
+
IRB.start
|
27
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://<BASIC_AUTH>@api.github.com/
|
5
|
+
uri: https://<BASIC_AUTH>@api.github.com/repos/<USER>/github_api_test/pages?access_token=<TOKEN>
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ""
|
@@ -12,7 +12,7 @@ http_interactions:
|
|
12
12
|
Accept-Charset:
|
13
13
|
- utf-8
|
14
14
|
User-Agent:
|
15
|
-
- Github Ruby Gem 0.11.
|
15
|
+
- Github Ruby Gem 0.11.2
|
16
16
|
Accept-Encoding:
|
17
17
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
18
|
response:
|
@@ -23,7 +23,7 @@ http_interactions:
|
|
23
23
|
Server:
|
24
24
|
- GitHub.com
|
25
25
|
Date:
|
26
|
-
- Sun,
|
26
|
+
- Sun, 16 Feb 2014 19:19:10 GMT
|
27
27
|
Content-Type:
|
28
28
|
- application/json; charset=utf-8
|
29
29
|
Transfer-Encoding:
|
@@ -33,13 +33,15 @@ http_interactions:
|
|
33
33
|
X-Ratelimit-Limit:
|
34
34
|
- "5000"
|
35
35
|
X-Ratelimit-Remaining:
|
36
|
-
- "
|
36
|
+
- "4985"
|
37
37
|
X-Ratelimit-Reset:
|
38
|
-
- "
|
38
|
+
- "1392579836"
|
39
39
|
Cache-Control:
|
40
40
|
- private, max-age=60, s-maxage=60
|
41
|
+
Last-Modified:
|
42
|
+
- Sun, 16 Feb 2014 19:08:04 GMT
|
41
43
|
Etag:
|
42
|
-
- "\"
|
44
|
+
- "\"db416c75241ecab92cbb45b1addc0279\""
|
43
45
|
Vary:
|
44
46
|
- Accept, Authorization, Cookie, X-GitHub-OTP
|
45
47
|
- Accept-Encoding
|
@@ -54,16 +56,16 @@ http_interactions:
|
|
54
56
|
Access-Control-Allow-Origin:
|
55
57
|
- "*"
|
56
58
|
X-Github-Request-Id:
|
57
|
-
- 4D649864:
|
59
|
+
- 4D649864:3BA3:2B05E2C:53010F2D
|
58
60
|
Content-Encoding:
|
59
61
|
- gzip
|
60
62
|
body:
|
61
63
|
encoding: ASCII-8BIT
|
62
|
-
string: !binary
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
string: !binary |
|
65
|
+
H4sIAAAAAAAAAz3KMQqAMAxA0btkLsahUy9TYolVbG1pkkm8u4Lg+B//AhsF
|
66
|
+
AmyqXQIi9X3Ku262TKlVHNybYLXBB34c3yMqi2KnzAIORElNIJxWioN0UuU/
|
67
|
+
TLTV6GcPYaUifD+TnpLscAAAAA==
|
66
68
|
|
67
69
|
http_version:
|
68
|
-
recorded_at: Sun,
|
70
|
+
recorded_at: Sun, 16 Feb 2014 19:19:10 GMT
|
69
71
|
recorded_with: VCR 2.6.0
|