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.
- checksums.yaml +4 -4
- data/.travis.yml +14 -3
- data/CHANGELOG.md +32 -0
- data/CONTRIBUTING.md +40 -0
- data/README.md +126 -111
- data/bugsnag-api.gemspec +4 -3
- data/lib/bugsnag/api/client.rb +18 -9
- data/lib/bugsnag/api/client/collaborators.rb +87 -0
- data/lib/bugsnag/api/client/comments.rb +31 -40
- data/lib/bugsnag/api/client/currentuser.rb +33 -0
- data/lib/bugsnag/api/client/errors.rb +45 -51
- data/lib/bugsnag/api/client/eventfields.rb +50 -0
- data/lib/bugsnag/api/client/events.rb +38 -32
- data/lib/bugsnag/api/client/organizations.rb +46 -0
- data/lib/bugsnag/api/client/pivots.rb +43 -0
- data/lib/bugsnag/api/client/projects.rb +37 -63
- data/lib/bugsnag/api/client/trends.rb +38 -0
- data/lib/bugsnag/api/error.rb +4 -0
- data/lib/bugsnag/api/version.rb +1 -1
- 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 +8 -3
- data/spec/cassettes/Bugsnag_Api_Client/_get/handles_query_params.yml +45 -27
- data/spec/cassettes/Bugsnag_Api_Client/_last_response/caches_the_last_agent_response.yml +45 -27
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/creates_and_returns_a_collaborator.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/invites_multiple_collaborators.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborator/returns_a_collaborator.yml +157 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_organization_collaborators.yml +160 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_project_collaborators.yml +160 -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 +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_delete_collaborator/deletes_a_collaborator.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_update_collaborator_permissions/updates_and_returns_the_collaborator.yml +157 -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 +159 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/creates_a_comment_on_the_error.yml +82 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comment/retrieves_the_comment_specified.yml +159 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comments/retrieves_all_comments_on_an_error.yml +161 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_delete_comment/deletes_the_comment_and_returns_true.yml +82 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_update_comment/updates_the_message_on_a_comment.yml +159 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_auth_token/returns_the_organization_the_auth_token_belongs_to.yml +81 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_user_credentials/returns_users_organizations.yml +85 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_auth_token/lists_current_user_s_projects_in_the_organization.yml +82 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_user_credentials/lists_current_user_s_projects_in_the_organization.yml +86 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_error/returns_a_single_error.yml +82 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_errors_on_the_project.yml +84 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_update_errors/updates_and_returns_the_updated_errors.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/lists_all_error_events.yml +84 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_event/returns_the_specified_event.yml +253 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_events/returns_the_a_list_of_project_errors.yml +84 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_latest_event/returns_the_last_event_on_an_error.yml +253 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/_create_organization/creates_a_new_organization.yml +84 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_delete_organization/deletes_the_organization.yml +159 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_organization/returns_the_requested_organization.yml +165 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_update_organization/updates_and_returns_the_organization.yml +165 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_new_project.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_delete_project/deletes_the_project.yml +151 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_project/returns_the_requested_project.yml +157 -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 +157 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_update_project/updates_and_returns_the_project.yml +157 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_error_trends_in_bucket_form.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_project_trends_in_bucket_form.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_project_trends_in_resolution_form.yml +80 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_trends_in_resolution_form.yml +80 -0
- data/spec/spec_helper.rb +29 -27
- metadata +124 -83
- 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,14 @@ 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
|
-
spec.add_dependency "sawyer", '
|
21
|
+
spec.add_dependency "sawyer", '~> 0.8.1'
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
-
spec.add_development_dependency "webmock"
|
27
|
-
spec.add_development_dependency "
|
26
|
+
spec.add_development_dependency "webmock", RUBY_VERSION <= '2.0.0' ? '2.3.2': '>2.3.2'
|
27
|
+
spec.add_development_dependency "addressable", RUBY_VERSION <= '2.0.0' ? '2.3.6': '>2.3.6'
|
28
|
+
spec.add_development_dependency "faker", RUBY_VERSION <= '2.0.0' ? '1.3.0' : '>1.7.3'
|
28
29
|
spec.add_development_dependency "vcr", "~> 2.9"
|
29
30
|
spec.add_development_dependency "json"
|
30
31
|
end
|
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])
|
@@ -140,6 +148,7 @@ module Bugsnag
|
|
140
148
|
def agent
|
141
149
|
@agent ||= Sawyer::Agent.new(configuration.endpoint, sawyer_options) do |http|
|
142
150
|
http.headers[:content_type] = "application/json"
|
151
|
+
http.headers[:'X-Version'] = "2"
|
143
152
|
http.headers[:user_agent] = configuration.user_agent
|
144
153
|
|
145
154
|
if basic_authenticated?
|
@@ -0,0 +1,87 @@
|
|
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
|
87
|
+
|
@@ -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,33 @@
|
|
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
|
33
|
+
|
@@ -4,72 +4,66 @@ 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
|
-
# @
|
13
|
-
# @
|
14
|
-
# @
|
15
|
-
#
|
16
|
-
|
17
|
-
|
11
|
+
# @option base [String] Only Error Events occuring before this time will be returned
|
12
|
+
# @option sort [String] Which field to sort by, one of: last_seen, first_seen, users, events, unsorted
|
13
|
+
# @option direction [String] Which direction to sort the result by, one of: asc, desc
|
14
|
+
# @option filters [Filters] An optional filters object, see http://docs.bugsnagapiv2.apiary.io/#introduction/filtering
|
15
|
+
# @return [Array<Sawyer::Resource>] List of Project Errors
|
16
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/list-the-errors-on-a-project
|
17
|
+
def errors(project_id, id=nil, options = {})
|
18
|
+
paginate "projects/#{project_id}/errors", options
|
18
19
|
end
|
19
20
|
|
20
|
-
#
|
21
|
+
# View an Error
|
21
22
|
#
|
22
|
-
# @
|
23
|
-
# @
|
24
|
-
|
25
|
-
|
26
|
-
# Bugsnag::Api.error("518031bcd775355c48a1cd4e")
|
27
|
-
def error(error, options = {})
|
28
|
-
get "errors/#{error}", options
|
23
|
+
# @return [Sawyer::Resource] Requested Error
|
24
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/view-an-error
|
25
|
+
def error(project_id, id, options = {})
|
26
|
+
get "projects/#{project_id}/errors/#{id}", options
|
29
27
|
end
|
30
28
|
|
31
|
-
#
|
29
|
+
# Update an Error
|
32
30
|
#
|
33
|
-
# @
|
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
|
41
|
-
|
42
|
-
# Re-open an error
|
31
|
+
# @argument ids [(Array<String>/String)] An Id, or array of Ids to update
|
43
32
|
#
|
44
|
-
# @
|
45
|
-
# @
|
46
|
-
# @
|
47
|
-
# @
|
48
|
-
#
|
49
|
-
|
50
|
-
|
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
|
+
patch "projects/#{project_id}/errors", options.merge({:operation => operation, :query => {:error_ids => ids.join(' ')}})
|
46
|
+
else
|
47
|
+
raise ArgumentError, "ids must be a String or an Array"
|
48
|
+
end
|
51
49
|
end
|
52
50
|
|
53
|
-
#
|
51
|
+
# Delete an Error
|
54
52
|
#
|
55
|
-
# @
|
56
|
-
# @
|
57
|
-
# @see https://bugsnag.com/docs/api/errors#update-an-error-s-status
|
58
|
-
# @example
|
59
|
-
# Bugsnag::Api.update_error("518031bcd775355c48a1cd4e")
|
60
|
-
def update_error(error, options = {})
|
61
|
-
patch "errors/#{error}", options
|
62
|
-
end
|
63
|
-
|
64
|
-
# Delete an error
|
53
|
+
# @argument error_id [String] ID of error to delete (conflicts with project_id)
|
54
|
+
# @argument project_id [String] Id of project to delete all errors from (conflicts with error_id)
|
65
55
|
#
|
66
|
-
# @
|
67
|
-
# @
|
68
|
-
|
69
|
-
|
70
|
-
|
56
|
+
# @return
|
57
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/errors/errors/delete-an-error
|
58
|
+
def delete_errors(project_id, error_id=nil, options = {})
|
59
|
+
if !error_id.nil?
|
60
|
+
boolean_from_response :delete, "projects/#{project_id}/errors/#{error_id}", options
|
61
|
+
else
|
62
|
+
boolean_from_response :delete, "projects/#{project_id}/errors", options
|
63
|
+
end
|
71
64
|
end
|
72
65
|
end
|
73
66
|
end
|
74
67
|
end
|
75
68
|
end
|
69
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Bugsnag
|
2
|
+
module Api
|
3
|
+
class Client
|
4
|
+
|
5
|
+
# Methods for the Project Event Fields API
|
6
|
+
#
|
7
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/projects/event-fields
|
8
|
+
module EventFields
|
9
|
+
# List the Event Fields for a Project
|
10
|
+
#
|
11
|
+
# @option per_page []Number] Number of results required per page
|
12
|
+
# @return [Array<Sawyer::Resource>] List of event fields
|
13
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/projects/event-fields/list-the-event-fields-for-a-project
|
14
|
+
def event_fields(project_id, options = {})
|
15
|
+
paginate "projects/#{project_id}/event_fields", options
|
16
|
+
end
|
17
|
+
|
18
|
+
# Create a custom Event Field
|
19
|
+
#
|
20
|
+
# @option reindex [Boolean] Whether to reindex historical events
|
21
|
+
# @option pivot_options [Object] Configuration for how this field will appear in pivots
|
22
|
+
# @return [Sawyer::Resource] New Event Field
|
23
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/projects/event-fields/create-a-custom-event-field
|
24
|
+
def create_event_field(project_id, display_id, path, filter_options, options = {})
|
25
|
+
post "projects/#{project_id}/event_fields", options.merge({:display_id => display_id, :path => path, :filter_options => filter_options})
|
26
|
+
end
|
27
|
+
|
28
|
+
# Update a custom Event Field
|
29
|
+
#
|
30
|
+
# @option reindex [Boolean] Whether to reindex historical events
|
31
|
+
# @option filter_options [Object] Configuration for how the field will appear in the Filter Bar
|
32
|
+
# @option pivot_options [Object] Configuration for how this field will appear in pivots
|
33
|
+
# @return [Sawyer::Resource] Updated Event Field
|
34
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/projects/event-fields/update-a-custom-event-field
|
35
|
+
def update_event_field(project_id, display_id, path, options = {})
|
36
|
+
patch "projects/#{id}/event_fields/#{display_id}", options.merge({:display_id => display_id, :path => path})
|
37
|
+
end
|
38
|
+
|
39
|
+
# Delete a custom Event Field
|
40
|
+
#
|
41
|
+
# @return
|
42
|
+
# @see http://docs.bugsnagapiv2.apiary.io/#reference/projects/event-fields/delete-a-custom-event-field
|
43
|
+
def delete_event_field(project_id, display_id, options = {})
|
44
|
+
boolean_from_resposne :delete, "project/#{project_id}/event_fields/#{display_id}", options
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|