gitlab_support_readiness 1.0.11 → 1.0.12

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/support_readiness/calendly/client.rb +64 -0
  3. data/lib/support_readiness/calendly/configuration.rb +45 -0
  4. data/lib/support_readiness/calendly/organization_memberships.rb +67 -0
  5. data/lib/support_readiness/calendly/organizations.rb +123 -0
  6. data/lib/support_readiness/calendly/users.rb +105 -0
  7. data/lib/support_readiness/calendly.rb +16 -0
  8. data/lib/support_readiness/client.rb +88 -1
  9. data/lib/support_readiness/dates.rb +90 -0
  10. data/lib/support_readiness/gitlab/configuration.rb +0 -1
  11. data/lib/support_readiness/gitlab/groups.rb +35 -0
  12. data/lib/support_readiness/gitlab/markdown.rb +37 -0
  13. data/lib/support_readiness/gitlab/merge_requests.rb +127 -0
  14. data/lib/support_readiness/gitlab/namespaces.rb +22 -0
  15. data/lib/support_readiness/gitlab/projects.rb +36 -1
  16. data/lib/support_readiness/gitlab/repositories.rb +174 -0
  17. data/lib/support_readiness/gitlab/users.rb +24 -0
  18. data/lib/support_readiness/gitlab.rb +2 -0
  19. data/lib/support_readiness/google_calendar/client.rb +59 -0
  20. data/lib/support_readiness/google_calendar/configuration.rb +39 -0
  21. data/lib/support_readiness/google_calendar/events.rb +169 -0
  22. data/lib/support_readiness/google_calendar.rb +14 -0
  23. data/lib/support_readiness/mailgun/bounces.rb +103 -0
  24. data/lib/support_readiness/mailgun/client.rb +65 -0
  25. data/lib/support_readiness/mailgun/configuration.rb +46 -0
  26. data/lib/support_readiness/mailgun/emails.rb +95 -0
  27. data/lib/support_readiness/mailgun.rb +15 -0
  28. data/lib/support_readiness/pagerduty/escalation_policies.rb +1 -1
  29. data/lib/support_readiness/pagerduty/schedules.rb +27 -3
  30. data/lib/support_readiness/pagerduty/services.rb +1 -1
  31. data/lib/support_readiness/pagerduty/users.rb +197 -0
  32. data/lib/support_readiness/pagerduty.rb +1 -0
  33. data/lib/support_readiness/repos/articles.rb +335 -0
  34. data/lib/support_readiness/repos/automations.rb +247 -0
  35. data/lib/support_readiness/repos/groups.rb +188 -0
  36. data/lib/support_readiness/repos/macros.rb +224 -0
  37. data/lib/support_readiness/repos/organization_fields.rb +193 -0
  38. data/lib/support_readiness/repos/sla_policies.rb +192 -0
  39. data/lib/support_readiness/repos/ticket_fields.rb +200 -0
  40. data/lib/support_readiness/repos/ticket_forms.rb +200 -0
  41. data/lib/support_readiness/repos/triggers.rb +255 -0
  42. data/lib/support_readiness/repos/user_fields.rb +201 -0
  43. data/lib/support_readiness/repos/views.rb +362 -0
  44. data/lib/support_readiness/repos.rb +22 -0
  45. data/lib/support_readiness/salesforce/accounts.rb +109 -0
  46. data/lib/support_readiness/salesforce/cases.rb +109 -0
  47. data/lib/support_readiness/salesforce/client.rb +64 -0
  48. data/lib/support_readiness/salesforce/configuration.rb +49 -0
  49. data/lib/support_readiness/salesforce/queries.rb +62 -0
  50. data/lib/support_readiness/salesforce.rb +16 -0
  51. data/lib/support_readiness/slack/client.rb +63 -0
  52. data/lib/support_readiness/slack/configuration.rb +43 -0
  53. data/lib/support_readiness/slack/messages.rb +37 -0
  54. data/lib/support_readiness/slack.rb +14 -0
  55. data/lib/support_readiness/zendesk/app_job_statuses.rb +140 -0
  56. data/lib/support_readiness/zendesk/apps.rb +209 -0
  57. data/lib/support_readiness/zendesk/automations.rb +1 -2
  58. data/lib/support_readiness/zendesk/macros.rb +1 -3
  59. data/lib/support_readiness/zendesk/organization_fields.rb +1 -1
  60. data/lib/support_readiness/zendesk/theme_job_statuses.rb +136 -0
  61. data/lib/support_readiness/zendesk/themes.rb +303 -0
  62. data/lib/support_readiness/zendesk/ticket_field_options.rb +110 -0
  63. data/lib/support_readiness/zendesk/ticket_fields.rb +85 -16
  64. data/lib/support_readiness/zendesk/ticket_forms.rb +65 -2
  65. data/lib/support_readiness/zendesk/tickets.rb +77 -0
  66. data/lib/support_readiness/zendesk/triggers.rb +1 -2
  67. data/lib/support_readiness/zendesk/user_field_options.rb +110 -0
  68. data/lib/support_readiness/zendesk/user_fields.rb +257 -0
  69. data/lib/support_readiness/zendesk/views.rb +49 -2
  70. data/lib/support_readiness/zendesk.rb +7 -0
  71. data/lib/support_readiness.rb +16 -0
  72. metadata +120 -2
