bugsnag-api 1.0.3 → 2.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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +14 -3
  3. data/CHANGELOG.md +32 -0
  4. data/CONTRIBUTING.md +40 -0
  5. data/README.md +126 -111
  6. data/bugsnag-api.gemspec +4 -3
  7. data/lib/bugsnag/api/client.rb +18 -9
  8. data/lib/bugsnag/api/client/collaborators.rb +87 -0
  9. data/lib/bugsnag/api/client/comments.rb +31 -40
  10. data/lib/bugsnag/api/client/currentuser.rb +33 -0
  11. data/lib/bugsnag/api/client/errors.rb +45 -51
  12. data/lib/bugsnag/api/client/eventfields.rb +50 -0
  13. data/lib/bugsnag/api/client/events.rb +38 -32
  14. data/lib/bugsnag/api/client/organizations.rb +46 -0
  15. data/lib/bugsnag/api/client/pivots.rb +43 -0
  16. data/lib/bugsnag/api/client/projects.rb +37 -63
  17. data/lib/bugsnag/api/client/trends.rb +38 -0
  18. data/lib/bugsnag/api/error.rb +4 -0
  19. data/lib/bugsnag/api/version.rb +1 -1
  20. data/spec/bugsnag/api/client/collaborators_spec.rb +101 -0
  21. data/spec/bugsnag/api/client/comments_spec.rb +42 -30
  22. data/spec/bugsnag/api/client/currentuser_spec.rb +57 -0
  23. data/spec/bugsnag/api/client/errors_spec.rb +44 -41
  24. data/spec/bugsnag/api/client/eventfields_spec.rb +56 -0
  25. data/spec/bugsnag/api/client/events_spec.rb +41 -29
  26. data/spec/bugsnag/api/client/organizations_spec.rb +53 -0
  27. data/spec/bugsnag/api/client/pivots_spec.rb +49 -0
  28. data/spec/bugsnag/api/client/projects_spec.rb +35 -59
  29. data/spec/bugsnag/api/client/trends_spec.rb +44 -0
  30. data/spec/bugsnag/api/client_spec.rb +8 -3
  31. data/spec/cassettes/Bugsnag_Api_Client/_get/handles_query_params.yml +45 -27
  32. data/spec/cassettes/Bugsnag_Api_Client/_last_response/caches_the_last_agent_response.yml +45 -27
  33. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/creates_and_returns_a_collaborator.yml +80 -0
  34. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/invites_multiple_collaborators.yml +80 -0
  35. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborator/returns_a_collaborator.yml +157 -0
  36. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_organization_collaborators.yml +160 -0
  37. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_project_collaborators.yml +160 -0
  38. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/throws_an_argument_error_if_neither_org_id_or_project_id_are_provided.yml +80 -0
  39. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_delete_collaborator/deletes_a_collaborator.yml +80 -0
  40. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_update_collaborator_permissions/updates_and_returns_the_collaborator.yml +157 -0
  41. data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_view_collaborator_projects/returns_a_list_of_projects_belonging_to_the_collaborator.yml +159 -0
  42. data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/creates_a_comment_on_the_error.yml +82 -0
  43. data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comment/retrieves_the_comment_specified.yml +159 -0
  44. data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comments/retrieves_all_comments_on_an_error.yml +161 -0
  45. data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_delete_comment/deletes_the_comment_and_returns_true.yml +82 -0
  46. data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_update_comment/updates_the_message_on_a_comment.yml +159 -0
  47. data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_auth_token/returns_the_organization_the_auth_token_belongs_to.yml +81 -0
  48. data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_user_credentials/returns_users_organizations.yml +85 -0
  49. data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_auth_token/lists_current_user_s_projects_in_the_organization.yml +82 -0
  50. data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_user_credentials/lists_current_user_s_projects_in_the_organization.yml +86 -0
  51. data/spec/cassettes/Bugsnag_Api_Client_Errors/_error/returns_a_single_error.yml +82 -0
  52. data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_errors_on_the_project.yml +84 -0
  53. data/spec/cassettes/Bugsnag_Api_Client_Errors/_update_errors/updates_and_returns_the_updated_errors.yml +80 -0
  54. data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/lists_all_error_events.yml +84 -0
  55. data/spec/cassettes/Bugsnag_Api_Client_Events/_event/returns_the_specified_event.yml +253 -0
  56. data/spec/cassettes/Bugsnag_Api_Client_Events/_events/returns_the_a_list_of_project_errors.yml +84 -0
  57. data/spec/cassettes/Bugsnag_Api_Client_Events/_latest_event/returns_the_last_event_on_an_error.yml +253 -0
  58. data/spec/cassettes/Bugsnag_Api_Client_Organizations/_create_organization/creates_a_new_organization.yml +84 -0
  59. data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_delete_organization/deletes_the_organization.yml +159 -0
  60. data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_organization/returns_the_requested_organization.yml +165 -0
  61. data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_update_organization/updates_and_returns_the_organization.yml +165 -0
  62. data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_new_project.yml +80 -0
  63. data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_delete_project/deletes_the_project.yml +151 -0
  64. data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_project/returns_the_requested_project.yml +157 -0
  65. data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_regenerate_api_key/removes_the_current_api_key_and_replaces_it_with_a_new_api_key.yml +157 -0
  66. data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_update_project/updates_and_returns_the_project.yml +157 -0
  67. data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_error_trends_in_bucket_form.yml +80 -0
  68. data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_project_trends_in_bucket_form.yml +80 -0
  69. data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_project_trends_in_resolution_form.yml +80 -0
  70. data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_trends_in_resolution_form.yml +80 -0
  71. data/spec/spec_helper.rb +29 -27
  72. metadata +124 -83
  73. data/lib/bugsnag/api/client/accounts.rb +0 -44
  74. data/lib/bugsnag/api/client/users.rb +0 -99
  75. data/spec/bugsnag/api/client/accounts_spec.rb +0 -45
  76. data/spec/bugsnag/api/client/users_spec.rb +0 -105
  77. data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/returns_the_requested_account.yml +0 -49
  78. data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/when_using_account_credentials/returns_the_account.yml +0 -51
  79. data/spec/cassettes/Bugsnag_Api_Client_Accounts/_accounts/returns_all_accounts.yml +0 -49
  80. data/spec/cassettes/Bugsnag_Api_Client_Comments/_comments/returns_all_comments_on_an_error.yml +0 -107
  81. data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/created_a_comment.yml +0 -51
  82. data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_comment/returns_a_comment.yml +0 -97
  83. data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_delete_comment/deletes_an_existing_comment.yml +0 -92
  84. data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_update_comment/updates_an_existing_comment.yml +0 -97
  85. data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_all_errors_on_an_project.yml +0 -48
  86. data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_error/returns_an_error.yml +0 -48
  87. data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_reopen_error/reopens_the_error.yml +0 -48
  88. data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_resolve_error/resolves_the_error.yml +0 -48
  89. data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_update_error/updates_the_error.yml +0 -48
  90. data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/returns_all_events_on_an_error.yml +0 -64
  91. data/spec/cassettes/Bugsnag_Api_Client_Events/_project_events/returns_all_events_on_a_project.yml +0 -64
  92. data/spec/cassettes/Bugsnag_Api_Client_Events/with_event/_event/returns_an_event.yml +0 -56
  93. data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/returns_all_projects_on_an_account.yml +0 -61
  94. data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/when_using_account_credentials/returns_all_projects.yml +0 -63
  95. data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_project_on_an_account.yml +0 -50
  96. data/spec/cassettes/Bugsnag_Api_Client_Projects/_user_projects/returns_all_projects_for_a_user.yml +0 -61
  97. data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_delete_project/deletes_an_existing_project.yml +0 -91
  98. data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_project/returns_a_project.yml +0 -95
  99. data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_update_project/updates_an_existing_project.yml +0 -95
  100. data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/returns_all_users_on_an_account.yml +0 -49
  101. data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/when_using_account_credentials/returns_all_users.yml +0 -51
  102. data/spec/cassettes/Bugsnag_Api_Client_Users/_invite_user/invites_a_user_to_an_account.yml +0 -48
  103. data/spec/cassettes/Bugsnag_Api_Client_Users/_project_users/returns_all_users_for_a_project.yml +0 -49
  104. data/spec/cassettes/Bugsnag_Api_Client_Users/_user/returns_a_user.yml +0 -48
  105. data/spec/cassettes/Bugsnag_Api_Client_Users/_user/when_using_user_credentials/returns_the_authed_user.yml +0 -48
  106. data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_remove_user/removes_a_user_from_an_account.yml +0 -89
  107. data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_update_user_permissions/updates_a_users_permissions.yml +0 -93
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe Bugsnag::Api::Client::Pivots do
4
+ before do
5
+ skip "event_fields API has issues currently"
6
+ @client = auth_token_client
7
+ @project_id = test_bugsnag_project_id
8
+ @error_id = test_bugsnag_error_id
9
+ @event_field_id = test_bugsnag_eventfield_id
10
+ Bugsnag::Api.reset!
11
+ end
12
+
13
+ describe ".pivots", :vcr do
14
+ it "returns a list of pivots on an error" do
15
+ pivots = @client.pivots @project_id, @error_id
16
+ expect(pivots).to be_a_kind_of(Array)
17
+ expect(pivots.length).to be > 0
18
+
19
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/errors/#{@error_id}/pivots")
20
+ end
21
+
22
+ it "returns a list of pivots on a project" do
23
+ pivots = @client.pivots @project_id
24
+ expect(pivots).to be_a_kind_of(Array)
25
+ expect(pivots.length).to be > 0
26
+
27
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/pivots")
28
+ end
29
+ end
30
+
31
+ describe ".pivot_values", :vcr do
32
+ it "returns values of pivots on an error" do
33
+ values = @client.pivot_values @project_id, @event_field_id, @error_id
34
+ expect(values).to be_a_kind_of(Array)
35
+ expect(values.length).to be > 0
36
+
37
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/errors/#{@error_id}/pivots/#{@event_field_id}/values")
38
+ end
39
+
40
+ it "returns values of pivots on a project" do
41
+ values = @client.pivot_values @project_id, @event_field_id
42
+ expect(values).to be_a_kind_of(Array)
43
+ expect(values.length).to be > 0
44
+
45
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/pivots/#{@event_field_id}/values")
46
+ end
47
+ end
48
+ end
49
+
@@ -2,85 +2,61 @@ require "spec_helper"
2
2
 
