zendesk_support_api 0.5.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bcf45ecf6e738bc42b2b2843be87308fd0ac25eec6bdc6f7f05f63dbd2e382a7
4
+ data.tar.gz: 7649928f9e3b6701d14aa93252dab9c641b71935d7461142f5e1d5130612971d
5
+ SHA512:
6
+ metadata.gz: 3b6057b660110d703092126a67180c69d989c67078cfc50b0edf6b2543f2efc26b209687fbd162257bc7f9cdd89e2b3174f92d3dadeae1cfc9146704f063ff9d
7
+ data.tar.gz: 987270880751bad257469be25b4ddf975f622a4a438533d04b89a66bbd093f7db54b291be4b22df02855d39be05b3b47b614622fd11d9ad7c2e23d0c39004d68
@@ -0,0 +1,13 @@
1
+ image: ruby:2.6.1-alpine
2
+
3
+ pages:
4
+ script:
5
+ - gem install yard
6
+ - yard doc
7
+ - rm -rf public
8
+ - mv doc public
9
+ artifacts:
10
+ paths:
11
+ - public
12
+ only:
13
+ - master
@@ -0,0 +1,10 @@
1
+ lib/zendesk_support_api.rb fee89f019b11ec8feb844644e000cec6cad6a695
2
+ lib/zendesk_support_api/jobs.rb 15e3db660bb16f1a2bc580ce17a9368f81fc9d0e
3
+ lib/zendesk_support_api/users.rb eb4f8d81f6f9ccf779679f7bfe354c0cc6be8d0c
4
+ lib/zendesk_support_api/client.rb a9aedf0641e4160b66414e76854e40dd245df1a7
5
+ lib/zendesk_support_api/groups.rb bcc2a0b1af5bf3552c7838d80f339efbf8636e53
6
+ lib/zendesk_support_api/search.rb e741717c61809c578afbcd44f9b8e8f18a8c0363
7
+ lib/zendesk_support_api/tickets.rb 938c32872eeb5459d8d8dae5bb5a9361cb5968d8
8
+ lib/zendesk_support_api/version.rb 4a0944e207874b5ca81f14ae285d645d6d562928
9
+ lib/zendesk_support_api/organizations.rb 9e677997416275c0bbccd5aafc1e1f0b7f0bb4c3
10
+ lib/zendesk_support_api/deleted_tickets.rb 1c58c500e8adf19a910cc02bc7e18650e9751080
File without changes
Binary file
Binary file
Binary file
@@ -0,0 +1,73 @@
1
+ # ZendeskSupportAPI
2
+
3
+
4
+ ## Documentation
5
+
6
+ Documentation (generated via yard) can be found [here](https://reyloc.gitlab.io/zendesk_support_api/)
7
+
8
+ ## Installation
9
+
10
+ The gem can be installed either via rubygems or bundler:
11
+
12
+ ### Rubygems
13
+
14
+ ```bash
15
+ gem install zendesk_support_api
16
+ ```
17
+
18
+ ### Bundler
19
+
20
+ ```ruby
21
+ gem "zendesk_support_api"
22
+ ```
23
+
24
+ The current requirements for the gem are:
25
+
26
+ * 'faraday', '~>1.0.0'
27
+ * 'oj', '~>3.10.6'
28
+
29
+ ## Configuration
30
+
31
+ Configuration is done through the creation of a `ZendeskSupportAPI::Client`
32
+ instance:
33
+
34
+ ```ruby
35
+ require 'zendesk_support_api'
36
+
37
+ client = ZendeskSupportAPI::Client.new('user@example.com', '123abc', 'https://zendesk.com/api/v2')
38
+ ```
39
+
40
+ ## Usage
41
+
42
+ Soon to come
43
+
44
+ ## Changelog
45
+
46
+ * v0.1.0 - Initial creation of gem
47
+ * v0.2.0 - Added Search functions, Fixed some yard syntax/formatting, Changed version number
48
+ * v0.3.0 - Changed version number, Added Group functions, Added User.groups function
49
+ * v0.4.0 - Added Organization functions, Changed version number
50
+ * v0.5.0 - Added DeletedTickets functions, Added Tickets functions, Yard synx fixes, updated version number
51
+
52
+ ## Upcoming changes
53
+
54
+ * v0.6.0 - Satisfaction
55
+ * v0.7.0 - Attachments?
56
+ * v0.8.0 - Requests
57
+ * v0.9.0 - Sessions
58
+ * v0.10.0 - Tags
59
+ * v0.11.0 - Views
60
+ * v0.12.0 - Triggers
61
+ * v0.13.0 - Automations
62
+ * v0.14.0 - SLA
63
+ * v0.15.0 - Targets
64
+ * v0.16.0 - Macros
65
+ * v0.17.0 - Brands
66
+ * v0.18.0 - Locales
67
+ * v0.19.0 - Schedules
68
+ * v0.20.0 - Ticket Forms
69
+ * v0.21.0 - Ticket Fields
70
+ * v0.22.0 - User Fields
71
+ * v0.23.0 - Organization Fields
72
+ * v0.24.0 - Account Settings
73
+ * v1.0.0 - Usage details, any polishing needed
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'oj'
5
+
6
+ # ZendeskSupportAPI - https://developer.zendesk.com/rest_api/docs/support/introduction
7
+ module ZendeskSupportAPI
8
+ require 'zendesk_support_api/client'
9
+ require 'zendesk_support_api/version'
10
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZendeskSupportAPI
4
+ # Client class - https://developer.zendesk.com/rest_api/docs/support/introduction#security-and-authentication
5
+ class Client
6
+ require 'zendesk_support_api/deleted_tickets'
7
+ require 'zendesk_support_api/groups'
8
+ require 'zendesk_support_api/jobs'
9
+ require 'zendesk_support_api/organizations'
10
+ require 'zendesk_support_api/search'
11
+ require 'zendesk_support_api/tickets'
12
+ require 'zendesk_support_api/users'
13
+
14
+ # Create a new instance of Client
15
+ #
16
+ # @param user [String] - The API username to use
17
+ # @param token [String] - The API token to use
18
+ # @param url [String] - The API URL to use
19
+ #
20
+ # @example
21
+ # ZendeskSupportAPI::Client.new('user', '123', 'zendesk.com/api')
22
+ # #=> #<ZendeskSupportAPI::Client:0x00007f88779cb330 @user="user",
23
+ # #=> @token="123", @url="zendesk.com/api">
24
+ def initialize(user, token, url)
25
+ @user = user
26
+ @token = token
27
+ @url = url
28
+ end
29
+
30
+ # Make a request to the Zendesk Support API
31
+ #
32
+ # @param http_method [Symbol] The HTTP method to utilize
33
+ # @param endpoint [String] The endpoint to hit
34
+ # @param params [Hash] Parameters for the request
35
+ # @return [Hash]
36
+ #
37
+ # @example
38
+ # client = ZendeskSupportAPI::Client.new('user', '123', 'zendesk.com/api')
39
+ # client.response(:get, 'users.json')
40
+ # #=> {users:[{user1},{user2}...{user100}]}
41
+
42
+ def request(http_method, endpoint, params = {})
43
+ response = client.public_send(http_method, endpoint, params)
44
+ Oj.load(response.body)
45
+ end
46
+
47
+ # Outputs a spinner symbol
48
+ #
49
+ # @param string [String] The string to output at the beginning
50
+ # @param num [Integer] The index of the iteration
51
+ # @return [String]
52
+ #
53
+ # @example
54
+ # ZendeskSupportAPI::Client.spinner('users', 1) #=> Grabbing users... \
55
+ # ZendeskSupportAPI::Client.spinner('groups', 3) #=> /
56
+
57
+ def spinner(string, num)
58
+ print "Grabbing #{string}... " if num.to_i == 1
59
+ symbols = ['-', '\\', '|', '/']
60
+ print symbols[num.to_i % 4]
61
+ print "\b"
62
+ end
63
+
64
+ # Handles responses that create jobs
65
+ #
66
+ # @param job [Hash] - The output from a request that created a job
67
+ # @return [Hash]
68
+
69
+ def handle_job(job)
70
+ print 'Checking job'
71
+ while job['job_status']['status'] != 'completed'
72
+ print '.'
73
+ job = ZendeskSupportAPI::Jobs.show(self, job['job_status']['id'])
74
+ end
75
+ puts 'completed'
76
+ job['job_status']['results']
77
+ end
78
+
79
+ private
80
+
81
+ # Creates a new Faraday instance
82
+ #
83
+ # @return [ZendeskSupportAPI::Client]
84
+
85
+ def client
86
+ @client ||= Faraday.new(@url) do |c|
87
+ c.request :url_encoded
88
+ c.adapter Faraday.default_adapter
89
+ c.basic_auth "#{@user}/token", @token
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZendeskSupportAPI
4
+ # Tickets class - https://developer.zendesk.com/rest_api/docs/support/tickets
5
+ class DeletedTickets
6
+ # Determines if given string is a valid order function
7
+ #
8
+ # @param order [String] The order string to use
9
+ # @return [Boolean]
10
+ #
11
+ # @example
12
+ # ZendeskSupportAPI::DeletedTickets.order_valid? 'desc' #=> true
13
+ # ZendeskSupportAPI::DeletedTickets.order_valid? 'random' #=> false
14
+
15
+ def self.order_valid?(order)
16
+ %w[desc asc].include? order
17
+ end
18
+
19
+ # Prints out the sort_by and order_by string for the url
20
+ #
21
+ # @param sort [String] The sort string to use
22
+ # @param order [String] The order string to use
23
+ # @return [String]
24
+ #
25
+ # @example
26
+ # ZendeskSupportAPI::DeletedTickets.sort_order('id', 'desc')
27
+ # #=> '&sort_by=id&order_by=desc'
28
+
29
+ def self.sort_order(sort, order)
30
+ "&sort_by=#{sort}&order_by=#{order}"
31
+ end
32
+
33
+ # Returns the string of the next_page for pagination
34
+ #
35
+ # @param res [Hash] The Hash containing the response from a request
36
+ # @return [nil|String]
37
+
38
+ def self.next_page(res)
39
+ (res['next_page'].nil? ? nil : res['next_page'].split('/').last)
40
+ end
41
+
42
+ # Prints out organization_id
43
+ #
44
+ # @return [String]
45
+ #
46
+ # @example
47
+ # ZendeskSupportAPI::DeletedTickets.org_id #=> 'organization_id'
48
+
49
+ def self.org_id
50
+ 'organization_id'
51
+ end
52
+
53
+ # Selects an object from an array based on a user ID
54
+ #
55
+ # @param array [Array] An array of to look in
56
+ # @param id [Integer] The ID to use
57
+ # @return [Hash]
58
+
59
+ def self.select_obj(array, id)
60
+ array.select { |a| a['id'] == id }.first
61
+ end
62
+
63
+ # Determines if sort value is valid for delete requests
64
+ #
65
+ # @param sort [String] The string to check
66
+ # @return [Boolean]
67
+
68
+ def self.deleted_sort_valid?(sort)
69
+ %w[id subject deleted_at].includes?(sort)
70
+ end
71
+
72
+ # Lists deleted tickets (first 100)
73
+ #
74
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
75
+ # @param sort [String] The sort string to use
76
+ # @param order [String] The order string to use
77
+ # @return [Array]
78
+
79
+ def self.list_deleted(client, sort = 'id', order = 'asc')
80
+ return "Invalid sort '#{sort}'" unless delete_sort_valid?(sort)
81
+ return "Invalid order '#{order}'" unless order_valid?(order)
82
+
83
+ url = "deleted_tickets.json?#{sort_order(sort, order)}"
84
+ client.request(:get, url)['deleted_tickets']
85
+ end
86
+
87
+ # Lists all deleted tickets
88
+ #
89
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
90
+ # @return [Array]
91
+
92
+ def self.list_all_deleted(client)
93
+ tickets = []
94
+ page = 'deleted_tickets.json?page=1'
95
+ until page.nil?
96
+ res = client.request(:get, page)
97
+ client.spinner("tickets (total: #{res['count']})", page.split('=').last)
98
+ tickets += res['tickets']
99
+ page = next_page(res)
100
+ end
101
+ puts ' ...done'
102
+ tickets
103
+ end
104
+
105
+ # Restores a deleted ticket
106
+ #
107
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
108
+ # @param tid [Integer] The ticket ID to use
109
+ # @return [nil|String]
110
+
111
+ def self.restore(client, tid)
112
+ res = client.request(:put, "deleted_tickets/#{tid}/restore.json")
113
+ return "Restore of #{tid} failed: #{res['error']}" if res['error']
114
+
115
+ res
116
+ end
117
+
118
+ # Restores several deleted tickets
119
+ #
120
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
121
+ # @param tids [Array] Array of ticket IDs to use
122
+ # @return [ZendeskSupportAPI::Client.handle_job]
123
+
124
+ def self.restore_many(client, tids)
125
+ url = "deleted_tickets/restore_many?ids=#{tids.join(',')}"
126
+ res = client.request(:put, url)
127
+ client.handle_job(res)
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,178 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZendeskSupportAPI
4
+ # Groups class - https://developer.zendesk.com/rest_api/docs/support/groups
5
+ class Groups
6
+ # Function to return a string that side-loads users
7
+ #
8
+ # @return [String]
9
+
10
+ def self.user_map(groups, users)
11
+ groups.map { |g| group_object(g, users) }
12
+ end
13
+
14
+ # Creates a group hash (for mappping the user into the group Hash)
15
+ #
16
+ # @param group [Hash] The group details to use
17
+ # @param users [Array] The Array of users to use
18
+ # @return [Hash]
19
+
20
+ def self.group_object(group, users)
21
+ group['user'] = users.select { |u| u['id'] == group['user_id'] }
22
+ group
23
+ end
24
+
25
+ # Returns the string of the next_page for pagination
26
+ #
27
+ # @param res [Hash] The Hash containing the response from a request
28
+ # @return [nil|String]
29
+ #
30
+ # @example
31
+ # ZendeskSupportAPI::Users.next_page(response) #=> nil
32
+ # ZendeskSupportAPI::Users.next_page(response)
33
+ # #=> "memberships.json?include=users&page=3
34
+
35
+ def self.next_page(res)
36
+ (res['next_page'].nil? ? nil : res['next_page'].split('/').last)
37
+ end
38
+
39
+ # Lists groups (first 100)
40
+ #
41
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
42
+ # @return [Array]
43
+ #
44
+ # @example
45
+ # ZendeskSupportAPI::Groups.list(client)
46
+ # #=> [
47
+ # #=> {
48
+ # #=> "name": "DJs",
49
+ # #=> "created_at": "2009-05-13T00:07:08Z",
50
+ # #=> "updated_at": "2011-07-22T00:11:12Z",
51
+ # #=> "id": 211
52
+ # #=> },
53
+ # #=> {
54
+ # #=> "name": "MCs",
55
+ # #=> "created_at": "2009-08-26T00:07:08Z",
56
+ # #=> "updated_at": "2010-05-13T00:07:08Z",
57
+ # #=> "id": 122
58
+ # #=> }
59
+ # #=> ]
60
+
61
+ def self.list(client)
62
+ client.request(:get, 'groups.json')['groups']
63
+ end
64
+
65
+ # Shows assignable groups (first 100)
66
+ #
67
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
68
+ # @return [Array]
69
+ #
70
+ # @example
71
+ # ZendeskSupportAPI::Groups.assignable(client)
72
+ # #=> [
73
+ # #=> {
74
+ # #=> "name": "DJs",
75
+ # #=> "created_at": "2009-05-13T00:07:08Z",
76
+ # #=> "updated_at": "2011-07-22T00:11:12Z",
77
+ # #=> "id": 211
78
+ # #=> },
79
+ # #=> {
80
+ # #=> "name": "MCs",
81
+ # #=> "created_at": "2009-08-26T00:07:08Z",
82
+ # #=> "updated_at": "2010-05-13T00:07:08Z",
83
+ # #=> "id": 122
84
+ # #=> }
85
+ # #=> ]
86
+
87
+ def self.assignable(client)
88
+ client.request(:get, 'assignable.json')['groups']
89
+ end
90
+
91
+ # Shows info about a specific group
92
+ #
93
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
94
+ # @param gid [Integer] The Group ID
95
+ # @return [Hash]
96
+ #
97
+ # @example
98
+ # ZendeskSupportAPI::Groups.show(client, 122)
99
+ # #=> {
100
+ # #=> "name": "MCs",
101
+ # #=> "created_at": "2009-08-26T00:07:08Z",
102
+ # #=> "updated_at": "2010-05-13T00:07:08Z",
103
+ # #=> "id": 122
104
+ # #=> }
105
+
106
+ def self.show(client, gid)
107
+ client.request(:get, "groups/#{gid}.json")['group']
108
+ end
109
+
110
+ # Create a group
111
+ #
112
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
113
+ # @param group [Hash] The group details to use
114
+ # @return [String|Hash]
115
+ #
116
+ # @example
117
+ # group = {
118
+ # name: 'Test Group'
119
+ # }
120
+ # ZendeskSupportAPI::Groups.create(client, group)
121
+ # #=> {
122
+ # #=> "name": "Test Group",
123
+ # #=> "created_at": "2011-04-20T17:49:00Z",
124
+ # #=> "updated_at": "2011-04-20T17:49:00Z",
125
+ # #=> "id": 123
126
+ # #=> }
127
+
128
+ def self.create(client, group)
129
+ res = client.request(:post, 'groups.json', group: group)
130
+ return "Creation failed: #{res['details']}" if res['error']
131
+
132
+ res
133
+ end
134
+
135
+ # Updates a group
136
+ #
137
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
138
+ # @param gid [Integer] The group ID to use
139
+ # @param group [Hash] The group details to use
140
+ # @return [String|Hash]
141
+ #
142
+ # @example
143
+ # group = {
144
+ # name: 'Test Group - defunct'
145
+ # }
146
+ # ZendeskSupportAPI::Groups.update(client, 123, group)
147
+ # #=> {
148
+ # #=> "name": "Test Group - defunct",
149
+ # #=> "created_at": "2011-04-20T17:49:00Z",
150
+ # #=> "updated_at": "2011-07-20T17:49:00Z",
151
+ # #=> "id": 123
152
+ # #=> }
153
+
154
+ def self.update(client, gid, group)
155
+ res = client.request(:post, "groups/#{gid}.json", group: group)
156
+ return "Update failed: #{res['details']}" if res['error']
157
+
158
+ res
159
+ end
160
+
161
+ # Deletes a group
162
+ #
163
+ # @param client [ZendeskSupportAPI::Client] The client instance to use
164
+ # @param gid [Integer] The group ID to use
165
+ # @return [String]
166
+ #
167
+ # @example
168
+ # ZendeskSupportAPI::Groups.delete(client, 123)
169
+ # #=> Group 123 has been deleted
170
+
171
+ def self.delete(client, gid)
172
+ res = client.request(:delete, "groups/#{gid}.json")
173
+ return "Deletion of #{gid} failed: #{res['error']}" if res['error']
174
+
175
+ "Group #{gid} has been deleted"
176
+ end
177
+ end
178
+ end