honeybadger-api 1.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.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +189 -0
- data/Rakefile +1 -0
- data/honeybadger-api.gemspec +26 -0
- data/lib/honeybadger-api.rb +41 -0
- data/lib/honeybadger-api/client.rb +48 -0
- data/lib/honeybadger-api/comment.rb +47 -0
- data/lib/honeybadger-api/configuration.rb +12 -0
- data/lib/honeybadger-api/deploy.rb +46 -0
- data/lib/honeybadger-api/environment.rb +27 -0
- data/lib/honeybadger-api/fault.rb +63 -0
- data/lib/honeybadger-api/notice.rb +45 -0
- data/lib/honeybadger-api/paginator.rb +72 -0
- data/lib/honeybadger-api/project.rb +71 -0
- data/lib/honeybadger-api/request.rb +44 -0
- data/lib/honeybadger-api/team.rb +42 -0
- data/lib/honeybadger-api/team_invitation.rb +61 -0
- data/lib/honeybadger-api/team_member.rb +58 -0
- data/lib/honeybadger-api/user.rb +19 -0
- data/lib/honeybadger-api/version.rb +5 -0
- data/spec/comment_spec.rb +89 -0
- data/spec/deploy_spec.rb +82 -0
- data/spec/environment_spec.rb +31 -0
- data/spec/factories/comment_factory.rb +16 -0
- data/spec/factories/deploy_factory.rb +15 -0
- data/spec/factories/environment_factory.rb +14 -0
- data/spec/factories/fault_factory.rb +29 -0
- data/spec/factories/notice_factory.rb +14 -0
- data/spec/factories/project_factory.rb +44 -0
- data/spec/factories/team_factory.rb +16 -0
- data/spec/factories/team_invitation_factory.rb +27 -0
- data/spec/factories/team_member_factory.rb +17 -0
- data/spec/factories/user_factory.rb +10 -0
- data/spec/fault_spec.rb +132 -0
- data/spec/notice_spec.rb +81 -0
- data/spec/paginator_spec.rb +106 -0
- data/spec/project_spec.rb +151 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/team_invitation_spec.rb +98 -0
- data/spec/team_member_spec.rb +112 -0
- data/spec/team_spec.rb +68 -0
- data/spec/user_spec.rb +17 -0
- data/spec/version_spec.rb +7 -0
- metadata +195 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Environment
|
4
|
+
|
5
|
+
attr_reader :id, :name, :project_id, :updated_at, :created_at
|
6
|
+
|
7
|
+
# Public: Build a new instance of Environment
|
8
|
+
#
|
9
|
+
# opts - A Hash of attributes to initialize a Environment
|
10
|
+
#
|
11
|
+
# Returns a new Environment
|
12
|
+
def initialize(opts)
|
13
|
+
@id = opts[:id]
|
14
|
+
@name = opts[:name]
|
15
|
+
@notifications = opts[:notifications]
|
16
|
+
@project_id = opts[:project_id]
|
17
|
+
@updated_at = opts[:updated_at].nil? ? nil : DateTime.parse(opts[:updated_at])
|
18
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: Whether notification are raised.
|
22
|
+
def notifications?
|
23
|
+
@notifications
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Fault
|
4
|
+
|
5
|
+
attr_reader :id, :project_id, :klass, :action, :component, :message,
|
6
|
+
:environment, :notices_count, :comments_count, :last_notice_at, :created_at
|
7
|
+
|
8
|
+
# Public: Build a new instance of Fault
|
9
|
+
#
|
10
|
+
# opts - A Hash of attributes to initialize a Fault
|
11
|
+
#
|
12
|
+
# Returns a new Fault
|
13
|
+
def initialize(opts)
|
14
|
+
@id = opts[:id]
|
15
|
+
@project_id = opts[:project_id]
|
16
|
+
@klass = opts[:klass]
|
17
|
+
@action = opts[:action]
|
18
|
+
@component = opts[:component]
|
19
|
+
@message = opts[:message]
|
20
|
+
@environment = opts[:environment]
|
21
|
+
@ignored = opts[:ignored]
|
22
|
+
@resolved = opts[:resolved]
|
23
|
+
@notices_count = opts[:notices_count]
|
24
|
+
@comments_count = opts[:comments_count]
|
25
|
+
@last_notice_at = opts[:last_notice_at].nil? ? nil : DateTime.parse(opts[:last_notice_at])
|
26
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
27
|
+
end
|
28
|
+
|
29
|
+
# Public: Whether tha fault has been marked as ignored.
|
30
|
+
def ignored?
|
31
|
+
@ignored == true
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Whether tha fault has been marked as resolved.
|
35
|
+
def resolved?
|
36
|
+
@resolved == true
|
37
|
+
end
|
38
|
+
|
39
|
+
# Public: Find all faults for a given project.
|
40
|
+
def self.all(project_id)
|
41
|
+
path = "projects/#{project_id}/faults"
|
42
|
+
Honeybadger::Api::Request.all(path, handler)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Paginate all faults for a given project.
|
46
|
+
def self.paginate(project_id, filters = {})
|
47
|
+
path = "projects/#{project_id}/faults"
|
48
|
+
Honeybadger::Api::Request.paginate(path, handler, filters)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: Find a fault for a given project.
|
52
|
+
def self.find(project_id, fault_id)
|
53
|
+
path = "projects/#{project_id}/faults/#{fault_id}"
|
54
|
+
Honeybadger::Api::Request.find(path, handler)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Internal: The handler used to build objects from API responses.
|
58
|
+
def self.handler
|
59
|
+
Proc.new { |response| Fault.new(response) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Notice
|
4
|
+
|
5
|
+
attr_reader :id, :fault_id, :environment, :message, :request, :created_at
|
6
|
+
|
7
|
+
# Public: Build a new instance of Notice
|
8
|
+
#
|
9
|
+
# opts - A Hash of attributes to initialize a Notice
|
10
|
+
#
|
11
|
+
# Returns a new Notice
|
12
|
+
def initialize(opts)
|
13
|
+
@id = opts[:id]
|
14
|
+
@fault_id = opts[:fault_id]
|
15
|
+
@environment = opts[:environment]
|
16
|
+
@message = opts[:message]
|
17
|
+
@request = opts[:request]
|
18
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: Find all notices on a fault for a project.
|
22
|
+
def self.all(project_id, fault_id)
|
23
|
+
path = "projects/#{project_id}/faults/#{fault_id}/notices"
|
24
|
+
Honeybadger::Api::Request.all(path, handler)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: Paginate all notices on a fault for a project
|
28
|
+
def self.paginate(project_id, fault_id, filters = {})
|
29
|
+
path = "projects/#{project_id}/faults/#{fault_id}/notices"
|
30
|
+
Honeybadger::Api::Request.paginate(path, handler, filters)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Public: Find a notice on a fault for a project.
|
34
|
+
def self.find(project_id, fault_id, notice_id)
|
35
|
+
path = "projects/#{project_id}/faults/#{fault_id}/notices/#{notice_id}"
|
36
|
+
Honeybadger::Api::Request.find(path, handler)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Internal: The handler used to build objects from API responses.
|
40
|
+
def self.handler
|
41
|
+
Proc.new { |response| Notice.new(response) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Paginator
|
4
|
+
|
5
|
+
attr_reader :current_page, :total_page_count, :pages
|
6
|
+
|
7
|
+
def initialize(path, filters, handler)
|
8
|
+
@path = path
|
9
|
+
@filters = filters
|
10
|
+
@handler = handler
|
11
|
+
|
12
|
+
@pages = {}
|
13
|
+
|
14
|
+
@filters.merge!({ :page => 1 }) if !@filters.has_key?(:page)
|
15
|
+
response = Honeybadger::Api.client.get(@path, @filters)
|
16
|
+
|
17
|
+
@current_page = response[:current_page]
|
18
|
+
@total_page_count = response[:num_pages]
|
19
|
+
|
20
|
+
@pages[current_page] = response[:results].map do |r|
|
21
|
+
@handler.call(r)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def next?
|
26
|
+
current_page < total_page_count
|
27
|
+
end
|
28
|
+
|
29
|
+
def previous?
|
30
|
+
current_page > 1
|
31
|
+
end
|
32
|
+
|
33
|
+
def next
|
34
|
+
if next?
|
35
|
+
response = Honeybadger::Api.client.get(@path, @filters.merge({:page => current_page + 1}))
|
36
|
+
|
37
|
+
@current_page = response[:current_page]
|
38
|
+
@total_page_count = response[:num_pages]
|
39
|
+
|
40
|
+
@pages[current_page] = response[:results].map do |r|
|
41
|
+
@handler.call(r)
|
42
|
+
end
|
43
|
+
|
44
|
+
@pages[current_page]
|
45
|
+
else
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def previous
|
51
|
+
if previous?
|
52
|
+
response = Honeybadger::Api.client.get(@path, @filters.merge({:page => current_page - 1}))
|
53
|
+
|
54
|
+
@current_page = response[:current_page]
|
55
|
+
@total_page_count = response[:num_pages]
|
56
|
+
|
57
|
+
@pages[current_page] = response[:results].map do |r|
|
58
|
+
@handler.call(r)
|
59
|
+
end
|
60
|
+
|
61
|
+
@pages[current_page]
|
62
|
+
else
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def collection
|
68
|
+
@pages.values.flatten
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Project
|
4
|
+
|
5
|
+
attr_reader :id, :name, :owner, :users, :token, :environments,
|
6
|
+
:fault_count, :unresolved_fault_count, :last_notice_at, :created_at
|
7
|
+
|
8
|
+
# Public: Build a new instance of Project
|
9
|
+
#
|
10
|
+
# opts - A Hash of attributes to initialize a Project
|
11
|
+
#
|
12
|
+
# Returns a new Project
|
13
|
+
def initialize(opts)
|
14
|
+
@id = opts[:id]
|
15
|
+
@name = opts[:name]
|
16
|
+
@owner = User.new(opts[:owner][:name], opts[:owner][:email])
|
17
|
+
@users = opts[:users].collect { |user| User.new(user[:name], user[:email]) }
|
18
|
+
@token = opts[:token]
|
19
|
+
@environments = opts[:environments].collect do |env|
|
20
|
+
Environment.new(env)
|
21
|
+
end
|
22
|
+
@active = opts[:active]
|
23
|
+
@disable_public_links = opts[:disable_public_links]
|
24
|
+
@fault_count = opts[:fault_count]
|
25
|
+
@unresolved_fault_count = opts[:unresolved_fault_count]
|
26
|
+
@last_notice_at = opts[:last_notice_at].nil? ? nil : DateTime.parse(opts[:last_notice_at])
|
27
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
28
|
+
end
|
29
|
+
|
30
|
+
# Public: Whether the project is active.
|
31
|
+
def active?
|
32
|
+
@active == true
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Whether the project is inactive.
|
36
|
+
def inactive?
|
37
|
+
@active == false
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public: Whether links are public.
|
41
|
+
def public_links?
|
42
|
+
@disable_public_links == false
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Whether links are private.
|
46
|
+
def private_links?
|
47
|
+
@disable_public_links == true
|
48
|
+
end
|
49
|
+
|
50
|
+
# Public: Find all of the project.
|
51
|
+
def self.all
|
52
|
+
Honeybadger::Api::Request.all("projects", handler)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Public: Paginate all of the project.
|
56
|
+
def self.paginate(filters = {})
|
57
|
+
Honeybadger::Api::Request.paginate("projects", handler, filters)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Public: Find a project.
|
61
|
+
def self.find(project_id)
|
62
|
+
Honeybadger::Api::Request.find("projects/#{project_id}", handler)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Internal: The handler used to build objects from API responses.
|
66
|
+
def self.handler
|
67
|
+
Proc.new { |response| Project.new(response) }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Request
|
4
|
+
|
5
|
+
def initialize(path, handler, filters = {})
|
6
|
+
@path = path
|
7
|
+
@handler = handler
|
8
|
+
@filters = filters
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all(path, handler)
|
12
|
+
request = Honeybadger::Api::Request.new(path, handler)
|
13
|
+
request.all
|
14
|
+
end
|
15
|
+
|
16
|
+
def all
|
17
|
+
paginator = Honeybadger::Api::Paginator.new(@path, @filters, @handler)
|
18
|
+
while paginator.next?
|
19
|
+
paginator.next
|
20
|
+
end
|
21
|
+
paginator.collection
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.find(path, handler)
|
25
|
+
request = Honeybadger::Api::Request.new(path, handler)
|
26
|
+
request.find
|
27
|
+
end
|
28
|
+
|
29
|
+
def find
|
30
|
+
response = Honeybadger::Api.client.get(@path)
|
31
|
+
@handler.call(response)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.paginate(path, handler, filters)
|
35
|
+
request = Honeybadger::Api::Request.new(path, handler, filters)
|
36
|
+
request.paginate
|
37
|
+
end
|
38
|
+
|
39
|
+
def paginate
|
40
|
+
Honeybadger::Api::Paginator.new(@path, @filters, @handler)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class Team
|
4
|
+
|
5
|
+
attr_reader :id, :name, :owner, :team_members, :projects, :created_at
|
6
|
+
|
7
|
+
# Public: Build a new instance of Team
|
8
|
+
#
|
9
|
+
# opts - A Hash of attributes to initialize a Team
|
10
|
+
#
|
11
|
+
# Returns a new Team
|
12
|
+
def initialize(opts)
|
13
|
+
@id = opts[:id]
|
14
|
+
@name = opts[:name]
|
15
|
+
@owner = User.new(opts[:owner][:name], opts[:owner][:email])
|
16
|
+
@team_members = opts[:members].collect { |m| TeamMember.new(m) }
|
17
|
+
@projects = opts[:projects].collect { |p| Project.new(p) }
|
18
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: Find all of the teams.
|
22
|
+
def self.all
|
23
|
+
Honeybadger::Api::Request.all("teams", handler)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Paginate all of the teams.
|
27
|
+
def self.paginate(filters = {})
|
28
|
+
Honeybadger::Api::Request.paginate("teams", handler, filters)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Public: Find a team.
|
32
|
+
def self.find(team_id)
|
33
|
+
Honeybadger::Api::Request.find("teams/#{team_id}", handler)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Internal: The handler used to build objects from API responses.
|
37
|
+
def self.handler
|
38
|
+
Proc.new { |response| Team.new(response) }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class TeamInvitation
|
4
|
+
|
5
|
+
attr_reader :id, :token, :email, :created_by, :accepted_by, :created_at, :accepted_at, :message
|
6
|
+
|
7
|
+
# Public: Build a new instance of TeamInvitation
|
8
|
+
#
|
9
|
+
# opts - A Hash of attributes to initialize a TeamInvitation
|
10
|
+
#
|
11
|
+
# Returns a new TeamInvitation
|
12
|
+
def initialize(opts)
|
13
|
+
@id = opts[:id]
|
14
|
+
@token = opts[:token]
|
15
|
+
@email = opts[:email]
|
16
|
+
if opts[:created_by].nil?
|
17
|
+
@created_by = nil
|
18
|
+
else
|
19
|
+
@created_by = User.new(opts[:created_by][:name], opts[:created_by][:email])
|
20
|
+
end
|
21
|
+
if opts[:accepted_by].nil?
|
22
|
+
@accepted_by = nil
|
23
|
+
else
|
24
|
+
@accepted_by = User.new(opts[:accepted_by][:name], opts[:accepted_by][:email])
|
25
|
+
end
|
26
|
+
@admin = opts[:admin]
|
27
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
28
|
+
@accepted_at = opts[:accepted_at].nil? ? nil : DateTime.parse(opts[:accepted_at])
|
29
|
+
@message = opts[:message]
|
30
|
+
end
|
31
|
+
|
32
|
+
# Public: Whether the invitation was for an admin user.
|
33
|
+
def admin?
|
34
|
+
@admin
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Find all team invitations for a team.
|
38
|
+
def self.all(team_id)
|
39
|
+
path = "teams/#{team_id}/team_invitations"
|
40
|
+
Honeybadger::Api::Request.all(path, handler)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Public: Paginate all team invitations for a team.
|
44
|
+
def self.paginate(team_id, filters = {})
|
45
|
+
path = "teams/#{team_id}/team_invitations"
|
46
|
+
Honeybadger::Api::Request.paginate(path, handler, filters)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Public: Find a team invitation for a given team.
|
50
|
+
def self.find(team_id, team_invitation_id)
|
51
|
+
path = "teams/#{team_id}/team_invitations/#{team_invitation_id}"
|
52
|
+
Honeybadger::Api::Request.find(path, handler)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Internal: The handler used to build objects from API responses.
|
56
|
+
def self.handler
|
57
|
+
Proc.new { |response| TeamInvitation.new(response) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Honeybadger
|
2
|
+
module Api
|
3
|
+
class TeamMember
|
4
|
+
|
5
|
+
attr_reader :id, :admin, :created_at
|
6
|
+
|
7
|
+
# Public: Build a new instance of TeamMember
|
8
|
+
#
|
9
|
+
# opts - A Hash of attributes to initialize a TeamMember
|
10
|
+
#
|
11
|
+
# Returns a new TeamMember
|
12
|
+
def initialize(opts)
|
13
|
+
@id = opts[:id]
|
14
|
+
@user = User.new(opts[:name], opts[:email])
|
15
|
+
@admin = opts[:admin]
|
16
|
+
@created_at = opts[:created_at].nil? ? nil : DateTime.parse(opts[:created_at])
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: Whether the team member is an admin
|
20
|
+
def admin?
|
21
|
+
@admin
|
22
|
+
end
|
23
|
+
|
24
|
+
# Public: The name of the team member
|
25
|
+
def name
|
26
|
+
@user.name
|
27
|
+
end
|
28
|
+
|
29
|
+
# Public: The email address of the team member
|
30
|
+
def email
|
31
|
+
@user.email
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Find all team members for a team.
|
35
|
+
def self.all(team_id)
|
36
|
+
path = "teams/#{team_id}/team_members"
|
37
|
+
Honeybadger::Api::Request.all(path, handler)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public: Paginate all team members for a team.
|
41
|
+
def self.paginate(team_id, filters = {})
|
42
|
+
path = "teams/#{team_id}/team_members"
|
43
|
+
Honeybadger::Api::Request.paginate(path, handler, filters)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Public: Find a team member for a given team.
|
47
|
+
def self.find(team_id, team_member_id)
|
48
|
+
path = "teams/#{team_id}/team_members/#{team_member_id}"
|
49
|
+
Honeybadger::Api::Request.find(path, handler)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Internal: The handler used to build objects from API responses.
|
53
|
+
def self.handler
|
54
|
+
Proc.new { |response| TeamMember.new(response) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|