@@ -9,11 +9,6 @@ module Readiness
9
9
  #
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
- # @todo List ticket field options
13
- # @todo Show ticket field option
14
- # @todo Create or update ticket field option
15
- # @todo Delete ticket field option
16
- # @todo Reorder ticket fields
17
12
  class TicketFields < Readiness::Client
18
13
  attr_accessor :active, :agent_description, :collapsed_for_agents, :custom_field_options, :description, :editable_in_portal, :id, :key, :position, :regexp_for_validation, :removable, :required, :system_field_options, :tag, :title, :title_in_portal, :type, :visible_in_portal
19
14
 
@@ -22,15 +17,21 @@ module Readiness
22
17
  #
23
18
  # @author Jason Colyer
24
19
  # @since 1.0.0
20
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
25
21
  # @param object [Object] An instance of {Readiness::Zendesk::TicketFields}
26
22
  # @example
27
23
  # require 'support_readiness'
28
- # Readiness::Zendesk::TicketFields.new
29
- def initialize(object = {})
24
+ # config = Readiness::Zendesk::Configuration.new
25
+ # config.username = 'alice@example.com'
26
+ # config.token = 'test123abc'
27
+ # config.url = 'https://example.zendesk.com/api/v2'
28
+ # client = Readiness::Zendesk::Client.new(config)
29
+ # Readiness::Zendesk::TicketFields.new(client)
30
+ def initialize(client, object = {})
30
31
  @active = object['active']
31
32
  @agent_description = object['agent_description']
32
33
  @collapsed_for_agents = object['collapsed_for_agents']
33
- @custom_field_options = object['custom_field_options']
34
+ @custom_field_options = ticket_field_options(client, object)
34
35
  @description = object['description']
35
36
  @editable_in_portal = object['editable_in_portal']
36
37
  @id = object['id']
@@ -47,6 +48,24 @@ module Readiness
47
48
  @visible_in_portal = object['visible_in_portal']
48
49
  end
49
50
 
51
+ ##
52
+ # Gets the ticket field options for a ticket field
53
+ #
54
+ # @author Jason Colyer
55
+ # @since 1.0.12
56
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
57
+ # @param object [Varies] Either a Hash from JSON or a {Readiness::Zendesk::TicketFields} instance
58
+ # @return [Array]
59
+ def ticket_field_options(client, object)
60
+ return nil unless %w[tagger multiselect].include? object['type']
61
+
62
+ # Handles when the position value is nil
63
+ object['custom_field_options'].each do |c|
64
+ c['position'] = object['custom_field_options'].index(c)
65
+ end
66
+ object['custom_field_options'].map { |c| TicketFieldOptions.new(c) }
67
+ end
68
+
50
69
  ##