3
3
  describe Bugsnag::Api::Client::Projects do
4
4
  before do
5
+ @client = auth_token_client
6
+ @org_id = test_bugsnag_org_id
5
7
  Bugsnag::Api.reset!
6
- @client = basic_auth_client
7
- end
8
-
9
- describe ".account_projects", :vcr do
10
- context "when using account credentials" do
11
- it "returns all projects" do
12
- client = auth_token_client
13
- projects = client.account_projects
14
- expect(projects).to be_kind_of(Array)
15
- expect(projects.first.name).not_to be_nil
16
-
17
- assert_requested :get, bugsnag_url("/account/projects")
18
- end
19
- end
20
-
21
- context "when using user credentials" do
22
- it "raises an error" do
23
- expect { @client.account_projects }.to raise_error Bugsnag::Api::AccountCredentialsRequired
24
-
25
- assert_not_requested :get, basic_bugsnag_url("/account/projects")
26
- end
27
- end
28
-
29
- it "returns all projects on an account" do
30
- projects = @client.account_projects(test_bugsnag_account)
31
- expect(projects).to be_kind_of(Array)
32
- expect(projects.first.name).not_to be_nil
33
-
34
- assert_requested :get, basic_bugsnag_url("/accounts/#{test_bugsnag_account}/projects")
35
- end
36
- end
37
-
38
- describe ".user_projects", :vcr do
39
- it "returns all projects for a user" do
40
- projects = @client.user_projects(test_bugsnag_user)
41
- expect(projects).to be_kind_of(Array)
42
- expect(projects.first.name).not_to be_nil
43
-
44
- assert_requested :get, basic_bugsnag_url("/users/#{test_bugsnag_user}/projects")
45
- end
46
8
  end
