Class: Bugsink::Client

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/bugsink/client.rb

Overview

HTTP client for BugSink API

Defined Under Namespace

Classes: ClientError, Response

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = nil) ⇒ Client

Returns a new instance of Client.



58
59
60
61
62
63
64
65
66
# File 'lib/bugsink/client.rb', line 58

def initialize(config = nil)
  @config = config || Config.new
  @config.validate!

  self.class.base_uri @config.host
  self.class.headers @config.authorization_header
  self.class.headers 'Content-Type' => 'application/json'
  self.class.headers 'Accept' => 'application/json'
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



56
57
58
# File 'lib/bugsink/client.rb', line 56

def config
  @config
end

Instance Method Details

#event_get(uuid) ⇒ Object



189
190
191
192
193
# File 'lib/bugsink/client.rb', line 189

def event_get(uuid)
  response = self.class.get("/api/canonical/0/events/#{uuid}/")
  check_response(response)
  response.parsed_response
end

#event_stacktrace(uuid) ⇒ Object



195
196
197
198
199
# File 'lib/bugsink/client.rb', line 195

def event_stacktrace(uuid)
  response = self.class.get("/api/canonical/0/events/#{uuid}/stacktrace/")
  check_response(response)
  response.body
end

#events_list(issue_uuid:, order: 'desc', limit: 250, cursor: nil) ⇒ Object

Events



176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/bugsink/client.rb', line 176

def events_list(issue_uuid:, order: 'desc', limit: 250, cursor: nil)
  query = {
    issue: issue_uuid,
    order: order,
    limit: limit
  }
  query[:cursor] = cursor if cursor

  response = self.class.get('/api/canonical/0/events/', query: query)
  check_response(response)
  parse_list_response(response)
end

#issue_get(uuid) ⇒ Object



163
164
165
166
167
# File 'lib/bugsink/client.rb', line 163

def issue_get(uuid)
  response = self.class.get("/api/canonical/0/issues/#{uuid}/")
  check_response(response)
  response.parsed_response
end

#issue_resolve(uuid) ⇒ Object



169
170
171
172
173
# File 'lib/bugsink/client.rb', line 169

def issue_resolve(uuid)
  response = self.class.post("/api/canonical/0/issues/#{uuid}/resolve/")
  check_response(response)
  response.parsed_response
end

#issues_list(project_id:, sort: 'last_seen', order: 'desc', limit: 250, cursor: nil) ⇒ Object

Issues



149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/bugsink/client.rb', line 149

def issues_list(project_id:, sort: 'last_seen', order: 'desc', limit: 250, cursor: nil)
  query = {
    project: project_id,
    sort: sort,
    order: order,
    limit: limit
  }
  query[:cursor] = cursor if cursor

  response = self.class.get('/api/canonical/0/issues/', query: query)
  check_response(response)
  parse_list_response(response)
end

#project_create(team_uuid:, name:, visibility: nil, alert_on_new_issue: nil, alert_on_regression: nil, alert_on_unmute: nil) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/bugsink/client.rb', line 118

def project_create(team_uuid:, name:, visibility: nil, alert_on_new_issue: nil, alert_on_regression: nil, alert_on_unmute: nil)
  body = {
    team: team_uuid,
    name: name
  }
  body[:visibility] = visibility if visibility
  body[:alert_on_new_issue] = alert_on_new_issue unless alert_on_new_issue.nil?
  body[:alert_on_regression] = alert_on_regression unless alert_on_regression.nil?
  body[:alert_on_unmute] = alert_on_unmute unless alert_on_unmute.nil?

  response = self.class.post('/api/canonical/0/projects/', body: body.to_json)
  check_response(response)
  response.parsed_response
end

#project_get(id) ⇒ Object



112
113
114
115
116
# File 'lib/bugsink/client.rb', line 112

def project_get(id)
  response = self.class.get("/api/canonical/0/projects/#{id}/")
  check_response(response)
  response.parsed_response
end

#project_update(id, name: nil, visibility: nil, alert_on_new_issue: nil, alert_on_regression: nil, alert_on_unmute: nil) ⇒ Object