51
70
  # Lists all ticket fields.
52
71
  #
@@ -72,7 +91,7 @@ module Readiness
72
91
  response = client.connection.get("ticket_fields?#{opts}")
73
92
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
74
93
  body = Oj.load(response.body)
75
- array += body['ticket_fields'].map { |f| TicketFields.new(f) }
94
+ array += body['ticket_fields'].map { |f| TicketFields.new(client, f) }
76
95
  break if limit != 0 && array.count >= (limit * 100)
77
96
  break unless body['meta']['has_more']
78
97
 
@@ -103,7 +122,7 @@ module Readiness
103
122
  def self.find(client, fid)
104
123
  response = client.connection.get("ticket_fields/#{fid}")
105
124
  handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: fid }) unless response.status == 200
106
- return TicketFields.new(Oj.load(response.body)['ticket_field']) if response.status == 200
125
+ return TicketFields.new(client, Oj.load(response.body)['ticket_field']) if response.status == 200
107
126
 
108
127
  Oj.load(response.body)
109
128
  end
@@ -130,11 +149,59 @@ module Readiness
130
149
  def self.find!(client, fid)
131
150
  response = client.connection.get("ticket_fields/#{fid}")
132
151
  handle_request_error(1, 'Zendesk', response.status, { action: 'Find ticket field', id: fid }) unless response.status == 200
133
- TicketFields.new(Oj.load(response.body)['ticket_field'])
152
+ TicketFields.new(client, Oj.load(response.body)['ticket_field'])
153
+ end
154
+
155
+ ##
156
+ # Locates a ticket field within Zendesk by name. This will not exit on error (except Authentication errors)
157
+ #
158
+ # @author Jason Colyer
159
+ # @since 1.0.12
160
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
161
+ # @param name [String] The ticket field name to look for
162
+ # @return [Object] An instance of {Readiness::Zendesk::TicketFields}
163
+ # @example
164
+ # require 'support_readiness'
165
+ # config = Readiness::Zendesk::Configuration.new
166
+ # config.username = 'alice@example.com'
167
+ # config.token = 'test123abc'
168
+ # config.url = 'https://example.zendesk.com/api/v2'
169
+ # client = Readiness::Zendesk::Client.new(config)
170
+ # field = Readiness::Zendesk::TicketFields.find_by_name(client, 'Age')
171
+ # pp field.id
172
+ # # => 89
173
+ def self.find_by_name(client, name)
174
+ fields = TicketFields.list(client)
175
+ fields.detect { |f| f.title == name }
176
+ end
177
+
178
+ ##
179
+ # Locates a ticket field within Zendesk by name. This will exit on error
180
+ #
181
+ # @author Jason Colyer
182
+ # @since 1.0.12
183
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
184
+ # @param name [String] The ticket field name to look for
185
+ # @return [Object] An instance of {Readiness::Zendesk::TicketFields}
186
+ # @example
187
+ # require 'support_readiness'
188
+ # config = Readiness::Zendesk::Configuration.new
189
+ # config.username = 'alice@example.com'
190
+ # config.token = 'test123abc'
191
+ # config.url = 'https://example.zendesk.com/api/v2'
192
+ # client = Readiness::Zendesk::Client.new(config)
193
+ # field = Readiness::Zendesk::TicketFields.find_by_name!(client, 'Age')
194
+ # pp field.id
195
+ # # => 89
196
+ def self.find_by_name!(client, name)
197
+ fields = TicketFields.list(client)
198
+ field = fields.detect { |f| f.title == name }
199
+ handle_request_error(1, 'Zendesk', 404, { action: 'Find ticket field', id: name }) if field.nil?
200
+ field
134
201
  end