47
9
 
48
10
  describe ".create_project", :vcr do
49
- it "creates a project on an account" do
50
- project = @client.create_project(test_bugsnag_account, :name => "Example")
51
- expect(project.name).to eq("Example")
11
+ it "creates a new project" do
12
+ new_project = @client.create_project @org_id, "testProject", "other"
13
+ expect(new_project.name).to eq("testProject")
52
14
 
53
- assert_requested :post, basic_bugsnag_url("/accounts/#{test_bugsnag_account}/projects")
15
+ assert_requested :post, bugsnag_url("/organizations/#{@org_id}/projects")
54
16
  end
55
17
  end
56
18
 
57
- context "with project", :vcr do
19
+ context "given a project", :vcr do
58
20
  before do
59
- @project = @client.create_project(test_bugsnag_account, :name => "Example")
21
+ @project = @client.create_project @org_id, "testProject", "other"
60
22
  end
61
23
 
62
- describe ".project" do
63
- it "returns a project" do
64
- project = @client.project(@project.id)
24
+ describe ".project", :vcr do
25
+ it "returns the requested project" do
26
+ project = @client.project @project.id
65
27
  expect(project.id).to eq(@project.id)
28
+ expect(project.name).to eq("testProject")
29
+
30
+ assert_requested :get, bugsnag_url("/projects/#{@project.id}")
31
+ end
32
+ end
33
+
34
+ describe ".update_project", :vcr do
35
+ it "updates and returns the project" do
36
+ updated_project = @client.update_project @project.id, {:name => "otherName"}
37
+ expect(updated_project.id).to eq(@project.id)
38
+ expect(updated_project.name).to eq("otherName")
66
39
 
