bugsnag-api 1.0.2 → 2.0.3
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 +5 -5
- data/.buildkite/pipeline.yml +6 -0
- data/.github/ISSUE_TEMPLATE/A.md +14 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- data/.github/support.md +19 -0
- data/.github/workflows/tests.yml +53 -0
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +271 -0
- data/CHANGELOG.md +59 -0
- data/CONTRIBUTING.md +40 -0
- data/Gemfile +9 -0
- data/README.md +178 -109
- data/bugsnag-api.gemspec +42 -6
- data/config/.gitignore +1 -0
- data/docker-compose.yml +9 -0
- data/dockerfiles/Dockerfile.audit +5 -0
- data/lib/bugsnag/api/client.rb +32 -10
- data/lib/bugsnag/api/client/collaborators.rb +86 -0
- data/lib/bugsnag/api/client/comments.rb +31 -40
- data/lib/bugsnag/api/client/currentuser.rb +32 -0
- data/lib/bugsnag/api/client/errors.rb +48 -53
- data/lib/bugsnag/api/client/eventfields.rb +49 -0
- data/lib/bugsnag/api/client/events.rb +37 -32
- data/lib/bugsnag/api/client/organizations.rb +45 -0
- data/lib/bugsnag/api/client/pivots.rb +42 -0
- data/lib/bugsnag/api/client/projects.rb +36 -63
- data/lib/bugsnag/api/client/trends.rb +41 -0
- data/lib/bugsnag/api/configuration.rb +1 -1
- data/lib/bugsnag/api/error.rb +5 -1
- data/lib/bugsnag/api/response/raise_error.rb +0 -2
- data/lib/bugsnag/api/version.rb +1 -1
- data/scripts/license_finder.sh +4 -0
- data/spec/bugsnag/api/client/collaborators_spec.rb +101 -0
- data/spec/bugsnag/api/client/comments_spec.rb +42 -30
- data/spec/bugsnag/api/client/currentuser_spec.rb +57 -0
- data/spec/bugsnag/api/client/errors_spec.rb +44 -41
- data/spec/bugsnag/api/client/eventfields_spec.rb +56 -0
- data/spec/bugsnag/api/client/events_spec.rb +41 -29
- data/spec/bugsnag/api/client/organizations_spec.rb +53 -0
- data/spec/bugsnag/api/client/pivots_spec.rb +49 -0
- data/spec/bugsnag/api/client/projects_spec.rb +35 -59
- data/spec/bugsnag/api/client/trends_spec.rb +44 -0
- data/spec/bugsnag/api/client_spec.rb +76 -9
- data/spec/bugsnag/api_spec.rb +2 -0
- data/spec/cassettes/Bugsnag_Api_Client/_get/handles_query_params.yml +36 -26
- data/spec/cassettes/Bugsnag_Api_Client/_last_response/caches_the_last_agent_response.yml +36 -26
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/creates_and_returns_a_collaborator.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/invites_multiple_collaborators.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborator/returns_a_collaborator.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_organization_collaborators.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_project_collaborators.yml +135 -0
- 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 +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_delete_collaborator/deletes_a_collaborator.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_update_collaborator_permissions/updates_and_returns_the_collaborator.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_view_collaborator_projects/returns_a_list_of_projects_belonging_to_the_collaborator.yml +153 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/creates_a_comment_on_the_error.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comment/retrieves_the_comment_specified.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comments/retrieves_all_comments_on_an_error.yml +137 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_delete_comment/deletes_the_comment_and_returns_true.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_update_comment/updates_the_message_on_a_comment.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_auth_token/returns_the_organization_the_auth_token_belongs_to.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_user_credentials/returns_users_organizations.yml +71 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_auth_token/lists_current_user_s_projects_in_the_organization.yml +88 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_user_credentials/lists_current_user_s_projects_in_the_organization.yml +91 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_error/returns_a_single_error.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_errors_on_the_project.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_update_errors/updates_and_returns_the_updated_errors.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/lists_all_error_events.yml +73 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_event/returns_the_specified_event.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_events/returns_the_a_list_of_project_errors.yml +73 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_latest_event/returns_the_last_event_on_an_error.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/_create_organization/creates_a_new_organization.yml +71 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_delete_organization/deletes_the_organization.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_organization/returns_the_requested_organization.yml +139 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_update_organization/updates_and_returns_the_organization.yml +139 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_new_project.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_delete_project/deletes_the_project.yml +127 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_project/returns_the_requested_project.yml +133 -0
- 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 +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_update_project/updates_and_returns_the_project.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_error_trends_in_bucket_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_project_trends_in_bucket_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_project_trends_in_resolution_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_trends_in_resolution_form.yml +68 -0
- data/spec/spec_helper.rb +32 -30
- metadata +167 -115
- data/.travis.yml +0 -9
- data/lib/bugsnag/api/client/accounts.rb +0 -44
- data/lib/bugsnag/api/client/users.rb +0 -99
- data/spec/bugsnag/api/client/accounts_spec.rb +0 -45
- data/spec/bugsnag/api/client/users_spec.rb +0 -105
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/returns_the_requested_account.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/when_using_account_credentials/returns_the_account.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_accounts/returns_all_accounts.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_comments/returns_all_comments_on_an_error.yml +0 -107
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/created_a_comment.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_comment/returns_a_comment.yml +0 -97
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_delete_comment/deletes_an_existing_comment.yml +0 -92
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_update_comment/updates_an_existing_comment.yml +0 -97
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_all_errors_on_an_project.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_error/returns_an_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_reopen_error/reopens_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_resolve_error/resolves_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_update_error/updates_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/returns_all_events_on_an_error.yml +0 -64
- data/spec/cassettes/Bugsnag_Api_Client_Events/_project_events/returns_all_events_on_a_project.yml +0 -64
- data/spec/cassettes/Bugsnag_Api_Client_Events/with_event/_event/returns_an_event.yml +0 -56
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/returns_all_projects_on_an_account.yml +0 -61
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/when_using_account_credentials/returns_all_projects.yml +0 -63
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_project_on_an_account.yml +0 -50
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_user_projects/returns_all_projects_for_a_user.yml +0 -61
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_delete_project/deletes_an_existing_project.yml +0 -91
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_project/returns_a_project.yml +0 -95
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_update_project/updates_an_existing_project.yml +0 -95
- data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/returns_all_users_on_an_account.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/when_using_account_credentials/returns_all_users.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Users/_invite_user/invites_a_user_to_an_account.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/_project_users/returns_all_users_for_a_project.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Users/_user/returns_a_user.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/_user/when_using_user_credentials/returns_the_authed_user.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_remove_user/removes_a_user_from_an_account.yml +0 -89
- data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_update_user_permissions/updates_a_users_permissions.yml +0 -93
data/bugsnag-api.gemspec
CHANGED
@@ -18,13 +18,49 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
|
21
|
+
if RUBY_VERSION < "2.2.0"
|
22
|
+
spec.add_dependency "sawyer", '0.8.1'
|
23
|
+
|
24
|
+
spec.add_development_dependency "rake", "< 12.0.0"
|
25
|
+
spec.add_development_dependency "rubocop", "0.41.2"
|
26
|
+
spec.add_development_dependency "faker", "1.3.0"
|
27
|
+
|
28
|
+
# i18n is used by faker
|
29
|
+
spec.add_development_dependency "i18n", "< 1.0.0"
|
30
|
+
|
31
|
+
# crack is used by webmock
|
32
|
+
spec.add_development_dependency "crack", "< 0.4.5"
|
33
|
+
else
|
34
|
+
spec.add_dependency "sawyer", '~> 0.8.1'
|
35
|
+
|
36
|
+
spec.add_development_dependency "rake"
|
37
|
+
spec.add_development_dependency "rubocop", "~> 0.52.1"
|
38
|
+
spec.add_development_dependency "faker", "> 1.7.3"
|
39
|
+
end
|
40
|
+
|
41
|
+
if RUBY_VERSION < "2.0.0"
|
42
|
+
spec.add_development_dependency "json", "< 2.0.0"
|
43
|
+
spec.add_development_dependency "webmock", "2.3.2"
|
44
|
+
spec.add_development_dependency "addressable", "2.3.6"
|
45
|
+
|
46
|
+
# hashdiff is used by webmock
|
47
|
+
spec.add_development_dependency "hashdiff", "< 0.3.8"
|
48
|
+
|
49
|
+
# parser is used by rubocop
|
50
|
+
spec.add_development_dependency "parser", "< 2.5.0"
|
51
|
+
else
|
52
|
+
spec.add_development_dependency "json"
|
53
|
+
spec.add_development_dependency "webmock", "> 2.3.2"
|
54
|
+
spec.add_development_dependency "addressable", "> 2.3.6"
|
55
|
+
end
|
56
|
+
|
57
|
+
# public_suffix is used by addressable & sawyer
|
58
|
+
if RUBY_VERSION < "2.0.0"
|
59
|
+
spec.add_development_dependency "public_suffix", "< 1.5.0"
|
60
|
+
elsif RUBY_VERSION < "2.1.0"
|
61
|
+
spec.add_development_dependency "public_suffix", "< 3.0.0"
|
62
|
+
end
|
22
63
|
|
23
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
-
spec.add_development_dependency "rake"
|
25
64
|
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
-
spec.add_development_dependency "webmock"
|
27
|
-
spec.add_development_dependency "faker"
|
28
65
|
spec.add_development_dependency "vcr", "~> 2.9"
|
29
|
-
spec.add_development_dependency "json"
|
30
66
|
end
|
data/config/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
global.yml
|
data/docker-compose.yml
ADDED
data/lib/bugsnag/api/client.rb
CHANGED
@@ -1,25 +1,33 @@
|
|
1
1
|
require "sawyer"
|
2
2
|
|
3
|
-
require "bugsnag/api/client/
|
4
|
-
require "bugsnag/api/client/
|
3
|
+
require "bugsnag/api/client/organizations"
|
4
|
+
require "bugsnag/api/client/collaborators"
|
5
|
+
require "bugsnag/api/client/projects"
|
6
|
+
require "bugsnag/api/client/eventfields"
|
7
|
+
require "bugsnag/api/client/currentuser"
|
5
8
|
require "bugsnag/api/client/errors"
|
6
9
|
require "bugsnag/api/client/events"
|
7
|
-
require "bugsnag/api/client/
|
8
|
-
require "bugsnag/api/client/
|
10
|
+
require "bugsnag/api/client/pivots"
|
11
|
+
require "bugsnag/api/client/trends"
|
12
|
+
require "bugsnag/api/client/comments"
|
9
13
|
|
10
14
|
module Bugsnag
|
11
15
|
module Api
|
12
16
|
|
13
17
|
# Client for the Bugsnag API
|
14
18
|
#
|
15
|
-
# @see
|
19
|
+
# @see http://docs.bugsnagapiv2.apiary.io/
|
16
20
|
class Client
|
17
|
-
include Bugsnag::Api::Client::
|
18
|
-
include Bugsnag::Api::Client::
|
21
|
+
include Bugsnag::Api::Client::Organizations
|
22
|
+
include Bugsnag::Api::Client::Collaborators
|
23
|
+
include Bugsnag::Api::Client::Projects
|
24
|
+
include Bugsnag::Api::Client::EventFields
|
25
|
+
include Bugsnag::Api::Client::CurrentUser
|
19
26
|
include Bugsnag::Api::Client::Errors
|
20
27
|
include Bugsnag::Api::Client::Events
|
21
|
-
include Bugsnag::Api::Client::
|
22
|
-
include Bugsnag::Api::Client::
|
28
|
+
include Bugsnag::Api::Client::Pivots
|
29
|
+
include Bugsnag::Api::Client::Trends
|
30
|
+
include Bugsnag::Api::Client::Comments
|
23
31
|
|
24
32
|
# Header keys that can be passed in options hash to {#get},{#head}
|
25
33
|
CONVENIENCE_HEADERS = Set.new([:accept, :content_type])
|
@@ -135,11 +143,25 @@ module Bugsnag
|
|
135
143
|
!!configuration.auth_token
|
136
144
|
end
|
137
145
|
|
146
|
+
# Merges hashes together cleanly, favouring RHS values
|
147
|
+
#
|
148
|
+
# @return [Hash]
|
149
|
+
def deep_merge(l_hash, r_hash)
|
150
|
+
l_hash.merge(r_hash) do |_key, l_val, r_val|
|
151
|
+
if l_val.is_a?(Hash) && r_val.is_a?(Hash)
|
152
|
+
deep_merge(l_val, r_val)
|
153
|
+
else
|
154
|
+
r_val
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
138
158
|
|
139
159
|
private
|
140
160
|
def agent
|
141
161
|
@agent ||= Sawyer::Agent.new(configuration.endpoint, sawyer_options) do |http|
|
142
162
|
http.headers[:content_type] = "application/json"
|
163
|
+
http.headers[:'X-Version'] = "2"
|
164
|
+
http.headers[:'X-Bugsnag-Api'] = "true"
|
143
165
|
http.headers[:user_agent] = configuration.user_agent
|
144
166
|
|
145
167
|
if basic_authenticated?
|
@@ -163,7 +185,7 @@ module Bugsnag
|
|
163
185
|
end
|
164
186
|
end
|
165
187
|
|
166
|
-
@last_response = response = agent.call(method,
|
188
|
+
@last_response = response = agent.call(method, path.to_s, data, options)
|
167
189
|
response.data
|
168
190
|
end
|
169
191
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Bugsnag
|
2
|
+
module Api
|
3
|
+
class Client
|
4
|
+
|
5
|
+
# Methods for the Organizations Collaborators API
|
6
|
+
#
|
7
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators
|
8
|
+
module Collaborators
|
9
|
+
# View a Collaborator
|
10
|
+
#
|
11
|
+
# @return [Sawyer::Resource] Collaborator
|
12
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/view-a-collaborator
|
13
|
+
def collaborator(org_id, collaborator_id, options = {})
|
14
|
+
get "organizations/#{org_id}/collaborators/#{collaborator_id}", options
|
15
|
+
end
|
16
|
+
|
17
|
+
# List Collaborators
|
18
|
+
#
|
19
|
+
# @argument project_id [String] ID of project to get collaborators from (conflicts with org_id)
|
20
|
+
# @argument org_id [String] ID of organization to get collaborators from (conflicts with project_id)
|
21
|
+
#
|
22
|
+
# @option per_page [Number] Amount of results per-page
|
23
|
+
# @return [Array<Sawyer::Resource>] List of Collaborators
|
24
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/list-collaborators
|
25
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/list-collaborators-on-a-project
|
26
|
+
def collaborators(org_id = nil, project_id = nil, options = {})
|
27
|
+
if !org_id.nil?
|
28
|
+
paginate "organizations/#{org_id}/collaborators", options
|
29
|
+
elsif !project_id.nil?
|
30
|
+
paginate "projects/#{project_id}/collaborators", options
|
31
|
+
else
|
32
|
+
raise ArgumentError, "Must supply either an org_id or a project_id"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Invite Collaborators
|
37
|
+
#
|
38
|
+
# @argument emails [(Array<String>/String)] A (list of emails/singular email) to invite
|
39
|
+
#
|
40
|
+
# @option project_ids [Array<String>] The ids in the organization the user(s) should have access to
|
41
|
+
# @option admin [Boolean] Whether to give admin permissions. Admins have access to all projects
|
42
|
+
# @return [Array<Sawyer::Resource>] Collaborator details
|
43
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/bulk-invite-collaborators
|
44
|
+
def invite_collaborators(org_id, emails, options = {})
|
45
|
+
case emails
|
46
|
+
when String
|
47
|
+
post "organizations/#{org_id}/collaborators", options.merge({:email => emails})
|
48
|
+
when Array
|
49
|
+
post "organizations/#{org_id}/collaborators/bulk_invite", options.merge({:emails => emails})
|
50
|
+
else
|
51
|
+
raise ArgumentError, "Emails must be a String or an Array"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Update a Collaborator's permissions
|
56
|
+
#
|
57
|
+
# @option project_ids [Array<String>] Ids in the organziation the user should have access to
|
58
|
+
# @option admin [Boolean] Whether to give admin permissions. Admins have access to all projects
|
59
|
+
# @return [Sawyer::Resource] Collaborator details
|
60
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/update-a-collaborator's-permissions
|
61
|
+
def update_collaborator_permissions(org_id, id, options = {})
|
62
|
+
patch "organizations/#{org_id}/collaborators/#{id}", options
|
63
|
+
end
|
64
|
+
|
65
|
+
# Delete a Collaborator
|
66
|
+
#
|
67
|
+
# @return
|
68
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/delete-a-collaborator
|
69
|
+
def delete_collaborator(org_id, id, options = {})
|
70
|
+
boolean_from_response :delete, "organizations/#{org_id}/collaborators/#{id}", options
|
71
|
+
end
|
72
|
+
|
73
|
+
# View Projects a Collaborator has access to
|
74
|
+
#
|
75
|
+
# @option sort [String] Which field to sort the results by. Possible values: created_at
|
76
|
+
# @option direction [String] Which direction to sort the results by. Possible values: asc, desc
|
77
|
+
# @option per_page [Number] Number of results per page
|
78
|
+
# @return [Array<Sawyer::Resource>] A list of projects the collaborator belongs to
|
79
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/organizations/collaborators/view-projects-a-collaborator-has-access-to
|
80
|
+
def view_collaborator_projects(org_id, id, options = {})
|
81
|
+
paginate "organizations/#{org_id}/collaborators/#{id}/projects", options
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -2,61 +2,52 @@ module Bugsnag
|
|
2
2
|
module Api
|
3
3
|
class Client
|
4
4
|
|
5
|
-
# Methods for the
|
5
|
+
# Methods for the Errors API
|
6
6
|
#
|
7
|
-
# @see
|
7
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/comments
|
8
8
|
module Comments
|
9
|
-
# List an
|
9
|
+
# List Comments on an Error
|
10
10
|
#
|
11
|
-
# @
|
12
|
-
# @
|
13
|
-
# @
|
14
|
-
# @
|
15
|
-
#
|
16
|
-
|
17
|
-
|
11
|
+
# @option offset [Number] The pagination offset (not required for general use)
|
12
|
+
# @option sort [String] Comments are only sortable by creation time e.g. "created_at"
|
13
|
+
# @option direction [String] Which direction to sort the result by, one of: asc, desc
|
14
|
+
# @option per_page [Number] How many results to return per page
|
15
|
+
# @return [Array<Sawyer::Resource>] List of Error Comments
|
16
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/comments/list-comments-on-an-error
|
17
|
+
def comments(project_id, error_id, options = {})
|
18
|
+
paginate "projects/#{project_id}/errors/#{error_id}/comments", options
|
18
19
|
end
|
19
20
|
|
20
|
-
#
|
21
|
+
# View an Comment
|
21
22
|
#
|
22
|
-
# @
|
23
|
-
# @
|
24
|
-
|
25
|
-
|
26
|
-
# Bugsnag::Api.comment("50baed119bf39c1431000004")
|
27
|
-
def comment(comment, options = {})
|
28
|
-
get "comments/#{comment}", options
|
23
|
+
# @return [Sawyer::Resource] Requested Comment
|
24
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/comments/view-a-comment
|
25
|
+
def comment(id, options = {})
|
26
|
+
get "comments/#{id}", options
|
29
27
|
end
|
30
28
|
|
31
|
-
# Create a
|
29
|
+
# Create a Comment on an Error
|
32
30
|
#
|
33
|
-
# @
|
34
|
-
# @
|
35
|
-
|
36
|
-
|
37
|
-
# Bugsnag::Api.create_comment("515fb9337c1074f6fd000009", message: "Oops!")
|
38
|
-
def create_comment(error, message, options = {})
|
39
|
-
post "errors/#{error}/comments", options.merge({:message => message})
|
31
|
+
# @return [Sawyer::Resource] The new Comment
|
32
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/comments/create-a-comment-on-an-error
|
33
|
+
def create_comment(project_id, error_id, message, options = {})
|
34
|
+
post "projects/#{project_id}/errors/#{error_id}/comments", options.merge({:message => message})
|
40
35
|
end
|
41
36
|
|
42
|
-
# Update a
|
37
|
+
# Update a Comment
|
43
38
|
#
|
44
|
-
# @
|
45
|
-
# @
|
46
|
-
|
47
|
-
|
48
|
-
# Bugsnag::Api.update_comment("50baed119bf39c1431000004", message: "Fixed!")
|
49
|
-
def update_comment(comment, message, options = {})
|
50
|
-
patch "comments/#{comment}", options.merge({:message => message})
|
39
|
+
# @return [Sawyer::Resource] The updated Comment
|
40
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/comments/update-a-comment
|
41
|
+
def update_comment(id, message, options = {})
|
42
|
+
patch "comments/#{id}", options.merge({:message => message})
|
51
43
|
end
|
52
44
|
|
53
|
-
# Delete a
|
45
|
+
# Delete a Comment
|
54
46
|
#
|
55
|
-
# @
|
56
|
-
# @
|
57
|
-
|
58
|
-
|
59
|
-
boolean_from_response :delete, "comments/#{comment}", options
|
47
|
+
# @return
|
48
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/comments/delete-a-comment
|
49
|
+
def delete_comment(id, options = {})
|
50
|
+
boolean_from_response :delete, "comments/#{id}", options
|
60
51
|
end
|
61
52
|
end
|
62
53
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Bugsnag
|
2
|
+
module Api
|
3
|
+
class Client
|
4
|
+
|
5
|
+
# Methods for theCurrent User API
|
6
|
+
#
|
7
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/current-user
|
8
|
+
module CurrentUser
|
9
|
+
# List the Current User's Organizations
|
10
|
+
#
|
11
|
+
# @option admin [Boolean] If only Organizations the user is an admin of should be returned
|
12
|
+
# @option per_page [Number] Number of results to return per-page
|
13
|
+
# @return [Array<Sawyer::Resource>] List of Organizations
|
14
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/current-user/organizations/list-the-current-user's-organizations
|
15
|
+
def organizations(options = {})
|
16
|
+
paginate "user/organizations", options
|
17
|
+
end
|
18
|
+
|
19
|
+
# List the Current User's Projects
|
20
|
+
#
|
21
|
+
# @option sort [String] Which field to sort the results by, one of: created_at
|
22
|
+
# @option direction [String] Which direction to sort the results by, on of: asc, desc
|
23
|
+
# @option per_page [Number] Number of results to return per-page
|
24
|
+
# @return [Array<Sawyer::Resource>] List of Projects
|
25
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/current-user/organizations/list-the-current-user's-projects
|
26
|
+
def projects(org_id, options = {})
|
27
|
+
paginate "organizations/#{org_id}/projects", options
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -4,70 +4,65 @@ module Bugsnag
|
|
4
4
|
|
5
5
|
# Methods for the Errors API
|
6
6
|
#
|
7
|
-
# @see
|
7
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors
|
8
8
|
module Errors
|
9
|
-
# List a
|
9
|
+
# List the Errors on a Project
|
10
10
|
#
|
11
|
-
# @
|
12
|
-
# @return [Array<Sawyer::Resource>] List of errors
|
13
|
-
# @see https://bugsnag.com/docs/api/errors#list-a-project-s-errors
|
14
|
-
# @example
|
15
|
-
# Bugsnag::Api.errors("50baed119bf39c1431000004")
|
16
|
-
def errors(project, options = {})
|
17
|
-
paginate "projects/#{project}/errors", options
|
18
|
-
end
|
19
|
-
|
20
|
-
# Get a single error
|
11
|
+
# @argument id [String] optional ID of error to retrieve
|
21
12
|
#
|
22
|
-
# @
|
23
|
-
# @
|
24
|
-
# @
|
25
|
-
# @
|
26
|
-
#
|
27
|
-
|
28
|
-
|
13
|
+
# @option base [String] Only Error Events occuring before this time will be returned
|
14
|
+
# @option sort [String] Which field to sort by, one of: last_seen, first_seen, users, events, unsorted
|
15
|
+
# @option direction [String] Which direction to sort the result by, one of: asc, desc
|
16
|
+
# @option filters [Filters] An optional filters object, see http://docs.bugsnagapiv2.apiary.io/#introduction/filtering
|
17
|
+
# @return [Array<Sawyer::Resource>] List of Project Errors
|
18
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/list-the-errors-on-a-project
|
19
|
+
def errors(project_id, id=nil, options = {})
|
20
|
+
if id.nil?
|
21
|
+
paginate "projects/#{project_id}/errors", options
|
22
|
+
else
|
23
|
+
get "projects/#{project_id}/errors/#{id}", options
|
24
|
+
end
|
29
25
|
end
|
30
26
|
|
31
|
-
|
32
|
-
#
|
33
|
-
# @param error [String] A Bugsnag error
|
34
|
-
# @return [Sawyer::Resource] The updated error
|
35
|
-
# @see https://bugsnag.com/docs/api/errors#update-an-error-s-status
|
36
|
-
# @example
|
37
|
-
# Bugsnag::Api.resolve_error("518031bcd775355c48a1cd4e")
|
38
|
-
def resolve_error(error, options = {})
|
39
|
-
patch "errors/#{error}", options.merge({:resolved => true})
|
40
|
-
end
|
27
|
+
alias error errors
|
41
28
|
|
42
|
-
#
|
29
|
+
# Update an Error
|
43
30
|
#
|
44
|
-
# @
|
45
|
-
# @return [Sawyer::Resource] The updated error
|
46
|
-
# @see https://bugsnag.com/docs/api/errors#update-an-error-s-status
|
47
|
-
# @example
|
48
|
-
# Bugsnag::Api.reopen_error("518031bcd775355c48a1cd4e")
|
49
|
-
def reopen_error(error, options = {})
|
50
|
-
patch "errors/#{error}", options.merge({:resolved => false})
|
51
|
-
end
|
52
|
-
|
53
|
-
# Update an error
|
31
|
+
# @argument ids [(Array<String>/String)] An Id, or array of Ids to update
|
54
32
|
#
|
55
|
-
# @
|
56
|
-
# @
|
57
|
-
# @
|
58
|
-
# @
|
59
|
-
#
|
60
|
-
|
61
|
-
|
33
|
+
# @option severity [String] The Error's new severity. One of: info, warning, error
|
34
|
+
# @option assigned_collaborator_id [String] THe collaborator to assign to the Error
|
35
|
+
# @option issue_url [String] Updates to link to an existing 3rd party issue
|
36
|
+
# @option issue_title [String] Updates the issues title
|
37
|
+
# @option reopen_rules [Object] Snooze rules for automatically reopening the Error
|
38
|
+
# @return [Sawyer::Resource] Updated Error
|
39
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/update-an-error
|
40
|
+
def update_errors(project_id, ids, operation, options = {})
|
41
|
+
case ids
|
42
|
+
when String
|
43
|
+
patch "projects/#{project_id}/errors/#{ids}", options.merge({:operation => operation})
|
44
|
+
when Array
|
45
|
+
defaults = {:operation => operation, :query => {:error_ids => ids.join(' ')}}
|
46
|
+
merged_opts = deep_merge(defaults, options)
|
47
|
+
patch "projects/#{project_id}/errors", merged_opts
|
48
|
+
else
|
49
|
+
raise ArgumentError, "ids must be a String or an Array"
|
50
|
+
end
|
62
51
|
end
|
63
52
|
|
64
|
-
# Delete an
|
53
|
+
# Delete an Error
|
54
|
+
#
|
55
|
+
# @argument error_id [String] ID of error to delete (conflicts with project_id)
|
56
|
+
# @argument project_id [String] Id of project to delete all errors from (conflicts with error_id)
|
65
57
|
#
|
66
|
-
# @
|
67
|
-
# @
|
68
|
-
|
69
|
-
|
70
|
-
|
58
|
+
# @return
|
59
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/delete-an-error
|
60
|
+
def delete_errors(project_id, error_id=nil, options = {})
|
61
|
+
if !error_id.nil?
|
62
|
+
boolean_from_response :delete, "projects/#{project_id}/errors/#{error_id}", options
|
63
|
+
else
|
64
|
+
boolean_from_response :delete, "projects/#{project_id}/errors", options
|
65
|
+
end
|
71
66
|
end
|
72
67
|
end
|
73
68
|
end
|