135
202
 
136
203
  ##
137
- # Creates a ticket field. Will exit if unsuccessful
204
+ # Creates a ticket field. Will exit if unsuccessful. Note that this does not not create ticket field options. Use {Readiness::Zendesk::TicketFieldOptions} for that.
138
205
  #
139
206
  # @author Jason Colyer
140
207
  # @since 1.0.0
@@ -149,20 +216,21 @@ module Readiness
149
216
  # config.token = 'test123abc'
150
217
  # config.url = 'https://example.zendesk.com/api/v2'
151
218
  # client = Readiness::Zendesk::Client.new(config)
152
- # field = Readiness::Zendesk::TicketFields.new
219
+ # field = Readiness::Zendesk::TicketFields.new(client)
153
220
  # field.type = 'text'
154
221
  # field.title = 'Age'
155
222
  # create = Readiness::Zendesk::TicketFields.create!(client, field)
156
223
  # pp create.id
157
224
  # # => 89
158
225
  def self.create!(client, field)
226
+ field.custom_field_options = nil
159
227
  response = client.connection.post 'ticket_fields', to_clean_json_with_key(field, 'ticket_field')
160
228
  handle_request_error(1, 'Zendesk', response.status, { action: 'Create ticket field', message: Oj.load(response.body)}) unless response.status == 201
161
- TicketFields.new(Oj.load(response.body)['ticket_field'])
229
+ TicketFields.new(client, Oj.load(response.body)['ticket_field'])
162
230
  end
163
231
 
164
232
  ##
165
- # Updates a ticket field. Will exit if unsuccessful
233
+ # Updates a ticket field. Will exit if unsuccessful. Note that this does not not update ticket field options. Use {Readiness::Zendesk::TicketFieldOptions} for that.
166
234
  #
167
235
  # @author Jason Colyer
168
236
  # @since 1.0.0
@@ -187,9 +255,10 @@ module Readiness
187
255
  # pp update.title
188
256
  # # => "Pies"
189
257
  def self.update!(client, field)
258
+ field.custom_field_options = nil
190
259
  response = client.connection.put "ticket_fields/#{field.id}", to_clean_json_with_key(field, 'ticket_field')
191
260
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update ticket field', message: Oj.load(response.body)}) unless response.status == 200
192
- TicketFields.new(Oj.load(response.body)['ticket_field'])
261
+ TicketFields.new(client, Oj.load(response.body)['ticket_field'])
193
262
  end
194
263
 
195
264
  ##
@@ -23,10 +23,10 @@ module Readiness
23
23
  # Readiness::Zendesk::TicketForms.new
24
24
  def initialize(object = {})
25
25
  @active = object['active']
26
- @agent_conditions = object['agent_conditions']
26
+ @agent_conditions = clean_conditions(object['agent_conditions'])
27
27
  @default = object['default']
28
28
  @display_name = object['display_name']
29
- @end_user_conditions = object['end_user_conditions']
29
+ @end_user_conditions = clean_conditions(object['end_user_conditions'])
30
30
  @end_user_visible = object['end_user_visible']
31
31
  @id = object['id']
32
32
  @in_all_brands = object['in_all_brands']
@@ -36,6 +36,21 @@ module Readiness
36
36
  @ticket_field_ids = object['ticket_field_ids']
37
37
  end
38
38
 
39
+ ##
40
+ # Removes unneeded values from the conditions variable on a {Readiness::Zendesk::TicketForms} object
41
+ #
42
+ # @author Jason Colyer
43
+ # @since 1.0.12
44
+ # @param conditions [Hash]
45
+ # @return [Hash]
46
+ def clean_conditions(conditions)
47
+ return nil if conditions.nil?
48
+ return [] if conditions.count.zero?
49
+
50
+ conditions.map { |c| c.delete('parent_field_type') }
51
+ conditions
52
+ end
53
+
39
54
  ##