67
- assert_requested :get, basic_bugsnag_url("/projects/#{@project.id}")
40
+ assert_requested :patch, bugsnag_url("/projects/#{@project.id}")
68
41
  end
69
42
  end
70
43
 
71
- describe ".update_project" do
72
- it "updates an existing project" do
73
- updated_project = @client.update_project(@project.id, :name => "New project name")
44
+ describe ".regenerate_api_key", :vcr do
45
+ it "removes the current api key and replaces it with a new api key" do
46
+ updated_project = @client.regenerate_api_key @project.id
74
47
  expect(updated_project.id).to eq(@project.id)
75
- assert_requested :patch, basic_bugsnag_url("/projects/#{@project.id}")
48
+ expect(updated_project.api_key).not_to eq(@project.api_key)
49
+
50
+ assert_requested :delete, bugsnag_url("/projects/#{@project.id}/api_key")
76
51
  end
77
52
  end
53
+
54
+ describe ".delete_project", :vcr do
55
+ it "deletes the project" do
56
+ deleted_project = @client.delete_project @project.id
57
+ expect(deleted_project).to be true
78
58
 
79
- describe ".delete_project" do
80
- it "deletes an existing project" do
81
- response = @client.delete_project(@project.id)
82
- expect(response).to be true
83
- assert_requested :delete, basic_bugsnag_url("/projects/#{@project.id}")
59
+ assert_requested :delete, bugsnag_url("/projects/#{@project.id}")
84
60
  end
85
61
  end
