gitlab_support_readiness 1.0.11 → 1.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) 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/jobs.rb +189 -0
  13. data/lib/support_readiness/gitlab/markdown.rb +37 -0
  14. data/lib/support_readiness/gitlab/merge_requests.rb +127 -0
  15. data/lib/support_readiness/gitlab/namespaces.rb +22 -0
  16. data/lib/support_readiness/gitlab/pipelines.rb +191 -0
  17. data/lib/support_readiness/gitlab/projects.rb +85 -1
  18. data/lib/support_readiness/gitlab/repositories.rb +174 -0
  19. data/lib/support_readiness/gitlab/users.rb +24 -0
  20. data/lib/support_readiness/gitlab.rb +4 -0
  21. data/lib/support_readiness/google_calendar/client.rb +59 -0
  22. data/lib/support_readiness/google_calendar/configuration.rb +39 -0
  23. data/lib/support_readiness/google_calendar/events.rb +169 -0
  24. data/lib/support_readiness/google_calendar.rb +14 -0
  25. data/lib/support_readiness/mailgun/bounces.rb +103 -0
  26. data/lib/support_readiness/mailgun/client.rb +65 -0
  27. data/lib/support_readiness/mailgun/configuration.rb +46 -0
  28. data/lib/support_readiness/mailgun/emails.rb +95 -0
  29. data/lib/support_readiness/mailgun.rb +15 -0
  30. data/lib/support_readiness/pagerduty/escalation_policies.rb +1 -1
  31. data/lib/support_readiness/pagerduty/schedules.rb +27 -3
  32. data/lib/support_readiness/pagerduty/services.rb +1 -1
  33. data/lib/support_readiness/pagerduty/users.rb +197 -0
  34. data/lib/support_readiness/pagerduty.rb +1 -0
  35. data/lib/support_readiness/repos/articles.rb +335 -0
  36. data/lib/support_readiness/repos/automations.rb +247 -0
  37. data/lib/support_readiness/repos/groups.rb +188 -0
  38. data/lib/support_readiness/repos/macros.rb +224 -0
  39. data/lib/support_readiness/repos/organization_fields.rb +193 -0
  40. data/lib/support_readiness/repos/sla_policies.rb +192 -0
  41. data/lib/support_readiness/repos/ticket_fields.rb +200 -0
  42. data/lib/support_readiness/repos/ticket_forms.rb +200 -0
  43. data/lib/support_readiness/repos/triggers.rb +255 -0
  44. data/lib/support_readiness/repos/user_fields.rb +201 -0
  45. data/lib/support_readiness/repos/views.rb +362 -0
  46. data/lib/support_readiness/repos.rb +22 -0
  47. data/lib/support_readiness/salesforce/accounts.rb +109 -0
  48. data/lib/support_readiness/salesforce/cases.rb +109 -0
  49. data/lib/support_readiness/salesforce/client.rb +64 -0
  50. data/lib/support_readiness/salesforce/configuration.rb +49 -0
  51. data/lib/support_readiness/salesforce/queries.rb +62 -0
  52. data/lib/support_readiness/salesforce.rb +16 -0
  53. data/lib/support_readiness/slack/client.rb +63 -0
  54. data/lib/support_readiness/slack/configuration.rb +43 -0
  55. data/lib/support_readiness/slack/messages.rb +37 -0
  56. data/lib/support_readiness/slack.rb +14 -0
  57. data/lib/support_readiness/zendesk/app_job_statuses.rb +140 -0
  58. data/lib/support_readiness/zendesk/apps.rb +209 -0
  59. data/lib/support_readiness/zendesk/automations.rb +1 -2
  60. data/lib/support_readiness/zendesk/macros.rb +1 -3
  61. data/lib/support_readiness/zendesk/organization_fields.rb +1 -1
  62. data/lib/support_readiness/zendesk/theme_job_statuses.rb +136 -0
  63. data/lib/support_readiness/zendesk/themes.rb +303 -0
  64. data/lib/support_readiness/zendesk/ticket_field_options.rb +110 -0
  65. data/lib/support_readiness/zendesk/ticket_fields.rb +85 -16
  66. data/lib/support_readiness/zendesk/ticket_forms.rb +65 -2
  67. data/lib/support_readiness/zendesk/tickets.rb +77 -0
  68. data/lib/support_readiness/zendesk/triggers.rb +1 -2
  69. data/lib/support_readiness/zendesk/user_field_options.rb +110 -0
  70. data/lib/support_readiness/zendesk/user_fields.rb +257 -0
  71. data/lib/support_readiness/zendesk/views.rb +49 -2
  72. data/lib/support_readiness/zendesk.rb +7 -0
  73. data/lib/support_readiness.rb +16 -0
  74. metadata +122 -2
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Salesforce
6
+ module Salesforce
7
+ ##
8
+ # Defines the class Configuration within the module {Readiness::Salesforce}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Configuration
13
+ attr_accessor :api_version, :client_id, :client_secret, :host, :password, :security_token, :username
14
+
15
+ ##
16
+ # Creates a new {Readiness::Salesforce::Configuration} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @example
21
+ # require 'support_readiness'
22
+ # config = Readiness::Salesforce::Configuration.new
23
+ # config.api_version = '58.0'
24
+ # config.client_id = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'
25
+ # config.client_secret = 'XYZ789'
26
+ # config.password = 'p@ssw0rd!'
27
+ # config.security_token = 'ABC123'
28
+ # config.username = 'alice@example.com'
29
+ # pp config
30
+ # # => #<Readiness::Salesforce::Configuration:0x00007f352fdd1420
31
+ # @api_version="58.0",
32
+ # @client_id="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789",
33
+ # @client_secret="XYZ789",
34
+ # @host="login.salesforce.com",
35
+ # @password="p@ssw0rd!",
36
+ # @security_token="ABC123",
37
+ # @username="alice@example.com">
38
+ def initialize
39
+ @api_version = ''
40
+ @client_id = ''
41
+ @client_secret = ''
42
+ @host = 'login.salesforce.com'
43
+ @password = ''
44
+ @security_token = ''
45
+ @username = ''
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Salesforce
6
+ module Salesforce
7
+ ##
8
+ # Defines the class Queries within the module {Readiness::Salesforce}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Queries < Readiness::Client
13
+ attr_accessor :syntax
14
+
15
+ ##
16
+ # Creates a new {Readiness::Salesforce::Queries} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param syntax [String] The query syntax to use
21
+ # @example
22
+ # require 'support_readiness'
23
+ # query = Readiness::Salesforce::Queries.new
24
+ # query.syntax = 'SELECT Name FROM Account LIMIT 5'
25
+ # pp query
26
+ # # => #<Readiness::Salesforce::Queries:0x00007f5383091ab8 @syntax="SELECT Name FROM Account LIMIT 5">
27
+ # @example
28
+ # require 'support_readiness'
29
+ # query = Readiness::Salesforce::Queries.new('SELECT Name FROM Account LIMIT 5')
30
+ # pp query
31
+ # # => #<Readiness::Salesforce::Queries:0x00007f5383091ab8 @syntax="SELECT Name FROM Account LIMIT 5">
32
+ def initialize(syntax = '')
33
+ @syntax = syntax
34
+ end
35
+
36
+ ##
37
+ # Runs a SOQL query. This will exit on error
38
+ #
39
+ # @author Jason Colyer
40
+ # @since 1.0.12
41
+ # @param client [Object] An instance of {Readiness::Salesforce::Client}
42
+ # @param query [Object] A {Readiness::Salesforce::Queries} instance
43
+ # @return [Array]
44
+ # @example
45
+ # config = Readiness::Salesforce::Configuration.new
46
+ # config.api_version = '58.0'
47
+ # config.client_id = ENV.fetch('SFDC_CLIENTID')
48
+ # config.client_secret = ENV.fetch('SFDC_CLIENTSECRET')
49
+ # config.password = ENV.fetch('SFDC_PASSWORD')
50
+ # config.security_token = ENV.fetch('SFDC_SECURITYTOKEN')
51
+ # config.username = ENV.fetch('SFDC_USERNAME')
52
+ # client = Readiness::Salesforce::Client.new(config)
53
+ # query = Readiness::Salesforce::Queries.new('SELECT Name FROM Account LIMIT 5')
54
+ # results = Readiness::Salesforce::Queries.run!(client, query)
55
+ # pp results.map { |a| a.Name }
56
+ # # => ["Account 1", "Account 2", "Account 3", "Account 4", "Account 5"]
57
+ def self.run!(client, query)
58
+ client.connection.query(query.syntax)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ ##
6
+ # Defines the module Salesforce
7
+ # @author Jason Colyer
8
+ # @since 1.0.12
9
+ module Salesforce
10
+ require "#{__dir__}/salesforce/accounts"
11
+ require "#{__dir__}/salesforce/cases"
12
+ require "#{__dir__}/salesforce/client"
13
+ require "#{__dir__}/salesforce/configuration"
14
+ require "#{__dir__}/salesforce/queries"
15
+ end
16
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Slack
6
+ module Slack
7
+ ##
8
+ # Defines the class Client within the module {Readiness::Slack}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Client
13
+ attr_reader :connection
14
+
15
+ ##
16
+ # Creates a new {Readiness::Slack::Client} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param config [Object] An instance of {Readiness::Slack::Configuration}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # config = Readiness::Slack::Configuration.new
24
+ # config.url = 'https://hooks.slack.com/services/T12345678/A12BC3EFGHI/1aBCDefgHIJKlmnOPQRsT1u2'
25
+ # client = Readiness::Slack::Client.new(config)
26
+ def initialize(config = Readiness::Slack::Configuration.new)
27
+ @connection = generate_connection(config)
28
+ end
29
+
30
+ ##
31
+ # Used to generate the retry options passed to Faraday via faraday-retry
32
+ #
33
+ # @author Jason Colyer
34
+ # @since 1.0.12
35
+ # @param config [Object] An instance of {Readiness::Slack::Configuration}
36
+ # @return [Hash]
37
+ def retry_options(config)
38
+ {
39
+ max: config.retry_max,
40
+ interval: config.retry_interval,
41
+ interval_randomness: config.retry_randomness,
42
+ backoff_factor: config.retry_backoff,
43
+ exceptions: config.retry_exceptions
44
+ }
45
+ end
46
+
47
+ ##
48
+ # Used to generate a Faraday connection
49
+ #
50
+ # @author Jason Colyer
51
+ # @since 1.0.0
52
+ # @param config [Object] An instance of {Readiness::Slack::Configuration}
53
+ # @return [Object]
54
+ def generate_connection(config)
55
+ Faraday.new(config.url) do |c|
56
+ c.request :retry, retry_options(config)
57
+ c.adapter Faraday.default_adapter
58
+ c.headers['Content-Type'] = 'application/json'
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Slack
6
+ module Slack
7
+ ##
8
+ # Defines the class Configuration within the module {Readiness::Slack}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Configuration
13
+ attr_accessor :url, :retry_options, :retry_max, :retry_interval, :retry_randomness, :retry_backoff, :retry_exceptions
14
+
15
+ ##
16
+ # Creates a new {Readiness::Slack::Configuration} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @example
21
+ # require 'support_readiness'
22
+ # config = Readiness::Slack::Configuration.new
23
+ # config.url = 'https://hooks.slack.com/services/T12345678/A12BC3EFGHI/1aBCDefgHIJKlmnOPQRsT1u2'
24
+ # pp config
25
+ # # => #<Readiness::Slack::Configuration:0x00007f352fdd1420
26
+ # @url="https://hooks.slack.com/services/T12345678/A12BC3EFGHI/1aBCDefgHIJKlmnOPQRsT1u2"
27
+ # @retry_backoff=2,
28
+ # @retry_exceptions=
29
+ # [Errno::ETIMEDOUT, "Timeout::Error", Faraday::TimeoutError, Faraday::RetriableResponse, Faraday::ConnectionFailed],
30
+ # @retry_interval=1,
31
+ # @retry_max=5,
32
+ # @retry_randomness=0.5>
33
+ def initialize
34
+ @url = ''
35
+ @retry_max = 5
36
+ @retry_interval = 1
37
+ @retry_randomness = 0.5
38
+ @retry_backoff = 2
39
+ @retry_exceptions = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Slack
6
+ module Slack
7
+ ##
8
+ # Defines the class Emails within the module {Readiness::Slack}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Messages < Readiness::Client
13
+ ##
14
+ # Posts a message via Slack
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.12
18
+ # @param client [Object] An instance of {Readiness::Slack::Client}
19
+ # @param params This is pretty flexible, can be a simply String to a complex Hash
20
+ # @return [Boolean]
21
+ # @example
22
+ # require 'support_readiness'
23
+ # config = Readiness::Slack::Configuration.new
24
+ # config.url = 'https://hooks.slack.com/services/T12345678/A12BC3EFGHI/1aBCDefgHIJKlmnOPQRsT1u2'
25
+ # client = Readiness::Slack::Client.new(config)
26
+ # message = 'Jason Test'
27
+ # pp Readiness::Slack::Messages.create!(client, message)
28
+ # # => true
29
+ def self.create!(client, params)
30
+ response = client.connection.post '', { text: params }.to_json
31
+ handle_request_error(1, 'Slack', response.status, { action: 'Create a message', id: client.url }) unless response.status == 200
32
+ true
33
+ end
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ ##
6
+ # Defines the module Slack
7
+ # @author Jason Colyer
8
+ # @since 1.0.12
9
+ module Slack
10
+ require "#{__dir__}/slack/client"
11
+ require "#{__dir__}/slack/configuration"
12
+ require "#{__dir__}/slack/messages"
13
+ end
14
+ end
@@ -0,0 +1,140 @@
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 AppJobStatuses within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class AppJobStatuses < Readiness::Client
13
+ attr_accessor :app_id, :app_url, :id, :message, :progress, :retry_in, :status, :total
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::AppJobStatuses} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param object [Object] An instance of {Readiness::Zendesk::AppJobStatuses}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::AppJobStatuses.new
24
+ def initialize(object = {})
25
+ @app_id = object['app_id']
26
+ @app_url = object['app_url']
27
+ @id = object['id']
28
+ @message = object['message']
29
+ @progress = object['progress']
30
+ @retry_in = object['retry_in']
31
+ @status = object['status']
32
+ @total = object['total']
33
+ end
34
+
35
+ ##
36
+ # Locates an app job status within Zendesk. This will not exit on error (except Authentication errors)
37
+ #
38
+ # @author Jason Colyer
39
+ # @since 1.0.12
40
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
41
+ # @param jid [String] The job status ID to find
42
+ # @return [Hash]
43
+ # @see https://developer.zendesk.com/api-reference/ticketing/apps/apps/#get-job-status Zendesk API > Apps > Get job status
44
+ # @example
45
+ # require 'support_readiness'
46
+ # config = Readiness::Zendesk::Configuration.new
47
+ # config.username = 'alice@example.com'
48
+ # config.token = 'test123abc'
49
+ # config.url = 'https://example.zendesk.com/api/v2'
50
+ # client = Readiness::Zendesk::Client.new(config)
51
+ # job = Readiness::Zendesk::AppJobStatuses.find(client, '8b726e606741012ffc2d782bcb7848fe')
52
+ # pp job.status
53
+ # # => "completed"
54
+ def self.find(client, jid)
55
+ response = client.connection.get("apps/job_statuses/#{jid}")
56
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: jid }) unless response.status == 200
57
+ return AppJobStatuses.new(Oj.load(response.body)) if response.status == 200
58
+
59
+ Oj.load(response.body)
60
+ end
61
+
62
+ ##
63
+ # Locates an app job status within Zendesk. This will exit on error
64
+ #
65
+ # @author Jason Colyer
66
+ # @since 1.0.12
67
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
68
+ # @param jid [String] The job status ID to find
69
+ # @return [Object]
70
+ # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/job_statuses/#show-job-status Zendesk API > Job Statuses > Show Job Status
71
+ # @example
72
+ # require 'support_readiness'
73
+ # config = Readiness::Zendesk::Configuration.new
74
+ # config.username = 'alice@example.com'
75
+ # config.token = 'test123abc'
76
+ # config.url = 'https://example.zendesk.com/api/v2'
77
+ # client = Readiness::Zendesk::Client.new(config)
78
+ # job = Readiness::Zendesk::AppJobStatuses.find!(client, '8b726e606741012ffc2d782bcb7848fe')
79
+ # pp job.status
80
+ # # => "completed"
81
+ def self.find!(client, jid)
82
+ response = client.connection.get("apps/job_statuses/#{jid}")
83
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find app job status', id: jid }) unless response.status == 200
84
+ AppJobStatuses.new(Oj.load(response.body))
85
+ end
86
+
87
+ ##
88
+ # Waits for a job to complete. Be mindful of API limits when setting the wait interval
89
+ #
90
+ # @author Jason Colyer
91
+ # @since 1.0.12
92
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
93
+ # @param job [Object] An instance of {Readiness::Zendesk::AppJobStatuses}
94
+ # @param interval [Integer] The time (in seconds) between checks
95
+ # @param verbose [Boolean] Whether or not to output messages
96
+ # @return [Object] An instance of {Readiness::Zendesk::AppJobStatuses}
97
+ # @example
98
+ # require 'support_readiness'
99
+ # config = Readiness::Zendesk::Configuration.new
100
+ # config.username = 'alice@example.com'
101
+ # config.token = 'test123abc'
102
+ # config.url = 'https://example.zendesk.com/api/v2'
103
+ # client = Readiness::Zendesk::Client.new(config)
104
+ # job = Readiness::Zendesk::AppJobStatuses.find!(client, '8b726e606741012ffc2d782bcb7848fe')
105
+ # completed_job = Readiness::Zendesk::AppJobStatuses.wait_for_completetion(client, job, 10, true)
106
+ # # => Waiting 10 seconds before checking 8b726e606741012ffc2d782bcb7848fe
107
+ # # => Rechecking status of 8b726e606741012ffc2d782bcb7848fe...status is queued
108
+ # # => Waiting 10 seconds before checking 8b726e606741012ffc2d782bcb7848fe
109
+ # # => Rechecking status of 8b726e606741012ffc2d782bcb7848fe...status is working
110
+ # # => Waiting 10 seconds before checking 8b726e606741012ffc2d782bcb7848fe
111
+ # # => Rechecking status of 8b726e606741012ffc2d782bcb7848fe...status is completed
112
+ # # => Job is finished with status of completed
113
+ # pp completed_job.status
114
+ # # => "completed"
115
+ # @example
116
+ # require 'support_readiness'
117
+ # config = Readiness::Zendesk::Configuration.new
118
+ # config.username = 'alice@example.com'
119
+ # config.token = 'test123abc'
120
+ # config.url = 'https://example.zendesk.com/api/v2'
121
+ # client = Readiness::Zendesk::Client.new(config)
122
+ # job = Readiness::Zendesk::AppJobStatuses.find!(client, '8b726e606741012ffc2d782bcb7848fe')
123
+ # completed_job = Readiness::Zendesk::AppJobStatuses.wait_for_completetion(client, job, 5, false)
124
+ # pp completed_job.status
125
+ # # => "completed"
126
+ def self.wait_for_completetion(client, job, interval = 5, verbose = true)
127
+ loop do
128
+ puts "Waiting #{interval} seconds before checking #{job.id}" if verbose
129
+ sleep interval
130
+ print "Rechecking status of #{job.id}..." if verbose
131
+ job = AppJobStatuses.find!(client, job.id)
132
+ puts "status is #{job.status}" if verbose
133
+ break if %w[failed completed].include? job.status
134
+ end
135
+ puts "Job is finished with status of #{job.status}" if verbose
136
+ job
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,209 @@
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 Apps within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Apps < Readiness::Client
13
+ attr_accessor :author_email, :author_name, :author_url, :categories, :closed_preview, :default_locale, :deprecated, :featrure_color, :featured, :framework_version, :google_analytics_code, :id, :installable, :installation_instructions, :large_icon, :long_description, :marketing_only, :name, :obsolete, :owner_id, :paid, :parameters, :products, :promoted, :raw_installation_instructions, :raw_long_description, :remote_installation_url, :screenshots, :short_description, :single_install, :small_icon, :state, :terms_conditions_url, :version, :visibility
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::Apps} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param object [Object] An instance of {Readiness::Zendesk::Apps}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::Apps.new
24
+ def initialize(object = {})
25
+ @author_email = object['author_email']
26
+ @author_name = object['author_name']
27
+ @author_url = object['author_url']
28
+ @categories = object['categories']
29
+ @closed_preview = object['closed_preview']
30
+ @default_locale = object['default_locale']
31
+ @deprecated = object['deprecated']
32
+ @featrure_color = object['featrure_color']
33
+ @featured = object['featured']
34
+ @framework_version = object['framework_version']
35
+ @google_analytics_code = object['google_analytics_code']
36
+ @id = object['id']
37
+ @installable = object['installable']
38
+ @installation_instructions = object['installation_instructions']
39
+ @large_icon = object['large_icon']
40
+ @long_description = object['long_description']
41
+ @marketing_only = object['marketing_only']
42
+ @name = object['name']
43
+ @obsolete = object['obsolete']
44
+ @owner_id = object['owner_id']
45
+ @paid = object['paid']
46
+ @parameters = object['parameters']
47
+ @products = object['products']
48
+ @promoted = object['promoted']
49
+ @raw_installation_instructions = object['raw_installation_instructions']
50
+ @raw_long_description = object['raw_long_description']
51
+ @remote_installation_url = object['remote_installation_url']
52
+ @screenshots = object['screenshots']
53
+ @short_description = object['short_description']
54
+ @single_install = object['single_install']
55
+ @small_icon = object['small_icon']
56
+ @state = object['state']
57
+ @terms_conditions_url = object['terms_conditions_url']
58
+ @version = object['version']
59
+ @visibility = object['visibility']
60
+ end
61
+
62
+ ##
63
+ # Lists owned apps within Zendesk
64
+ #
65
+ # @author Jason Colyer
66
+ # @since 1.0.12
67
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
68
+ # @return [Array]
69
+ # @see https://developer.zendesk.com/api-reference/ticketing/apps/apps/#list-owned-apps Zendesk API > Apps > List Owned Apps
70
+ # @example
71
+ # require 'support_readiness'
72
+ # config = Readiness::Zendesk::Configuration.new
73
+ # config.username = 'alice@example.com'
74
+ # config.token = 'test123abc'
75
+ # config.url = 'https://example.zendesk.com/api/v2'
76
+ # client = Readiness::Zendesk::Client.new(config)
77
+ # apps = Readiness::Zendesk::Apps.list(client)
78
+ # pp apps.first.name
79
+ # # => "Bookmarks"
80
+ def self.list(client)
81
+ response = client.connection.get 'apps/owned'
82
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
83
+ Oj.load(response.body)['apps'].map { |a| Apps.new(a) }
84
+ end
85
+
86
+ ##
87
+ # Locates an app within Zendesk. This will not exit on error (except Authentication errors)
88
+ #
89
+ # @author Jason Colyer
90
+ # @since 1.0.12
91
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
92
+ # @param aid [Integer] The app ID to locate
93
+ # @return [Object]
94
+ # @see https://developer.zendesk.com/api-reference/ticketing/apps/apps/#get-information-about-app Zendesk API > Apps > Get Information About App
95
+ # @example
96
+ # require 'support_readiness'
97
+ # config = Readiness::Zendesk::Configuration.new
98
+ # config.username = 'alice@example.com'
99
+ # config.token = 'test123abc'
100
+ # config.url = 'https://example.zendesk.com/api/v2'
101
+ # client = Readiness::Zendesk::Client.new(config)
102
+ # app = Readiness::Zendesk::Apps.find(client, 12345)
103
+ # pp app.name
104
+ # # => "Bookmarks"
105
+ def self.find(client, aid)
106
+ response = client.connection.get "apps/#{aid}"
107
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: aid }) unless response.status == 200
108
+ return Apps.new(Oj.load(response.body)) if response.status == 200
109
+
110
+ Oj.load(response.body)
111
+ end
112
+
113
+ ##
114
+ # Locates an app within Zendesk. This will exit on error
115
+ #
116
+ # @author Jason Colyer
117
+ # @since 1.0.12
118
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
119
+ # @param aid [Integer] The app ID to locate
120
+ # @return [Object]
121
+ # @see https://developer.zendesk.com/api-reference/ticketing/apps/apps/#get-information-about-app Zendesk API > Apps > Get Information About App
122
+ # @example
123
+ # require 'support_readiness'
124
+ # config = Readiness::Zendesk::Configuration.new
125
+ # config.username = 'alice@example.com'
126
+ # config.token = 'test123abc'
127
+ # config.url = 'https://example.zendesk.com/api/v2'
128
+ # client = Readiness::Zendesk::Client.new(config)
129
+ # app = Readiness::Zendesk::Apps.find!(client, 12345)
130
+ # pp app.name
131
+ # # => "Bookmarks"
132
+ def self.find!(client, aid)
133
+ response = client.connection.get "apps/#{aid}"
134
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find app', id: aid }) unless response.status == 200
135
+ Apps.new(Oj.load(response.body))
136
+ end
137
+
138
+ ##
139
+ # Creates a zip file from the current working directory for a Zendesk app. This will exit on error
140
+ #
141
+ # @author Jason Colyer
142
+ # @since 1.0.12
143
+ # @param location [location] The relative path to the location of the theme files
144
+ # @return [String] The path to the zip file
145
+ # @example
146
+ # require 'support_readiness'
147
+ # file = Readiness::Zendesk::Apps.package!
148
+ # pp file
149
+ # # => "data/20241007151228578.zip"
150
+ def self.package!(location = './')
151
+ item_list = %w[ assets translations manifest.json ]
152
+ create_package!(item_list, location)
153
+ end
154
+
155
+ ##
156
+ # Uploads a zip file from the current working directory for a Zendesk app. This will exit on erorr
157
+ #
158
+ # @author Jason Colyer
159
+ # @since 1.0.12
160
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
161
+ # @param file [String] The path to the zip file
162
+ # @return [Integer] The upload ID
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
+ # file = Readiness::Zendesk::Apps.package!
171
+ # job_id = Readiness::Zendesk::Apps.upload!(client, file)
172
+ # pp job_id
173
+ # # => 123
174
+ def self.upload!(client, file)
175
+ response = client.upload_connection.post 'apps/uploads', { uploaded_data: ::Faraday::UploadIO.new(file, 'application.zip') }
176
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Upload app', id: file }) unless response.status == 200
177
+ Oj.load(response.body)['id']
178
+ end
179
+
180
+ ##
181
+ # Performs an app update job. This will exit on erorr
182
+ #
183
+ # @author Jason Colyer
184
+ # @since 1.0.12
185
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
186
+ # @param app [Object] An instance of {Readiness::Zendesk::Apps}
187
+ # @return [Object] An instance of {Readiness::Zendesk::AppJobStatuses}
188
+ # @example
189
+ # require 'support_readiness'
190
+ # config = Readiness::Zendesk::Configuration.new
191
+ # config.username = 'alice@example.com'
192
+ # config.token = 'test123abc'
193
+ # config.url = 'https://example.zendesk.com/api/v2'
194
+ # client = Readiness::Zendesk::Client.new(config)
195
+ # app = Readiness::Zendesk::Apps.find!(client, 123)
196
+ # job = Readiness::Zendesk::Apps.update!(client, app)
197
+ # completed_job = Readiness::Zendesk::AppJobStatuses.wait_for_completetion(client, job, 5, false)
198
+ # pp completed_job.status
199
+ # # => "completed"
200
+ def self.update!(client, app)
201
+ file = package!
202
+ upload_id = upload!(client, file)
203
+ response = client.connection.put "apps/#{app.id}", { upload_id: upload_id }.to_json
204
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update app', id: app.id }) unless response.status == 200
205
+ AppJobStatuses.find!(client, Oj.load(response.body)['job_id'])
206
+ end
207
+ end
208
+ end
209
+ end
@@ -10,7 +10,7 @@ module Readiness
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
12
  class Automations < Readiness::Client