40
55
  # Lists the first 100 ticket forms
41
56
  #
@@ -137,6 +152,54 @@ module Readiness
137
152
  Oj.load(response.body)['ticket_forms'].map { |f| TicketForms.new(f) }
138
153
  end
139
154
 
155
+ ##
156
+ # Locates a ticket form within Zendesk by name. This will not exit on error (except Authentication errors)
157
+ #
158
+ # @author Jason Colyer
159
+ # @since 1.0.12
160
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
161
+ # @param name [String] The ticket form name to look for
162
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
163
+ # @example
164
+ # require 'support_readiness'
165
+ # config = Readiness::Zendesk::Configuration.new
166
+ # config.username = 'alice@example.com'
167
+ # config.token = 'test123abc'
168
+ # config.url = 'https://example.zendesk.com/api/v2'
169
+ # client = Readiness::Zendesk::Client.new(config)
170
+ # form = Readiness::Zendesk::TicketForms.find_by_name(client, 'Snowboard Problem')
171
+ # pp form.id
172
+ # # => 47
173
+ def self.find_by_name(client, name)
174
+ forms = TicketForms.list(client)
175
+ forms.detect { |f| f.name == name }
176
+ end
177
+
178
+ ##
179
+ # Locates a ticket field within Zendesk by name. This will exit on error
180
+ #
181
+ # @author Jason Colyer
182
+ # @since 1.0.12
183
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
184
+ # @param name [String] The ticket field name to look for
185
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
186
+ # @example
187
+ # require 'support_readiness'
188
+ # config = Readiness::Zendesk::Configuration.new
189
+ # config.username = 'alice@example.com'
190
+ # config.token = 'test123abc'
191
+ # config.url = 'https://example.zendesk.com/api/v2'
192
+ # client = Readiness::Zendesk::Client.new(config)
193
+ # form = Readiness::Zendesk::TicketForms.find_by_name!(client, 'Snowboard Problem')
194
+ # pp form.id
195
+ # # => 47
196
+ def self.find_by_name!(client, name)
197
+ forms = TicketForms.list(client)
198
+ form = forms.detect { |f| f.name == name }
199
+ handle_request_error(1, 'Zendesk', 404, { action: 'Find ticket form', id: name }) if form.nil?
200
+ form
201
+ end
202
+
140
203
  ##
141
204
  # Creates a ticket form. Will exit if unsuccessful
142
205
  #
@@ -846,6 +846,83 @@ module Readiness
846
846
  handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many suspended ticket', id: sids }) unless response.status == 200
847
847
  true
848
848
  end