86
62
  end
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+
3
+ describe Bugsnag::Api::Client::Trends do
4
+ before do
5
+ @project_id = test_bugsnag_project_id
6
+ @error_id = test_bugsnag_error_id
7
+ @client = auth_token_client
8
+ Bugsnag::Api.reset!
9
+ end
10
+
11
+ describe ".trends_buckets", :vcr do
12
+ it "returns a list of error trends in bucket form" do
13
+ trends = @client.trends_buckets @project_id, 5, @error_id
14
+ expect(trends).to be_a_kind_of(Array)
15
+ expect(trends.length).to eq(5)
16
+
17
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/errors/#{@error_id}/trend?buckets_count=5")
18
+ end
19
+
20
+ it "returns a list of project trends in bucket form" do
21
+ trends = @client.trends_buckets @project_id, 5
22
+ expect(trends).to be_a_kind_of(Array)
23
+ expect(trends.length).to eq(5)
24
+
25
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/trend?buckets_count=5")
26
+ end
27
+ end
28
+
29
+ describe ".trends_resolution", :vcr do
30
+ it "returns a list of trends in resolution form" do
31
+ trends = @client.trends_resolution @project_id, "12h", @error_id
32
+
33
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/errors/#{@error_id}/trend?resolution=12h")
34
+ end
35
+
36
+ it "returns a list of project trends in resolution form" do
37
+ trends = @client.trends_resolution @project_id, "12h"
38
+ expect(trends).to be_a_kind_of(Array)
39
+ expect(trends.length).to be > 0
40
+
41
+ assert_requested :get, bugsnag_url("/projects/#{@project_id}/trend?resolution=12h")
42
+ end
43
+ end
44
+ end
@@ -44,14 +44,14 @@ describe Bugsnag::Api::Client do
44
44
  end
45
45
 
46
46
  it "handles query params", :vcr do
47
- Bugsnag::Api.get "/", :foo => "bar"
47
+ Bugsnag::Api.get bugsnag_url("/"), :foo => "bar"
48
48
  assert_requested :get, "https://api.bugsnag.com?foo=bar"
49
49
  end
50
50
 
51
51
  it "handles headers" do
52
52
  request = stub_get("/zen").
53
53
  with(:query => {:foo => "bar"}, :headers => {:accept => "text/plain"})
54
- Bugsnag::Api.get "/zen", :foo => "bar", :accept => "text/plain"
54
+ Bugsnag::Api.get bugsnag_url("/zen"), :foo => "bar", :accept => "text/plain"
55
55
  assert_requested request
56
56
  end
57
57
  end
@@ -62,7 +62,7 @@ describe Bugsnag::Api::Client do
62
62
  client = Bugsnag::Api.client
63
63
  expect(client.last_response).to be_nil
64
64
 
65
- client.get "/"
65
+ client.get bugsnag_url("/")
66
66
  expect(client.last_response.status).to eq(200)
67
67
  end
68
68
  end
@@ -87,6 +87,11 @@ describe Bugsnag::Api::Client do
87
87
  expect { Bugsnag::Api.get('/booya') }.to raise_error(Bugsnag::Api::NotFound)
88
88
  end
89
89
 
90
+ it "raises on 429" do
91
+ stub_get('/test').to_return(:status => 429)
92
+ expect { Bugsnag::Api.get('/test') }.to raise_error(Bugsnag::Api::RateLimitExceeded)
93
+ end
94
+
90
95
  it "raises on 500" do
91
96
  stub_get('/boom').to_return(:status => 500)
92
97
  expect { Bugsnag::Api.get('/boom') }.to raise_error(Bugsnag::Api::InternalServerError)
@@ -8,49 +8,67 @@ http_interactions:
8
8
  string: ''
9
9
  headers:
10
10
  User-Agent:
11
- - Bugsnag API Ruby Gem 1.0.0
11
+ - Bugsnag API Ruby Gem 1.0.3
12
12
  Content-Type:
13
13
  - application/json
14
+ X-Version:
15
+ - '2'
14
16
  Accept-Encoding:
15
17
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
18
  Accept:
17
- - '*/*'
19
+ - "*/*"
18
20
  response:
19
21
  status:
20
22
  code: 200
21
23
  message: OK
22
24
  headers:
23
- Cache-Control:
24
- - max-age=0, private, must-revalidate
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Mon, 09 Oct 2017 14:20:09 GMT
25
29
  Content-Type:
26
30
  - application/json; charset=utf-8
27
- Date:
28
- - Tue, 02 Sep 2014 02:49:29 GMT
29
- Server:
30
- - nginx + Phusion Passenger
31
- Status:
32
- - 200 OK
33
- Strict-Transport-Security:
34
- - max-age=31536000
31
+ Etag:
32
+ - W/"59024f0b45c7aee36c00eaa89f2cce70"
33
+ Cache-Control:
34
+ - max-age=0, private, must-revalidate
35
+ X-Request-Id:
36
+ - 3bb88017-d992-4f63-8560-e17d1af10910
37
+ X-Runtime:
38
+ - '0.006426'
39
+ Vary:
40
+ - Origin
41
+ Content-Security-Policy:
42
+ - 'default-src ''self''; child-src https://*.stripe.com headway-widget.net;
43
+ connect-src ''self'' https://api.bugsnag.com https://*.stripe.com https://bugsnag.zendesk.com
44
+ https://api.lever.co; font-src ''self'' https://maxcdn.bootstrapcdn.com; img-src
45
+ ''self'' data: https://notify.bugsnag.com https://*.stripe.com https://maxcdn.bootstrapcdn.com;
46
+ script-src ''self'' https://d2wy8f7a9ursnm.cloudfront.net https://*.stripe.com
47
+ https://maxcdn.bootstrapcdn.com https://code.jquery.com https://assets.zendesk.com
48
+ https://cdn.headwayapp.co; style-src ''self'' ''unsafe-inline'' https://maxcdn.bootstrapcdn.com'
35
49
  X-Content-Type-Options:
36
50
  - nosniff
51
+ X-Download-Options:
52
+ - noopen
37
53
  X-Frame-Options:
38
- - SAMEORIGIN
39
- X-Powered-By:
40
- - Phusion Passenger
41
- X-Request-Id:
42
- - d5805f6d-7f5f-4513-af4d-3a4a259a1707
43
- X-Runtime:
44
- - '0.004698'
54
+ - DENY
55
+ X-Permitted-Cross-Domain-Policies:
56
+ - none
45
57
  X-Xss-Protection:
46
58
  - 1; mode=block
47
- Content-Length:
48
- - '96'
49
- Connection:
50
- - keep-alive
59
+ X-Robots-Tag:
60
+ - noindex, nofollow
61
+ Strict-Transport-Security:
62
+ - max-age=31536000
63
+ Via:
64
+ - 1.1 google
65
+ Alt-Svc:
66
+ - clear
67
+ Transfer-Encoding:
68
+ - chunked
51
69
  body:
52
- encoding: UTF-8
53
- string: '{"projects_url":"https://api.bugsnag.com/account/projects","users_url":"https://api.bugsnag.com/account/users"}'
70
+ encoding: ASCII-8BIT
71
+ string: '{"organizations_url":"https://api.bugsnag.com/user/organizations"}'
54
72
  http_version:
55
- recorded_at: Tue, 02 Sep 2014 02:49:29 GMT
56
- recorded_with: VCR 2.9.2
73
+ recorded_at: Mon, 09 Oct 2017 14:20:08 GMT
74
+ recorded_with: VCR 2.9.3
@@ -8,49 +8,67 @@ http_interactions:
8
8
  string: ''
9
9
  headers:
10
10
  User-Agent:
11
- - Bugsnag API Ruby Gem 1.0.0
11
+ - Bugsnag API Ruby Gem 1.0.3
12
12
  Content-Type:
13
13
  - application/json
14
+ X-Version:
15
+ - '2'
14
16
  Accept-Encoding:
15
17
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
18
  Accept:
17
- - '*/*'
19
+ - "*/*"
18
20
  response:
19
21
  status:
20
22
  code: 200
21
23
  message: OK
22
24
  headers:
23
- Cache-Control:
24
- - max-age=0, private, must-revalidate
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Mon, 09 Oct 2017 14:20:09 GMT
25
29
  Content-Type:
26
30
  - application/json; charset=utf-8
27
- Date:
28
- - Tue, 02 Sep 2014 02:49:29 GMT
29
- Server:
30
- - nginx + Phusion Passenger
31
- Status:
32
- - 200 OK
33
- Strict-Transport-Security:
34
- - max-age=31536000
31
+ Etag:
32
+ - W/"59024f0b45c7aee36c00eaa89f2cce70"
33
+ Cache-Control:
34
+ - max-age=0, private, must-revalidate
35
+ X-Request-Id:
36
+ - 033725c9-6217-4ce6-b1af-37fd1c879b5b
37
+ X-Runtime:
38
+ - '0.011110'
39
+ Vary:
40
+ - Origin
41
+ Content-Security-Policy:
42
+ - 'default-src ''self''; child-src https://*.stripe.com headway-widget.net;
43
+ connect-src ''self'' https://api.bugsnag.com https://*.stripe.com https://bugsnag.zendesk.com
44
+ https://api.lever.co; font-src ''self'' https://maxcdn.bootstrapcdn.com; img-src
45
+ ''self'' data: https://notify.bugsnag.com https://*.stripe.com https://maxcdn.bootstrapcdn.com;
46
+ script-src ''self'' https://d2wy8f7a9ursnm.cloudfront.net https://*.stripe.com
47
+ https://maxcdn.bootstrapcdn.com https://code.jquery.com https://assets.zendesk.com
48
+ https://cdn.headwayapp.co; style-src ''self'' ''unsafe-inline'' https://maxcdn.bootstrapcdn.com'
35
49
  X-Content-Type-Options:
36
50
  - nosniff
51
+ X-Download-Options:
52
+ - noopen
37
53
  X-Frame-Options:
38
- - SAMEORIGIN
39
- X-Powered-By:
40
- - Phusion Passenger
41
- X-Request-Id:
42
- - 87d16308-f667-4a49-a5f8-9dc6dd7ef1ed
43
- X-Runtime:
44
- - '0.005029'
54
+ - DENY
55
+ X-Permitted-Cross-Domain-Policies:
56
+ - none
45
57
  X-Xss-Protection:
46
58
  - 1; mode=block
47
- Content-Length:
48
- - '96'
49
- Connection:
50
- - keep-alive
59
+ X-Robots-Tag:
60
+ - noindex, nofollow
61
+ Strict-Transport-Security:
62
+ - max-age=31536000
63
+ Via:
64
+ - 1.1 google
65
+ Alt-Svc:
66
+ - clear
67
+ Transfer-Encoding:
68
+ - chunked
51
69
  body:
52
- encoding: UTF-8
53
- string: '{"projects_url":"https://api.bugsnag.com/account/projects","users_url":"https://api.bugsnag.com/account/users"}'
70
+ encoding: ASCII-8BIT
71
+ string: '{"organizations_url":"https://api.bugsnag.com/user/organizations"}'
54
72
  http_version:
55
- recorded_at: Tue, 02 Sep 2014 02:49:29 GMT
56
- recorded_with: VCR 2.9.2
73
+ recorded_at: Mon, 09 Oct 2017 14:20:08 GMT
74
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,80 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.bugsnag.com/organizations/BUGSNAG_ORG_ID/collaborators
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"email":"BUGSNAG_COLLABORATOR_EMAIL"}'
9
+ headers:
10
+ User-Agent:
11
+ - Bugsnag API Ruby Gem 1.0.3
12
+ Content-Type:
13
+ - application/json
14
+ X-Version:
15
+ - '2'
16
+ Authorization:
17
+ - token BUGSNAG_AUTH_TOKEN
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ Accept:
21
+ - "*/*"
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Server:
28
+ - nginx
29
+ Date:
30
+ - Mon, 09 Oct 2017 14:25:26 GMT
31
+ Content-Type:
32
+ - application/json; charset=utf-8
33
+ Etag:
34
+ - W/"eca67f6d4d1539baf9ad49d57ffbb90c"
35
+ Cache-Control:
36
+ - max-age=0, private, must-revalidate
37
+ X-Request-Id:
38
+ - 25848079-82f1-4a59-9421-e64c084f31b3
39
+ X-Runtime:
40
+ - '0.456026'
41
+ Vary:
42
+ - Origin
43
+ X-Ratelimit-Limit:
44
+ - '10'
45
+ X-Ratelimit-Remaining:
46
+ - '7'
47
+ Content-Security-Policy:
48
+ - 'default-src ''self''; child-src https://*.stripe.com headway-widget.net;
49
+ connect-src ''self'' https://api.bugsnag.com https://*.stripe.com https://bugsnag.zendesk.com
50
+ https://api.lever.co; font-src ''self'' https://maxcdn.bootstrapcdn.com; img-src
51
+ ''self'' data: https://notify.bugsnag.com https://*.stripe.com https://maxcdn.bootstrapcdn.com;
52
+ script-src ''self'' https://d2wy8f7a9ursnm.cloudfront.net https://*.stripe.com
53
+ https://maxcdn.bootstrapcdn.com https://code.jquery.com https://assets.zendesk.com
54
+ https://cdn.headwayapp.co; style-src ''self'' ''unsafe-inline'' https://maxcdn.bootstrapcdn.com'
55
+ X-Content-Type-Options:
56
+ - nosniff
57
+ X-Download-Options:
58
+ - noopen
59
+ X-Frame-Options:
60
+ - DENY
61
+ X-Permitted-Cross-Domain-Policies:
62
+ - none
63
+ X-Xss-Protection:
64
+ - 1; mode=block
65
+ X-Robots-Tag:
66
+ - noindex, nofollow
67
+ Strict-Transport-Security:
68
+ - max-age=31536000
69
+ Via:
70
+ - 1.1 google
71
+ Alt-Svc:
72
+ - clear
73
+ Transfer-Encoding:
74
+ - chunked
75
+ body:
76
+ encoding: ASCII-8BIT
77
+ string: '{"id":"59afc14140ab4d001de9d7f0","name":null,"email":"BUGSNAG_COLLABORATOR_EMAIL","two_factor_enabled":false,"two_factor_enabled_on":null,"password_updated_on":"2017-09-06T09:34:57.068Z","show_time_in_utc":true,"projects_url":"https://api.bugsnag.com/users/59afc14140ab4d001de9d7f0/projects","heroku":false,"recovery_codes_remaining":0,"is_admin":true,"pending_invitation":true,"last_request_at":null,"project_ids":["BUGSNAG_PROJECT_ID","59afb2f8d0e0b8001971def9","59afb2fad0e0b8001e71e05f","59afb2fbbf058b001e55ef61","59afc13ebf058b001e56358a","59afc168bf058b0023562dae","59b01c8cd0e0b8001972b987","59b01c8dd0e0b8001e72b5c8","59b01c8fd0e0b8001972b989","59b01cc3d0e0b8001e72b5ca","59b01cc4d0e0b80023727b93","59b01cc540ab4d001dea69ff","59b01cc9d0e0b8001972ba0b","59db4efc562ced00221047b9","59db858e562ced00271092cd","59db8590c1951b0026d5a314","59db8593c1951b0026d5a316","59db8594562ced002210765c"],"paid_for":false}'
78
+ http_version:
79
+ recorded_at: Mon, 09 Oct 2017 14:25:25 GMT
80
+ recorded_with: VCR 2.9.3