teamsupport 0.1.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 +7 -0
- data/.yardopts +12 -0
- data/CHANGELOG.md +11 -0
- data/CONTRIBUTING.md +47 -0
- data/LICENSE.md +26 -0
- data/README.md +132 -0
- data/lib/teamsupport.rb +21 -0
- data/lib/teamsupport/arguments.rb +26 -0
- data/lib/teamsupport/base.rb +173 -0
- data/lib/teamsupport/client.rb +86 -0
- data/lib/teamsupport/creatable.rb +31 -0
- data/lib/teamsupport/customer.rb +66 -0
- data/lib/teamsupport/customer_product.rb +14 -0
- data/lib/teamsupport/error.rb +135 -0
- data/lib/teamsupport/headers.rb +51 -0
- data/lib/teamsupport/identity.rb +43 -0
- data/lib/teamsupport/null_object.rb +52 -0
- data/lib/teamsupport/product.rb +14 -0
- data/lib/teamsupport/rest/api.rb +19 -0
- data/lib/teamsupport/rest/client.rb +25 -0
- data/lib/teamsupport/rest/customers.rb +156 -0
- data/lib/teamsupport/rest/products.rb +113 -0
- data/lib/teamsupport/rest/request.rb +116 -0
- data/lib/teamsupport/rest/tickets.rb +134 -0
- data/lib/teamsupport/rest/utils.rb +325 -0
- data/lib/teamsupport/ticket.rb +81 -0
- data/lib/teamsupport/ticket_action.rb +16 -0
- data/lib/teamsupport/utils.rb +33 -0
- data/lib/teamsupport/version.rb +73 -0
- data/teamsupport.gemspec +27 -0
- metadata +158 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'teamsupport/error'
|
2
|
+
require 'teamsupport/ticket'
|
3
|
+
require 'teamsupport/rest/utils'
|
4
|
+
require 'teamsupport/utils'
|
5
|
+
|
6
|
+
module Teamsupport
|
7
|
+
module REST
|
8
|
+
module Tickets
|
9
|
+
include Teamsupport::REST::Utils
|
10
|
+
include Teamsupport::Utils
|
11
|
+
|
12
|
+
# Returns all available tickets for the TeamSupport organization
|
13
|
+
#
|
14
|
+
# @see http://help.teamsupport.com/1/en/topic/api
|
15
|
+
#
|
16
|
+
# @example
|
17
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
18
|
+
# teamsupport_api.tickets()
|
19
|
+
#
|
20
|
+
# @authentication Requires Basic Authentication
|
21
|
+
#
|
22
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied API credentials are not valid.
|
23
|
+
#
|
24
|
+
# @return [Array<Teamsupport::Ticket>]
|
25
|
+
#
|
26
|
+
# @param options [Hash] A customizable set of options.
|
27
|
+
# @option options [Integer] :count Specifies the number of records to retrieve.
|
28
|
+
#
|
29
|
+
# @api public
|
30
|
+
def tickets(options = {})
|
31
|
+
perform_get_with_objects_from_collection('/api/json/tickets.json', options, Teamsupport::Ticket, :Tickets)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns a customer
|
35
|
+
#
|
36
|
+
# @example
|
37
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
38
|
+
# teamsupport_api.ticket('1')
|
39
|
+
#
|
40
|
+
# @authentication Requires Basic Authentication
|
41
|
+
#
|
42
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
43
|
+
#
|
44
|
+
# @return [Teamsupport::Ticket] The requested ticket.
|
45
|
+
#
|
46
|
+
# @param id [Integer] A ticket ID.
|
47
|
+
# @param options [Hash] A customizable set of options.
|
48
|
+
#
|
49
|
+
# @api public
|
50
|
+
def ticket(id, options = {})
|
51
|
+
perform_get_with_object_from_collection("/api/json/tickets/#{id}.json", options, Teamsupport::Ticket, :Ticket)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Create a ticket
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
58
|
+
# teamsupport_api.create_ticket(Name: 'New Ticket', Description: 'Ticket Description')
|
59
|
+
#
|
60
|
+
# @authentication Requires Basic Authentication
|
61
|
+
#
|
62
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
63
|
+
#
|
64
|
+
# @return [Teamsupport::Ticket] The new ticket.
|
65
|
+
#
|
66
|
+
# @param options [Hash] A customizable set of options.
|
67
|
+
#
|
68
|
+
# @api public
|
69
|
+
def create_ticket(options = {})
|
70
|
+
perform_post_with_object_from_collection('/api/json/tickets.json', options, Teamsupport::Ticket, :Ticket)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Updates the ticket
|
74
|
+
#
|
75
|
+
# @example
|
76
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
77
|
+
# teamsupport_api.update_ticket('1', Name: 'Updated Ticket Name')
|
78
|
+
#
|
79
|
+
# @authentication Requires Basic Authentication
|
80
|
+
#
|
81
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
82
|
+
#
|
83
|
+
# @return [Teamsupport::Ticket] The updated ticket.
|
84
|
+
#
|
85
|
+
# @param id [Integer] A ticket ID.
|
86
|
+
# @param options [Hash] A customizable set of options.
|
87
|
+
#
|
88
|
+
# @api public
|
89
|
+
def update_ticket(id, options = {})
|
90
|
+
ticket_hash = ticket(id).to_h
|
91
|
+
perform_put_with_object_from_collection("/api/json/tickets/#{id}.json", ticket_hash.merge(options), Teamsupport::Ticket, :Ticket)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Deletes the ticket
|
95
|
+
#
|
96
|
+
# @example
|
97
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
98
|
+
# teamsupport_api.delete_ticket('1')
|
99
|
+
#
|
100
|
+
# @authentication Requires Basic Authentication
|
101
|
+
#
|
102
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
103
|
+
#
|
104
|
+
# @param id [Integer] A ticket ID.
|
105
|
+
# @param options [Hash] A customizable set of options.
|
106
|
+
#
|
107
|
+
# @api public
|
108
|
+
def delete_ticket(id, options = {})
|
109
|
+
perform_delete("/api/json/tickets/#{id}.json", options)
|
110
|
+
end
|
111
|
+
|
112
|
+
# Returns the actions for a ticket
|
113
|
+
#
|
114
|
+
# @example
|
115
|
+
# teamsupport_api = Teamsupport::REST::Client.new(api_key: 'AK', api_secret: 'AS')
|
116
|
+
# teamsupport_api.ticket_actions('1')
|
117
|
+
#
|
118
|
+
# @authentication Requires Basic Authentication
|
119
|
+
#
|
120
|
+
# @raise [Teamsupport::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
121
|
+
#
|
122
|
+
# @return [Array<Teamsupport::Product>]
|
123
|
+
#
|
124
|
+
# @param id [Integer] A ticket ID.
|
125
|
+
# @param options [Hash] A customizable set of options.
|
126
|
+
#
|
127
|
+
# @api public
|
128
|
+
def ticket_actions(id, options = {})
|
129
|
+
options = options.dup
|
130
|
+
perform_get_with_objects_from_collection("/api/json/tickets/#{id}/actions.json", options, Teamsupport::TicketAction, :Actions)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,325 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
require 'teamsupport/arguments'
|
3
|
+
require 'teamsupport/rest/request'
|
4
|
+
require 'teamsupport/utils'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module Teamsupport
|
8
|
+
module REST
|
9
|
+
module Utils
|
10
|
+
include Teamsupport::Utils
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# Take a URI string or Teamsupport::Identity object and return its ID
|
15
|
+
#
|
16
|
+
# @param object [Integer, String, URI, Teamsupport::Identity] An ID, URI, or object.
|
17
|
+
#
|
18
|
+
# @return [Integer]
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
def extract_id(object)
|
22
|
+
case object
|
23
|
+
when ::Integer
|
24
|
+
object
|
25
|
+
when ::String
|
26
|
+
object.split('/').last.to_i
|
27
|
+
when URI, Addressable::URI
|
28
|
+
object.path.split('/').last.to_i
|
29
|
+
when Teamsupport::Identity
|
30
|
+
object.ID
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Alias for performing HTTP GET request
|
35
|
+
#
|
36
|
+
# @param path [String]
|
37
|
+
# @param options [Hash]
|
38
|
+
#
|
39
|
+
# @return [Array, Hash]
|
40
|
+
#
|
41
|
+
# @api private
|
42
|
+
def perform_get(path, options = {})
|
43
|
+
perform_request(:get, path, options)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Alias for performing HTTP POST request
|
47
|
+
#
|
48
|
+
# @param path [String]
|
49
|
+
# @param options [Hash]
|
50
|
+
#
|
51
|
+
# @return [Array, Hash]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def perform_post(path, options = {})
|
55
|
+
perform_request(:post, path, options)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Alias for performing HTTP PUT request
|
59
|
+
#
|
60
|
+
# @param path [String]
|
61
|
+
# @param options [Hash]
|
62
|
+
#
|
63
|
+
# @return [Array, Hash]
|
64
|
+
#
|
65
|
+
# @api private
|
66
|
+
def perform_put(path, options = {})
|
67
|
+
perform_request(:put, path, options)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Alias for performing HTTP DELETE request
|
71
|
+
#
|
72
|
+
# @param path [String]
|
73
|
+
# @param options [Hash]
|
74
|
+
#
|
75
|
+
# @return [Array, Hash]
|
76
|
+
#
|
77
|
+
# @api private
|
78
|
+
def perform_delete(path, options = {})
|
79
|
+
perform_request(:delete, path, options)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Create a new Teamsupport::REST::Request and perform an HTTP request
|
83
|
+
#
|
84
|
+
# @param request_method [Symbol]
|
85
|
+
# @param path [String]
|
86
|
+
# @param options [Hash]
|
87
|
+
#
|
88
|
+
# @return [Array, Hash]
|
89
|
+
#
|
90
|
+
# @api private
|
91
|
+
def perform_request(request_method, path, options = {})
|
92
|
+
Teamsupport::REST::Request.new(self, request_method, path, options).perform
|
93
|
+
end
|
94
|
+
|
95
|
+
# Alias for performing HTTP GET request returning an object
|
96
|
+
#
|
97
|
+
# @param path [String]
|
98
|
+
# @param options [Hash]
|
99
|
+
# @param klass [Class]
|
100
|
+
#
|
101
|
+
# @return [Object]
|
102
|
+
#
|
103
|
+
# @api private
|
104
|
+
def perform_get_with_object(path, options, klass)
|
105
|
+
perform_request_with_object(:get, path, options, klass)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Alias for performing HTTP POST request returning an object
|
109
|
+
#
|
110
|
+
# @param path [String]
|
111
|
+
# @param options [Hash]
|
112
|
+
# @param klass [Class]
|
113
|
+
#
|
114
|
+
# @return [Object]
|
115
|
+
#
|
116
|
+
# @api private
|
117
|
+
def perform_post_with_object(path, options, klass)
|
118
|
+
perform_request_with_object(:post, path, options, klass)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Alias for performing HTTP PUT request returning an object
|
122
|
+
#
|
123
|
+
# @param path [String]
|
124
|
+
# @param options [Hash]
|
125
|
+
# @param klass [Class]
|
126
|
+
#
|
127
|
+
# @return [Object]
|
128
|
+
#
|
129
|
+
# @api private
|
130
|
+
def perform_put_with_object(path, options, klass)
|
131
|
+
perform_request_with_object(:put, path, options, klass)
|
132
|
+
end
|
133
|
+
|
134
|
+
# Alias for performing HTTP requests returning an object
|
135
|
+
#
|
136
|
+
# @param path [String]
|
137
|
+
# @param options [Hash]
|
138
|
+
# @param klass [Class]
|
139
|
+
#
|
140
|
+
# @return [Object]
|
141
|
+
#
|
142
|
+
# @api private
|
143
|
+
def perform_request_with_object(request_method, path, options, klass)
|
144
|
+
response = perform_request(request_method, path, options)
|
145
|
+
klass.new(response)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Alias for performing HTTP GET request returning an object from a collection
|
149
|
+
#
|
150
|
+
# @param path [String]
|
151
|
+
# @param options [Hash]
|
152
|
+
# @param klass [Class]
|
153
|
+
# @param collection_name [Symbol]
|
154
|
+
#
|
155
|
+
# @return [Object]
|
156
|
+
#
|
157
|
+
# @api private
|
158
|
+
def perform_get_with_object_from_collection(path, options, klass, collection_name)
|
159
|
+
perform_request_with_object_from_collection(:get, path, options, klass, collection_name)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Alias for performing HTTP POST request returning an object from a collection
|
163
|
+
#
|
164
|
+
# @param path [String]
|
165
|
+
# @param options [Hash]
|
166
|
+
# @param klass [Class]
|
167
|
+
# @param collection_name [Symbol]
|
168
|
+
#
|
169
|
+
# @return [Object]
|
170
|
+
#
|
171
|
+
# @api private
|
172
|
+
def perform_post_with_object_from_collection(path, options, klass, collection_name)
|
173
|
+
perform_request_with_object_from_collection(:post, path, options, klass, collection_name)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Alias for performing HTTP PUT request returning an object from a collection
|
177
|
+
#
|
178
|
+
# @param path [String]
|
179
|
+
# @param options [Hash]
|
180
|
+
# @param klass [Class]
|
181
|
+
# @param collection_name [Symbol]
|
182
|
+
#
|
183
|
+
# @return [Object]
|
184
|
+
#
|
185
|
+
# @api private
|
186
|
+
def perform_put_with_object_from_collection(path, options, klass, collection_name)
|
187
|
+
perform_request_with_object_from_collection(:put, path, options, klass, collection_name)
|
188
|
+
end
|
189
|
+
|
190
|
+
# Alias for performing HTTP requests returning an object from a collection
|
191
|
+
#
|
192
|
+
# @param request_method [Symbol]
|
193
|
+
# @param path [String]
|
194
|
+
# @param options [Hash]
|
195
|
+
# @param klass [Class]
|
196
|
+
# @param collection_name [Symbol]
|
197
|
+
#
|
198
|
+
# @return [Object]
|
199
|
+
#
|
200
|
+
# @api private
|
201
|
+
def perform_request_with_object_from_collection(request_method, path, options, klass, collection_name) # rubocop:disable Metrics/ParameterLists
|
202
|
+
options = {collection_name.to_sym => options} unless options.empty?
|
203
|
+
|
204
|
+
response = perform_request(request_method, path, options).fetch(collection_name.to_sym)
|
205
|
+
klass.new(response)
|
206
|
+
end
|
207
|
+
|
208
|
+
# Alias for performing HTTP GET request returning multiple objects
|
209
|
+
#
|
210
|
+
# @param path [String]
|
211
|
+
# @param options [Hash]
|
212
|
+
# @param klass [Class]
|
213
|
+
#
|
214
|
+
# @return [Array]
|
215
|
+
#
|
216
|
+
# @api private
|
217
|
+
def perform_get_with_objects(path, options, klass)
|
218
|
+
perform_request_with_objects(:get, path, options, klass)
|
219
|
+
end
|
220
|
+
|
221
|
+
# Alias for performing HTTP POST request returning multiple objects
|
222
|
+
#
|
223
|
+
# @param path [String]
|
224
|
+
# @param options [Hash]
|
225
|
+
# @param klass [Class]
|
226
|
+
#
|
227
|
+
# @return [Array]
|
228
|
+
#
|
229
|
+
# @api private
|
230
|
+
def perform_post_with_objects(path, options, klass)
|
231
|
+
perform_request_with_objects(:post, path, options, klass)
|
232
|
+
end
|
233
|
+
|
234
|
+
# Alias for performing HTTP PUT request returning multiple objects
|
235
|
+
#
|
236
|
+
# @param path [String]
|
237
|
+
# @param options [Hash]
|
238
|
+
# @param klass [Class]
|
239
|
+
#
|
240
|
+
# @return [Array]
|
241
|
+
#
|
242
|
+
# @api private
|
243
|
+
def perform_put_with_objects(path, options, klass)
|
244
|
+
perform_request_with_objects(:put, path, options, klass)
|
245
|
+
end
|
246
|
+
|
247
|
+
# Alias for performing HTTP requests returning multiple objects
|
248
|
+
#
|
249
|
+
# @param request_method [Symbol]
|
250
|
+
# @param path [String]
|
251
|
+
# @param options [Hash]
|
252
|
+
# @param klass [Class]
|
253
|
+
#
|
254
|
+
# @return [Array]
|
255
|
+
#
|
256
|
+
# @api private
|
257
|
+
def perform_request_with_objects(request_method, path, options, klass)
|
258
|
+
perform_request(request_method, path, options).collect do |element|
|
259
|
+
klass.new(element)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
# Alias for performing HTTP GET request returning multiple objects in a collection
|
264
|
+
#
|
265
|
+
# @param path [String]
|
266
|
+
# @param options [Hash]
|
267
|
+
# @param klass [Class]
|
268
|
+
# @param collection_name [Symbol]
|
269
|
+
#
|
270
|
+
# @return [Array]
|
271
|
+
#
|
272
|
+
# @api private
|
273
|
+
def perform_get_with_objects_from_collection(path, options, klass, collection_name)
|
274
|
+
perform_request_with_objects_from_collection(:get, path, options, klass, collection_name)
|
275
|
+
end
|
276
|
+
|
277
|
+
# Alias for performing HTTP POST request returning multiple objects in a collection
|
278
|
+
#
|
279
|
+
# @param path [String]
|
280
|
+
# @param options [Hash]
|
281
|
+
# @param klass [Class]
|
282
|
+
# @param collection_name [Symbol]
|
283
|
+
#
|
284
|
+
# @return [Array]
|
285
|
+
#
|
286
|
+
# @api private
|
287
|
+
def perform_post_with_objects_from_collection(path, options, klass, collection_name)
|
288
|
+
perform_request_with_objects_from_collection(:post, path, options, klass, collection_name)
|
289
|
+
end
|
290
|
+
|
291
|
+
# Alias for performing HTTP PUT request returning multiple objects in a collection
|
292
|
+
#
|
293
|
+
# @param path [String]
|
294
|
+
# @param options [Hash]
|
295
|
+
# @param klass [Class]
|
296
|
+
# @param collection_name [Symbol]
|
297
|
+
#
|
298
|
+
# @return [Array]
|
299
|
+
#
|
300
|
+
# @api private
|
301
|
+
def perform_put_with_objects_from_collection(path, options, klass, collection_name)
|
302
|
+
perform_request_with_objects_from_collection(:put, path, options, klass, collection_name)
|
303
|
+
end
|
304
|
+
|
305
|
+
# Alias for performing HTTP requests returning multiple objects in a collection
|
306
|
+
#
|
307
|
+
# @param request_method [Symbol]
|
308
|
+
# @param path [String]
|
309
|
+
# @param options [Hash]
|
310
|
+
# @param klass [Class]
|
311
|
+
# @param collection_name [Symbol]
|
312
|
+
#
|
313
|
+
# @return [Array]
|
314
|
+
#
|
315
|
+
# @api private
|
316
|
+
def perform_request_with_objects_from_collection(request_method, path, options, klass, collection_name) # rubocop:disable Metrics/ParameterLists
|
317
|
+
options = {collection_name.to_sym => options} unless options.empty?
|
318
|
+
|
319
|
+
perform_request(request_method, path, options).fetch(collection_name.to_sym).collect do |element|
|
320
|
+
klass.new(element)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|