849
+
850
+ ##
851
+ # Redacts all attachments (inline and external) within a ticket. This will not exit on error (except Authentication errors)
852
+ #
853
+ # @author Jason Colyer
854
+ # @since 1.0.12
855
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
856
+ # @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
857
+ # @return [Boolean]
858
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_comments/#redact-ticket-comment-in-agent-workspace Zendesk API > Ticket Comments > Redact Ticket Comment In Agent Workspace
859
+ # @example
860
+ # require 'support_readiness'
861
+ # config = Readiness::Zendesk::Configuration.new
862
+ # config.username = 'alice@example.com'
863
+ # config.token = 'test123abc'
864
+ # config.url = 'https://example.zendesk.com/api/v2'
865
+ # client = Readiness::Zendesk::Client.new(config)
866
+ # ticket = Readiness::Zendesk::Tickets.find!(client, 141)
867
+ # redaction = Readiness::Zendesk::Tickets.redact_attachments!(client, ticket)
868
+ # pp redaction
869
+ # # => true
870
+ def self.redact_attachments(client, ticket)
871
+ redactions = []
872
+ Tickets.comments(client, ticket).each do |c|
873
+ object = {
874
+ id: c['id'],
875
+ redaction: { ticket_id: ticket.id }
876
+ }
877
+ object[:redaction][:external_attachment_urls] = c['attachments'].map { |a| a['content_url'] } unless c['attachments'].count.zero?
878
+ object[:redaction][:html_body] = c['html_body'].gsub('<img', '<img redact') if c['html_body'] =~ /<img/
879
+ redactions.push(object) unless object[:redaction][:external_attachment_urls].nil? && object[:redaction][:html_body].nil?
880
+ end
881
+ redactions.each do |r|
882
+ response = client.connection.put "comment_redactions/#{r[:id]}", r[:redaction].to_json
883
+ handle_request_error(0, 'Zendesk', response.status, { action: 'Redact attachments', id: "tickets/#{ticket.id}/comments/#{r[:id]}" }) unless response.status == 200
884
+ return false
885
+ end
886
+ true
887
+ end
888
+
889
+ ##
890
+ # Redacts all attachments (inline and external) within a ticket. This will exit on error
891
+ #
892
+ # @author Jason Colyer
893
+ # @since 1.0.12
894
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
895
+ # @param ticket [Object] An instance of {Readiness::Zendesk::Tickets}
896
+ # @return [Boolean]
897
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_comments/#redact-ticket-comment-in-agent-workspace Zendesk API > Ticket Comments > Redact Ticket Comment In Agent Workspace
898
+ # @example
899
+ # require 'support_readiness'
900
+ # config = Readiness::Zendesk::Configuration.new
901
+ # config.username = 'alice@example.com'
902
+ # config.token = 'test123abc'
903
+ # config.url = 'https://example.zendesk.com/api/v2'
904
+ # client = Readiness::Zendesk::Client.new(config)
905
+ # ticket = Readiness::Zendesk::Tickets.find!(client, 141)
906
+ # redaction = Readiness::Zendesk::Tickets.redact_attachments!(client, ticket)
907
+ # pp redaction
908
+ # # => true
909
+ def self.redact_attachments!(client, ticket)
910
+ redactions = []
911
+ Tickets.comments(client, ticket).each do |c|
912
+ object = {
913
+ id: c['id'],
914
+ redaction: { ticket_id: ticket.id }
915
+ }
916
+ object[:redaction][:external_attachment_urls] = c['attachments'].map { |a| a['content_url'] } unless c['attachments'].count.zero?
917
+ object[:redaction][:html_body] = c['html_body'].gsub('<img', '<img redact') if c['html_body'] =~ /<img/
918
+ redactions.push(object) unless object[:redaction][:external_attachment_urls].nil? && object[:redaction][:html_body].nil?
919
+ end
920
+ redactions.each do |r|
921
+ response = client.connection.put "comment_redactions/#{r[:id]}", r[:redaction].to_json
922
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Redact attachments', id: "tickets/#{ticket.id}/comments/#{r[:id]}" }) unless response.status == 200
923
+ end
924
+ true
925
+ end
849
926
  end
850
927
  end
851
928
  end
@@ -10,7 +10,7 @@ module Readiness
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
12
  class Triggers < Readiness::Client
13
- attr_accessor :actions, :active, :category_id, :conditions, :default, :description, :id, :position, :title
13
+ attr_accessor :actions, :active, :category_id, :conditions, :description, :id, :position, :title
14
14
 
15
15
  ##
16
16
  # Creates a new {Readiness::Zendesk::Triggers} instance
@@ -26,7 +26,6 @@ module Readiness
26
26
  @active = object['active']
27
27
  @category_id = object['category_id']
28
28
  @conditions = object['conditions']
29
- @default = object['default']
30
29
  @description = object['description']
31
30
  @id = object['id']