13
- attr_accessor :actions, :active, :conditions, :default, :id, :position, :title
13
+ attr_accessor :actions, :active, :conditions, :id, :position, :title
14
14
 
15
15
  ##
16
16
  # Creates a new {Readiness::Zendesk::Automations} instance
@@ -25,7 +25,6 @@ module Readiness
25
25
  @actions = object['actions']
26
26
  @active = object['active']
27
27
  @conditions = object['conditions']
28
- @default = object['default']
29
28
  @id = object['id']
30
29
  @position = object['position']
31
30
  @title = object['title']
@@ -10,7 +10,7 @@ module Readiness
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
12
  class Macros < Readiness::Client
13
- attr_accessor :actions, :active, :default, :description, :id, :position, :restriction, :title
13
+ attr_accessor :actions, :active, :description, :id, :restriction, :title
14
14
 
15
15
  ##
16
16
  # Creates a new {Readiness::Zendesk::Macros} instance
@@ -24,10 +24,8 @@ module Readiness
24
24
  def initialize(object = {})
25
25
  @actions = object['actions']
26
26
  @active = object['active']
27
- @default = object['default']
28
27
  @description = object['description']
29
28
  @id = object['id']
30
- @position = object['position']
31
29
  @restriction = object['restriction']
32
30
  @title = object['title']
33
31
  end