bcx 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.rspec +1 -0
  2. data/Gemfile +1 -1
  3. data/README.md +64 -15
  4. data/Rakefile +5 -1
  5. data/bcx.gemspec +5 -0
  6. data/lib/bcx.rb +7 -2
  7. data/lib/bcx/client.rb +11 -4
  8. data/lib/bcx/configuration.rb +9 -0
  9. data/lib/bcx/resources/person.rb +13 -0
  10. data/lib/bcx/resources/project.rb +40 -2
  11. data/lib/bcx/resources/todo.rb +37 -0
  12. data/lib/bcx/resources/todolist.rb +40 -1
  13. data/lib/bcx/response_error.rb +17 -0
  14. data/lib/bcx/version.rb +1 -1
  15. data/spec/bcx/client_spec.rb +40 -0
  16. data/spec/bcx/project_spec.rb +65 -0
  17. data/spec/bcx/todolist_spec.rb +75 -0
  18. data/spec/cassettes/Bcx_Resources_Project/DELETE_/projects/2937644/should_delete_a_project.yml +105 -0
  19. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/2937644/should_have_the_correct_id.yml +60 -0
  20. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/2937644/should_return_a_hash.yml +60 -0
  21. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/archived/should_be_an_array.yml +58 -0
  22. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/archived/should_be_empty.yml +58 -0
  23. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/first_project_should_have_the_correct_id.yml +59 -0
  24. data/spec/cassettes/Bcx_Resources_Project/GET_/projects/should_be_an_array.yml +59 -0
  25. data/spec/cassettes/Bcx_Resources_Project/POST_/projects/should_create_a_new_project.yml +63 -0
  26. data/spec/cassettes/Bcx_Resources_Project/PUT_/projects/2937644/should_update_an_existing_project.yml +58 -0
  27. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/1/todolists/completed_json/first_todolist_should_have_the_correct_id.yml +59 -0
  28. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/1/todolists/completed_json/should_be_an_array.yml +59 -0
  29. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/123/todolists/456_json/should_have_the_correct_id.yml +67 -0
  30. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/123/todolists/456_json/should_return_a_hash.yml +67 -0
  31. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/2937644/todolists_json/first_todolist_should_have_the_correct_id.yml +114 -0
  32. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/2937644/todolists_json/should_be_an_array.yml +114 -0
  33. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/2956584/todolists/completed_json/first_todolist_should_have_the_correct_id.yml +59 -0
  34. data/spec/cassettes/Bcx_Resources_Todolist/GET_/projects/2956584/todolists/completed_json/should_be_an_array.yml +59 -0
  35. data/spec/cassettes/Bcx_Resources_Todolist/GET_/todolists/completed_json/first_todolist_should_have_the_correct_id.yml +60 -0
  36. data/spec/cassettes/Bcx_Resources_Todolist/GET_/todolists/completed_json/should_be_an_array.yml +60 -0
  37. data/spec/cassettes/Bcx_Resources_Todolist/GET_/todolists_json/first_todolist_should_have_the_correct_id.yml +60 -0
  38. data/spec/cassettes/Bcx_Resources_Todolist/GET_/todolists_json/should_be_an_array.yml +60 -0
  39. data/spec/cassettes/Bcx_Resources_Todolist/projects/123/todolists_json/should_create_a_new_todolist.yml +62 -0
  40. data/spec/spec_helper.rb +21 -0
  41. metadata +103 -8
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bcx::Resources::Todolist, :vcr do
4
+ let(:client) { Bcx::Client.new(:http, login: 'bcx-test-user', password: 'secret') }
5
+
6
+
7
+ describe "GET /projects/2937644/todolists.json" do
8
+ let(:todolists) { client.projects(2956584).todolists! }
9
+
10
+ it "should be an array" do
11
+ expect(todolists).to be_an Array
12
+ end
13
+
14
+ it "first todolist should have the correct id" do
15
+ expect(todolists.first.id).to eq 7701209
16
+ end
17
+ end
18
+
19
+ describe "GET /projects/2956584/todolists/completed.json" do
20
+ let(:todolists) { client.projects(2956584).todolists.completed! }
21
+
22
+
23
+ it "should be an array" do
24
+ expect(todolists).to be_an Array
25
+ end
26
+
27
+ it "first todolist should have the correct id" do
28
+ expect(todolists.first.id).to eq 7701289
29
+ end
30
+ end
31
+
32
+ describe "GET /todolists.json" do
33
+ let(:todolists) { client.todolists! }
34
+
35
+ it "should be an array" do
36
+ expect(todolists).to be_an Array
37
+ end
38
+
39
+ it "first todolist should have the correct id" do
40
+ expect(todolists.first.id).to eq 7701209
41
+ end
42
+ end
43
+
44
+ describe "GET /todolists/completed.json" do
45
+ let(:todolists) { client.todolists.completed! }
46
+
47
+
48
+ it "should be an array" do
49
+ expect(todolists).to be_an Array
50
+ end
51
+
52
+ it "first todolist should have the correct id" do
53
+ expect(todolists.first.id).to eq 7701289
54
+ end
55
+ end
56
+
57
+ describe "GET /projects/123/todolists/456.json" do
58
+ let(:todolist) { client.projects(2956584).todolists!(7701289) }
59
+
60
+ it "should return a hash" do
61
+ expect(todolist).to be_a Hashie::Mash
62
+ end
63
+
64
+ it "should have the correct id" do
65
+ expect(todolist.id).to eq 7701289
66
+ end
67
+ end
68
+
69
+ describe "/projects/123/todolists.json" do
70
+ it "should create a new todolist" do
71
+ todolist = client.projects(2956584).todolists.create!(name: 'My todolist', description: 'This is a todolist')
72
+ expect(todolist.created_at).not_to be_blank
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,105 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: delete
5
+ uri: https://basecamp.com/2274488/api/v1/projects/2937644.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 204
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:34:33 GMT
25
+ connection:
26
+ - close
27
+ status:
28
+ - 204 No Content
29
+ x-frame-options:
30
+ - SAMEORIGIN
31
+ x-xss-protection:
32
+ - 1; mode=block
33
+ x-content-type-options:
34
+ - nosniff
35
+ x-ua-compatible:
36
+ - chrome=1
37
+ x-xhr-current-location:
38
+ - /2274488/api/v1/projects/2937644.json
39
+ x-asset-paths:
40
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
41
+ cache-control:
42
+ - no-cache
43
+ x-request-id:
44
+ - 86d723e0-926a-4943-8bcd-b57770e596fe
45
+ x-runtime:
46
+ - '0.421573'
47
+ body:
48
+ encoding: US-ASCII
49
+ string: ''
50
+ http_version:
51
+ recorded_at: Tue, 28 May 2013 20:34:33 GMT
52
+ - request:
53
+ method: get
54
+ uri: https://basecamp.com/2274488/api/v1/projects/2937644.json
55
+ body:
56
+ encoding: US-ASCII
57
+ string: ''
58
+ headers:
59
+ User-Agent:
60
+ - Faraday v0.8.7
61
+ Content-Type:
62
+ - application/json
63
+ Authorization:
64
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
65
+ response:
66
+ status:
67
+ code: 404
68
+ message:
69
+ headers:
70
+ server:
71
+ - nginx
72
+ date:
73
+ - Tue, 28 May 2013 20:34:34 GMT
74
+ content-type:
75
+ - text/html
76
+ transfer-encoding:
77
+ - chunked
78
+ connection:
79
+ - close
80
+ status:
81
+ - 404 Not Found
82
+ x-frame-options:
83
+ - SAMEORIGIN
84
+ x-xss-protection:
85
+ - 1; mode=block
86
+ x-content-type-options:
87
+ - nosniff
88
+ x-ua-compatible:
89
+ - chrome=1
90
+ x-xhr-current-location:
91
+ - /2274488/api/v1/projects/2937644.json
92
+ x-asset-paths:
93
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
94
+ cache-control:
95
+ - no-cache
96
+ x-request-id:
97
+ - 5545afed-3a6f-4dd0-b243-3eb7bb8ecf1e
98
+ x-runtime:
99
+ - '0.328483'
100
+ body:
101
+ encoding: ASCII-8BIT
102
+ string: ''
103
+ http_version:
104
+ recorded_at: Tue, 28 May 2013 20:34:34 GMT
105
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,60 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://basecamp.com/2274488/api/v1/projects/2937644.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 200
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:29:00 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 200 OK
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects/2937644.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
45
+ etag:
46
+ - ! '"a5ce1100b3a610e2995fe40c497dd0c4"'
47
+ last-modified:
48
+ - Tue, 28 May 2013 20:18:46 GMT
49
+ cache-control:
50
+ - max-age=0, private, must-revalidate
51
+ x-request-id:
52
+ - aadbbfb0-bc1d-4b2a-ad02-52120cf9edd2
53
+ x-runtime:
54
+ - '0.366523'
55
+ body:
56
+ encoding: US-ASCII
57
+ string: ! '{"id":2937644,"name":"Explore Basecamp!","description":"New description","archived":false,"created_at":"2013-05-24T18:59:10.000Z","updated_at":"2013-05-28T20:18:46.000Z","last_event_at":"2013-05-28T20:18:46.000Z","starred":false,"creator":{"id":4666034,"name":"Basecamp","avatar_url":"http://dge9rmgqjs8m1.cloudfront.net/global/79383b7fc061815979c8c638784be44d4aa4628aaa16ee5614658a2b4d662eb9ce6fc85f0ea77f81b6e6bd3cdb9c266f42cbf1d2426968d83cb50f0d3078fcd65e6055e264b268aa44ffaa94d9475efa/avatar.gif?r=3"},"accesses":{"count":1,"updated_at":"2013-05-24T18:59:13.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/accesses.json"},"attachments":{"count":17,"updated_at":"2012-08-22T22:16:46.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/attachments.json"},"calendar_events":{"count":0,"updated_at":null,"url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/calendar_events.json"},"documents":{"count":3,"updated_at":"2012-11-23T20:27:39.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/documents.json"},"forwards":{"count":0,"updated_at":null,"url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/forwards.json"},"topics":{"count":9,"updated_at":"2013-05-28T12:30:00.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/topics.json"},"todolists":{"remaining_count":2,"completed_count":0,"updated_at":"2012-05-17T19:52:13.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/todolists.json"}}'
58
+ http_version:
59
+ recorded_at: Tue, 28 May 2013 20:29:00 GMT
60
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,60 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://basecamp.com/2274488/api/v1/projects/2937644.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 200
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:28:59 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 200 OK
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects/2937644.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
45
+ etag:
46
+ - ! '"a5ce1100b3a610e2995fe40c497dd0c4"'
47
+ last-modified:
48
+ - Tue, 28 May 2013 20:18:46 GMT
49
+ cache-control:
50
+ - max-age=0, private, must-revalidate
51
+ x-request-id:
52
+ - 2586432a-0e75-438c-ba16-ba020e893d8a
53
+ x-runtime:
54
+ - '0.429543'
55
+ body:
56
+ encoding: US-ASCII
57
+ string: ! '{"id":2937644,"name":"Explore Basecamp!","description":"New description","archived":false,"created_at":"2013-05-24T18:59:10.000Z","updated_at":"2013-05-28T20:18:46.000Z","last_event_at":"2013-05-28T20:18:46.000Z","starred":false,"creator":{"id":4666034,"name":"Basecamp","avatar_url":"http://dge9rmgqjs8m1.cloudfront.net/global/79383b7fc061815979c8c638784be44d4aa4628aaa16ee5614658a2b4d662eb9ce6fc85f0ea77f81b6e6bd3cdb9c266f42cbf1d2426968d83cb50f0d3078fcd65e6055e264b268aa44ffaa94d9475efa/avatar.gif?r=3"},"accesses":{"count":1,"updated_at":"2013-05-24T18:59:13.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/accesses.json"},"attachments":{"count":17,"updated_at":"2012-08-22T22:16:46.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/attachments.json"},"calendar_events":{"count":0,"updated_at":null,"url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/calendar_events.json"},"documents":{"count":3,"updated_at":"2012-11-23T20:27:39.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/documents.json"},"forwards":{"count":0,"updated_at":null,"url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/forwards.json"},"topics":{"count":9,"updated_at":"2013-05-28T12:30:00.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/topics.json"},"todolists":{"remaining_count":2,"completed_count":0,"updated_at":"2012-05-17T19:52:13.000Z","url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp/todolists.json"}}'
58
+ http_version:
59
+ recorded_at: Tue, 28 May 2013 20:28:59 GMT
60
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://basecamp.com/2274488/api/v1/projects/archived.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 200
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:28:57 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 200 OK
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects/archived.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
45
+ etag:
46
+ - ! '"d751713988987e9331980363e24189ce"'
47
+ cache-control:
48
+ - max-age=0, private, must-revalidate
49
+ x-request-id:
50
+ - e866c997-d0c8-42b0-a8e3-e6af859d655a
51
+ x-runtime:
52
+ - '0.373261'
53
+ body:
54
+ encoding: US-ASCII
55
+ string: ! '[]'
56
+ http_version:
57
+ recorded_at: Tue, 28 May 2013 20:28:57 GMT
58
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://basecamp.com/2274488/api/v1/projects/archived.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 200
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:28:58 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 200 OK
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects/archived.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
45
+ etag:
46
+ - ! '"d751713988987e9331980363e24189ce"'
47
+ cache-control:
48
+ - max-age=0, private, must-revalidate
49
+ x-request-id:
50
+ - 48192f78-1265-4e01-a8dd-3a629fa4751e
51
+ x-runtime:
52
+ - '0.365625'
53
+ body:
54
+ encoding: US-ASCII
55
+ string: ! '[]'
56
+ http_version:
57
+ recorded_at: Tue, 28 May 2013 20:28:58 GMT
58
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://basecamp.com/2274488/api/v1/projects.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Content-Type:
13
+ - application/json
14
+ Authorization:
15
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
16
+ response:
17
+ status:
18
+ code: 200
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Tue, 28 May 2013 20:28:56 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 200 OK
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-65ce9eab0fe6859d64efe0f889d5e231.js","application.css":"application-417c4f9074157e12c1dfb6ede37ce3e3.css"}'
45
+ etag:
46
+ - ! '"58d12b1c36519a45ee30a8e6088f855c"'
47
+ cache-control:
48
+ - max-age=0, private, must-revalidate
49
+ x-request-id:
50
+ - ce1b5dc0-020a-4cdd-9767-62114a2ce040
51
+ x-runtime:
52
+ - '0.367040'
53
+ body:
54
+ encoding: US-ASCII
55
+ string: ! '[{"id":2937644,"name":"Explore Basecamp!","description":"New description","archived":false,"created_at":"2013-05-24T18:59:10.000Z","updated_at":"2013-05-28T20:18:46.000Z","last_event_at":"2013-05-28T20:18:46.000Z","starred":false,"url":"https://basecamp.com/2274488/api/v1/projects/2937644-explore-basecamp.json"},{"id":2951531,"name":"New
56
+ project","description":"A new project created over the API","archived":false,"created_at":"2013-05-28T14:11:45.000Z","updated_at":"2013-05-28T14:11:45.000Z","last_event_at":"2013-05-28T14:11:45.000Z","starred":false,"url":"https://basecamp.com/2274488/api/v1/projects/2951531-new-project.json"}]'
57
+ http_version:
58
+ recorded_at: Tue, 28 May 2013 20:28:56 GMT
59
+ recorded_with: VCR 2.5.0