32
31
  @position = object['position']
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Zendesk
6
+ module Zendesk
7
+ ##
8
+ # Defines the class UserFieldOptions within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class UserFieldOptions < Readiness::Client
13
+ attr_accessor :id, :name, :position, :value
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::UserFieldOptions} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param object [Object] An instance of {Readiness::Zendesk::UserFieldOptions}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::TicketFieldOptions.new
24
+ def initialize(object = {})
25
+ @id = object['id']
26
+ @name = object['name']
27
+ @position = object['position']
28
+ @value = object['value']
29
+ end
30
+
31
+ ##
32
+ # Lists all user fields options for a specific user field.
33
+ #
34
+ # @author Jason Colyer
35
+ # @since 1.0.12
36
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
37
+ # @param fid [Integer] The field ID to get the field options for
38
+ # @return [Array]
39
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#list-user-field-options Zendesk API > User Fields > List User Field Options
40
+ # @example
41
+ # require 'support_readiness'
42
+ # config = Readiness::Zendesk::Configuration.new
43
+ # config.username = 'alice@example.com'
44
+ # config.token = 'test123abc'
45
+ # config.url = 'https://example.zendesk.com/api/v2'
46
+ # client = Readiness::Zendesk::Client.new(config)
47
+ # options = Readiness::Zendesk::UserFieldOptions.list(client, 123)
48
+ # pp fields.count
49
+ # # => 5
50
+ def self.list(client, fid)
51
+ array = []
52
+ page = 1
53
+ loop do
54
+ response = client.connection.get("user_fields/#{fid}/options?page=#{page}")
55
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
56
+ body = Oj.load(response.body)
57
+ array += body['custom_field_options'].map { |f| UserFieldOptions.new(f) }
58
+ break unless body['custom_field_options'].count == 100
59
+
60
+ page += 1
61
+ end
62
+ array
63
+ end
64
+
65
+ ##
66
+ # Creates or updates an user field option. This will exit on error.
67
+ #
68
+ # @author Jason Colyer
69
+ # @since 1.0.12
70
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
71
+ # @param field [Object] An instance of {Readiness::Zendesk::UserFields}
72
+ # @param option [Object] An instance of {Readiness::Zendesk::UserFieldOptions}
73
+ # @return [Object]
74
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#create-or-update-a-user-field-option Zendesk API > User Fields > Create or Update a User Field Option
75
+ def self.create_or_update!(client, field, option)
76
+ response = client.connection.post "user_fields/#{field.id}/options", to_clean_json_with_key(option, 'custom_field_option')
77
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create/update user field option', message: Oj.load(response.body)}) unless [200, 201].include?(response.status)
78
+ UserFieldOptions.new(Oj.load(response.body)['custom_field_option'])
79
+ end
80
+
81
+ ##
82
+ # Deletes aan user field option. Will exit if unsuccessful
83
+ #
84
+ # @author Jason Colyer
85
+ # @since 1.0.12
86
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
87
+ # @param field [Object] An instance of {Readiness::Zendesk::UserFields}
88
+ # @param option [Object] An instance of {Readiness::Zendesk::UserFieldOptions}
89
+ # @return [Boolean]
90
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#delete-user-field-option Zendesk API > USer Fields > Delete User Field Option
91
+ # @example
92
+ # require 'support_readiness'
93
+ # config = Readiness::Zendesk::Configuration.new
94
+ # config.username = 'alice@example.com'
95
+ # config.token = 'test123abc'
96
+ # config.url = 'https://example.zendesk.com/api/v2'
97
+ # client = Readiness::Zendesk::Client.new(config)
98
+ # field = Readiness::Zendesk::UserFields.find!(client, 75)
99
+ # option = field.custom_field_options.last
100
+ # delete = Readiness::Zendesk::UserFieldOptions.delete!(client, field, option)
101
+ # pp delete
102
+ # # => true
103
+ def self.delete!(client, field, option)
104
+ response = client.connection.delete "user_fields/#{field.id}/options/#{option.id}"
105
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a user field option', id: "user_fields/#{field.id}/options/#{option.id}", message: Oj.load(response.body)}) unless response.status == 204
106
+ true
107
+ end
108
+ end
109
+ end
110
+ end