zendesk_apps_tools 2.12.0 → 2.12.1
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 +5 -5
- data/README.md +7 -1
- data/lib/zendesk_apps_tools/api_connection.rb +31 -8
- data/lib/zendesk_apps_tools/deploy.rb +33 -21
- data/lib/zendesk_apps_tools/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1ee308e4dfdc555c1b6c864fa7516d08cafe7f0f
|
4
|
+
data.tar.gz: 8fc3c41e0d56a395891f402b478944436ff9c806
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adb8c79e5bd5a625e9914c9bff76ed0a0cf37a209662e76aef57f9a445568890b90ee9847ee197587cfc328ed7c350dc3b70f5f58687fe065ed0862b1e28ed65
|
7
|
+
data.tar.gz: 60b4dba4543aef673189ced75f7b643047e4e1c87973fe576ffbfca09d591765c98f196872229c700d009a3670457ba3f6bec60913e1004bf40d8c72213ea952
|
data/README.md
CHANGED
@@ -18,10 +18,16 @@ For information on using the tools, see [Zendesk App Tools](https://developer.z
|
|
18
18
|
## Work on ZAT
|
19
19
|
If you want to help **develop** this tool, clone this repo and run `bundle install`.
|
20
20
|
|
21
|
-
ZAT uses a gem called [ZAS](https://github.com/zendesk/zendesk_apps_support/). If you're developing ZAT, you'll probably want to edit code in ZAS too. To do so, you need to clone the ZAS repo and
|
21
|
+
ZAT uses a gem called [ZAS](https://github.com/zendesk/zendesk_apps_support/). If you're developing ZAT, you'll probably want to edit code in ZAS too. To do so, you need to clone the ZAS repo and add the following line at the end of `Gemfile` in the ZAT project:
|
22
22
|
|
23
23
|
`gem 'zendesk_apps_support', path: '../zendesk_apps_support'`
|
24
24
|
|
25
|
+
Then, comment-out the line referring to `zendesk_apps_support` in this project's `.gemspec` file.
|
26
|
+
|
27
|
+
```
|
28
|
+
# s.add_runtime_dependency 'zendesk_apps_support', '~> X.YY.ZZ'
|
29
|
+
```
|
30
|
+
|
25
31
|
The path should point to your local ZAS directory. In this way, your clone of ZAT will use a local version of ZAS, which is very helpful for development. Run a `bundle install` after changing the Gemfile.
|
26
32
|
|
27
33
|
## Testing
|
@@ -1,11 +1,26 @@
|
|
1
1
|
module ZendeskAppsTools
|
2
2
|
module APIConnection
|
3
|
-
|
4
|
-
|
3
|
+
DEFAULT_URL_TEMPLATE = 'https://%s.zendesk.com/'
|
4
|
+
# taken from zendesk/lib/vars.rb
|
5
|
+
SUBDOMAIN_VALIDATION_PATTERN = /^[a-z0-9][a-z0-9\-]{1,}[a-z0-9]$/i
|
6
|
+
ZENDESK_URL_VALIDATION_PATTERN = /^(https?):\/\/[a-z0-9]+(([\.]|[\-]{1,2})[a-z0-9]+)*\.([a-z]{2,16}|[0-9]{1,3})((:[0-9]{1,5})?(\/?|\/.*))?$/ix
|
7
|
+
EMAIL_REGEX = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i
|
8
|
+
|
9
|
+
EMAIL_ERROR_MSG = 'Please enter a valid email address.'
|
10
|
+
PROMPT_FOR_URL = 'Enter your Zendesk subdomain or full URL (including protocol):'
|
11
|
+
URL_ERROR_MSG = [
|
12
|
+
'URL error. Example URL: https://mysubdomain.zendesk.com',
|
13
|
+
'If you are using a full URL, follow the url as shown above.',
|
14
|
+
'If you are using a subdomain, ensure that it contains only valid characters (a-z, A-Z, 0-9, and hyphens).'
|
15
|
+
].join('\n')
|
5
16
|
|
6
17
|
def prepare_api_auth
|
7
|
-
@subdomain ||= cache.fetch('subdomain') || get_value_from_stdin(
|
18
|
+
@subdomain ||= cache.fetch('subdomain') || get_value_from_stdin(PROMPT_FOR_URL)
|
19
|
+
say_error_and_exit URL_ERROR_MSG unless valid_subdomain? || valid_full_url?
|
20
|
+
|
8
21
|
@username ||= cache.fetch('username', @subdomain) || get_value_from_stdin('Enter your username:')
|
22
|
+
say_error_and_exit EMAIL_ERROR_MSG unless valid_email?
|
23
|
+
|
9
24
|
@password ||= cache.fetch('password', @subdomain) || get_password_from_stdin('Enter your password:')
|
10
25
|
|
11
26
|
cache.save 'subdomain' => @subdomain, 'username' => @username
|
@@ -25,11 +40,19 @@ module ZendeskAppsTools
|
|
25
40
|
private
|
26
41
|
|
27
42
|
def full_url
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
valid_full_url? ? @subdomain : (DEFAULT_URL_TEMPLATE % @subdomain)
|
44
|
+
end
|
45
|
+
|
46
|
+
def valid_full_url?
|
47
|
+
!!ZENDESK_URL_VALIDATION_PATTERN.match(@subdomain)
|
48
|
+
end
|
49
|
+
|
50
|
+
def valid_subdomain?
|
51
|
+
!!SUBDOMAIN_VALIDATION_PATTERN.match(@subdomain)
|
52
|
+
end
|
53
|
+
|
54
|
+
def valid_email?
|
55
|
+
!!EMAIL_REGEX.match(@username)
|
33
56
|
end
|
34
57
|
end
|
35
58
|
end
|
@@ -1,9 +1,16 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'zendesk_apps_tools/common'
|
3
|
+
require 'zendesk_apps_tools/api_connection'
|
4
|
+
|
1
5
|
module ZendeskAppsTools
|
2
6
|
module Deploy
|
7
|
+
include ZendeskAppsTools::Common
|
8
|
+
include ZendeskAppsTools::APIConnection
|
9
|
+
alias_method :connection, :get_connection
|
10
|
+
|
3
11
|
def deploy_app(connection_method, url, body)
|
4
12
|
body[:upload_id] = upload(options[:path]).to_s
|
5
13
|
sleep 2 # Because the DB needs time to replicate
|
6
|
-
connection = get_connection
|
7
14
|
|
8
15
|
response = connection.send(connection_method) do |req|
|
9
16
|
req.url url
|
@@ -19,7 +26,6 @@ module ZendeskAppsTools
|
|
19
26
|
|
20
27
|
def app_exists?(app_id)
|
21
28
|
url = "/api/v2/apps/#{app_id}.json"
|
22
|
-
connection = get_connection
|
23
29
|
response = connection.send(:get) do |req|
|
24
30
|
req.url url
|
25
31
|
end
|
@@ -28,7 +34,6 @@ module ZendeskAppsTools
|
|
28
34
|
end
|
29
35
|
|
30
36
|
def install_app(poll_job, product_name, installation)
|
31
|
-
connection = get_connection
|
32
37
|
response = connection.post do |req|
|
33
38
|
req.url "api/#{product_name}/apps/installations.json"
|
34
39
|
req.headers[:content_type] = 'application/json'
|
@@ -38,7 +43,6 @@ module ZendeskAppsTools
|
|
38
43
|
end
|
39
44
|
|
40
45
|
def upload(path)
|
41
|
-
connection = get_connection :multipart
|
42
46
|
zipfile_path = options[:zipfile]
|
43
47
|
|
44
48
|
if zipfile_path
|
@@ -48,9 +52,11 @@ module ZendeskAppsTools
|
|
48
52
|
package_path = Dir[File.join path, '/tmp/*.zip'].sort.last
|
49
53
|
end
|
50
54
|
|
51
|
-
payload = {
|
55
|
+
payload = {
|
56
|
+
uploaded_data: Faraday::UploadIO.new(package_path, 'application/zip')
|
57
|
+
}
|
52
58
|
|
53
|
-
response = connection.post('/api/v2/apps/uploads.json', payload)
|
59
|
+
response = connection(:multipart).post('/api/v2/apps/uploads.json', payload)
|
54
60
|
json_or_die(response.body)['id']
|
55
61
|
|
56
62
|
rescue Faraday::Error::ClientError => e
|
@@ -59,25 +65,32 @@ module ZendeskAppsTools
|
|
59
65
|
|
60
66
|
def find_app_id
|
61
67
|
say_status 'Update', 'app ID is missing, searching...'
|
62
|
-
|
68
|
+
app_name = get_value_from_stdin('Enter the name of the app:')
|
69
|
+
|
70
|
+
all_apps_json = connection.get('/api/apps.json').body
|
63
71
|
|
64
|
-
|
72
|
+
app =
|
73
|
+
unless all_apps_json.empty?
|
74
|
+
json_or_die(all_apps_json)['apps'].find { |app| app['name'] == app_name }
|
75
|
+
end
|
65
76
|
|
66
|
-
|
77
|
+
unless app
|
78
|
+
say_error_and_exit(
|
79
|
+
"App not found. " \
|
80
|
+
"Please verify that your credentials, subdomain, and app name are correct."
|
81
|
+
)
|
82
|
+
end
|
67
83
|
|
68
|
-
|
69
|
-
|
70
|
-
app_id = app_json['id']
|
84
|
+
cache.save 'app_id' => app['id']
|
85
|
+
app['id']
|
71
86
|
|
72
|
-
cache.save 'app_id' => app_id
|
73
|
-
app_id
|
74
87
|
rescue Faraday::Error::ClientError => e
|
75
88
|
say_error_and_exit e.message
|
76
89
|
end
|
77
90
|
|
78
91
|
def check_status(response, poll_job = true)
|
79
|
-
|
80
|
-
|
92
|
+
job_response = json_or_die(response.body)
|
93
|
+
|
81
94
|
say_error_and_exit job_response['error'] if job_response['error']
|
82
95
|
|
83
96
|
if poll_job
|
@@ -87,22 +100,21 @@ module ZendeskAppsTools
|
|
87
100
|
end
|
88
101
|
|
89
102
|
def check_job(job_id)
|
90
|
-
|
103
|
+
http_client = connection
|
91
104
|
|
92
105
|
loop do
|
93
|
-
response =
|
106
|
+
response = http_client.get("/api/v2/apps/job_statuses/#{job_id}")
|
94
107
|
info = json_or_die(response.body)
|
95
108
|
status = info['status']
|
96
|
-
message = info['message']
|
97
|
-
app_id = info['app_id']
|
98
109
|
|
99
110
|
if %w(completed failed).include? status
|
100
111
|
case status
|
101
112
|
when 'completed'
|
113
|
+
app_id = info['app_id']
|
102
114
|
cache.save 'app_id' => app_id if app_id
|
103
115
|
say_status @command, 'OK'
|
104
116
|
when 'failed'
|
105
|
-
say_status @command, message, :red
|
117
|
+
say_status @command, info['message'], :red
|
106
118
|
exit 1
|
107
119
|
end
|
108
120
|
break
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk_apps_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.12.
|
4
|
+
version: 2.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James A. Rosen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-
|
14
|
+
date: 2018-12-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: thor
|
@@ -321,18 +321,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
321
321
|
version: 1.3.6
|
322
322
|
requirements: []
|
323
323
|
rubyforge_project:
|
324
|
-
rubygems_version: 2.
|
324
|
+
rubygems_version: 2.6.13
|
325
325
|
signing_key:
|
326
326
|
specification_version: 4
|
327
327
|
summary: Tools to help you develop Zendesk Apps.
|
328
328
|
test_files:
|
329
|
+
- features/clean.feature
|
329
330
|
- features/create.feature
|
330
|
-
- features/
|
331
|
+
- features/fixtures/quote_character_translation.json
|
331
332
|
- features/new.feature
|
332
|
-
- features/
|
333
|
+
- features/package.feature
|
334
|
+
- features/step_definitions/app_steps.rb
|
335
|
+
- features/support/env.rb
|
333
336
|
- features/support/helpers.rb
|
334
337
|
- features/support/webmock.rb
|
335
|
-
- features/
|
336
|
-
- features/step_definitions/app_steps.rb
|
337
|
-
- features/fixtures/quote_character_translation.json
|
338
|
-
- features/package.feature
|
338
|
+
- features/validate.feature
|