Raises:

  • (ArgumentError)


133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/bugsink/client.rb', line 133

def project_update(id, name: nil, visibility: nil, alert_on_new_issue: nil, alert_on_regression: nil, alert_on_unmute: nil)
  body = {}
  body[:name] = name if name
  body[:visibility] = visibility if visibility
  body[:alert_on_new_issue] = alert_on_new_issue unless alert_on_new_issue.nil?
  body[:alert_on_regression] = alert_on_regression unless alert_on_regression.nil?
  body[:alert_on_unmute] = alert_on_unmute unless alert_on_unmute.nil?

  raise ArgumentError, 'At least one field must be provided for update' if body.empty?

  response = self.class.patch("/api/canonical/0/projects/#{id}/", body: body.to_json)
  check_response(response)
  response.parsed_response
end

#projects_list(team_uuid: nil) ⇒ Object

Projects



103
104
105
106
107
108
109
110
# File 'lib/bugsink/client.rb', line 103

def projects_list(team_uuid: nil)
  query = {}
  query[:team] = team_uuid if team_uuid

  response = self.class.get('/api/canonical/0/projects/', query: query)
  check_response(response)
  parse_list_response(response)
end

#release_create(project_id:, version:, timestamp: nil) ⇒ Object



216
217
218
219
220
221
222
223
224
225
226
# File 'lib/bugsink/client.rb', line 216

def release_create(project_id:, version:, timestamp: nil)
  body = {
    project: project_id,
    version: version
  }
  body[:timestamp] = timestamp if timestamp

  response = self.class.post('/api/canonical/0/releases/', body: body.to_json)
  check_response(response)
  response.parsed_response
end

#release_get(uuid) ⇒ Object



210
211
212
213
214
# File 'lib/bugsink/client.rb', line 210

def release_get(uuid)
  response = self.class.get("/api/canonical/0/releases/#{uuid}/")
  check_response(response)
  response.parsed_response
end

#releases_list(project_id:) ⇒ Object

Releases



202
203
204
205
206
207
208
# File 'lib/bugsink/client.rb', line 202

def releases_list(project_id:)
  query = { project: project_id }

  response = self.class.get('/api/canonical/0/releases/', query: query)
  check_response(response)
  parse_list_response(response)
end

#team_create(name:, visibility: nil) ⇒ Object



81
82
83
84
85
86
87
88
# File 'lib/bugsink/client.rb', line 81

def team_create(name:, visibility: nil)
  body = { name: name }
  body[:visibility] = visibility if visibility

  response = self.class.post('/api/canonical/0/teams/', body: body.to_json)
  check_response(response)
  response.parsed_response
end

#team_get(uuid) ⇒ Object



75
76
77
78
79
# File 'lib/bugsink/client.rb', line 75

def team_get(uuid)
  response = self.class.get("/api/canonical/0/teams/#{uuid}/")
  check_response(response)
  response.parsed_response
end

#team_update(uuid, name: nil, visibility: nil) ⇒ Object

Raises:

  • (ArgumentError)


90
91
92
93
94
95
96
97
98
99
100
# File 'lib/bugsink/client.rb', line 90

def team_update(uuid, name: nil, visibility: nil)
  body = {}
  body[:name] = name if name
  body[:visibility] = visibility if visibility

  raise ArgumentError, 'At least one field must be provided for update' if body.empty?

  response = self.class.patch("/api/canonical/0/teams/#{uuid}/", body: body.to_json)
  check_response(response)
  response.parsed_response
end

#teams_listObject

Teams



69
70
71
72
73
# File 'lib/bugsink/client.rb', line 69

def teams_list
  response = self.class.get('/api/canonical/0/teams/')
  check_response(response)
  parse_list_response(response)
end

#test_connectionObject

Test connectivity



229
230
231
232
233
234
235
# File 'lib/bugsink/client.rb', line 229

def test_connection
  response = self.class.get('/api/canonical/0/teams/')
  check_response(response)
  true
rescue ClientError => e
  raise ClientError.new("Connection test failed: #{e.message}", code: e.code, response: e.response)
end