zendesk_apps_tools 1.2.2 → 1.3.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.
- data/app_template/manifest.json.tt +1 -0
- data/features/new.feature +13 -0
- data/features/step_definitions/app_steps.rb +13 -0
- data/lib/zendesk_apps_tools/command.rb +15 -45
- data/lib/zendesk_apps_tools/common.rb +10 -3
- data/lib/zendesk_apps_tools/settings.rb +30 -0
- data/lib/zendesk_apps_tools/translate.rb +5 -5
- metadata +21 -4
data/features/new.feature
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
Feature: create a template for a new zendesk app
|
2
2
|
|
3
|
+
Scenario: Create a new app in an existing directory
|
4
|
+
Given an app directory "tmp/aruba" exists
|
5
|
+
And I move to the app directory
|
6
|
+
When I run "zat new" command with the following details:
|
7
|
+
| author name | John Citizen |
|
8
|
+
| author email | john@example.com |
|
9
|
+
| app name | John Test App |
|
10
|
+
| app dir | |
|
11
|
+
|
12
|
+
Then the app file "manifest.json" is created
|
13
|
+
And I reset the working directory
|
14
|
+
|
3
15
|
Scenario: create a template for a new zendesk app by running 'zat new' command
|
4
16
|
Given an app directory "tmp/aruba" exists
|
5
17
|
When I run "zat new" command with the following details:
|
@@ -19,6 +31,7 @@ Feature: create a template for a new zendesk app
|
|
19
31
|
"defaultLocale": "en",
|
20
32
|
"private": true,
|
21
33
|
"location": "ticket_sidebar",
|
34
|
+
"version": "1.0",
|
22
35
|
"frameworkVersion": "0.5"
|
23
36
|
}
|
24
37
|
"""
|
@@ -1,5 +1,14 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
|
+
When /^I move to the app directory$/ do
|
4
|
+
@previous_dir = Dir.pwd
|
5
|
+
Dir.chdir(@app_dir)
|
6
|
+
end
|
7
|
+
|
8
|
+
When /^I reset the working directory$/ do
|
9
|
+
Dir.chdir(@previous_dir)
|
10
|
+
end
|
11
|
+
|
3
12
|
Given /^an app directory "(.*?)" exists$/ do |app_dir|
|
4
13
|
@app_dir = app_dir
|
5
14
|
FileUtils.rm_rf(@app_dir)
|
@@ -42,6 +51,10 @@ Then /^the app file "(.*?)" is created with:$/ do |file, content|
|
|
42
51
|
File.read(file).chomp.gsub(' ', '').should == content.gsub(' ', '')
|
43
52
|
end
|
44
53
|
|
54
|
+
Then /^the app file "(.*?)" is created$/ do |filename|
|
55
|
+
File.exists?(filename).should be_true
|
56
|
+
end
|
57
|
+
|
45
58
|
Then /^the fixture "(.*?)" is used for "(.*?)"$/ do |fixture, app_file|
|
46
59
|
fixture_file = File.join('features', 'fixtures', fixture)
|
47
60
|
app_file_path = File.join(@app_dir, app_file)
|
@@ -3,6 +3,9 @@ require 'zip/zip'
|
|
3
3
|
require 'pathname'
|
4
4
|
require 'net/http'
|
5
5
|
require 'json'
|
6
|
+
require 'zendesk_apps_tools/translate'
|
7
|
+
require 'zendesk_apps_tools/common'
|
8
|
+
require 'zendesk_apps_tools/settings'
|
6
9
|
|
7
10
|
module ZendeskAppsTools
|
8
11
|
require 'zendesk_apps_support'
|
@@ -13,6 +16,7 @@ module ZendeskAppsTools
|
|
13
16
|
|
14
17
|
include Thor::Actions
|
15
18
|
include ZendeskAppsSupport
|
19
|
+
include ZendeskAppsTools::Common
|
16
20
|
|
17
21
|
source_root File.expand_path(File.join(File.dirname(__FILE__), "../.."))
|
18
22
|
|
@@ -21,17 +25,13 @@ module ZendeskAppsTools
|
|
21
25
|
|
22
26
|
desc "new", "Generate a new app"
|
23
27
|
def new
|
24
|
-
|
25
|
-
@
|
28
|
+
@author_name = get_value_from_stdin("Enter this app author's name:\n", :error_msg => "Invalid name, try again:")
|
29
|
+
@author_email = get_value_from_stdin("Enter this app author's email:\n", :valid_regex => /^.+@.+\..+$/, :error_msg => "Invalid email, try again:")
|
30
|
+
@app_name = get_value_from_stdin("Enter a name for this new app:\n", :error_msg => "Invalid app name, try again:")
|
26
31
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
puts "Enter a name for this new app:"
|
31
|
-
@app_name = get_value_from_stdin(/^\w.*$/, "Invalid app name, try again:")
|
32
|
-
|
33
|
-
puts "Enter a directory name to save the new app (will create the dir if it does not exist, default to current dir):"
|
34
|
-
while @app_dir = $stdin.readline.chomp.strip do
|
32
|
+
prompt = "Enter a directory name to save the new app (will create the dir if it does not exist, default to current dir):\n"
|
33
|
+
opts = { :valid_regex => /^(\w|\/|\\)*$/, :allow_empty => true }
|
34
|
+
while @app_dir = get_value_from_stdin(prompt, opts) do
|
35
35
|
@app_dir = './' and break if @app_dir.empty?
|
36
36
|
if !File.exists?(@app_dir)
|
37
37
|
break
|
@@ -48,8 +48,8 @@ module ZendeskAppsTools
|
|
48
48
|
desc "validate", "Validate your app"
|
49
49
|
method_option :path, :default => './', :required => false
|
50
50
|
def validate
|
51
|
-
|
52
|
-
zendesk = get_value_from_stdin(/^http:\/\/\w+\.\w+|^$/, 'Invalid url, try again:')
|
51
|
+
prompt = "Enter a zendesk URL that you'd like to install the app (for example: 'http://abc.zendesk.com', default to '#{DEFAULT_ZENDESK_URL}'):\n"
|
52
|
+
zendesk = get_value_from_stdin(prompt, :valid_regex => /^http:\/\/\w+\.\w+|^$/, :error_msg => 'Invalid url, try again:')
|
53
53
|
zendesk = DEFAULT_ZENDESK_URL if zendesk.empty?
|
54
54
|
url = URI.parse(zendesk)
|
55
55
|
response = Net::HTTP.start(url.host, url.port) { |http| http.get('/api/v2/apps/framework_versions.json') }
|
@@ -64,6 +64,7 @@ module ZendeskAppsTools
|
|
64
64
|
valid = errors.none?
|
65
65
|
|
66
66
|
if valid
|
67
|
+
app_package.warnings.each { |w| say w.to_s, :yellow }
|
67
68
|
say_status 'validate', 'OK'
|
68
69
|
else
|
69
70
|
errors.each do |e|
|
@@ -117,7 +118,8 @@ module ZendeskAppsTools
|
|
117
118
|
setup_path(options[:path])
|
118
119
|
manifest = app_package.manifest_json
|
119
120
|
|
120
|
-
|
121
|
+
settings_helper = ZendeskAppsTools::Settings.new
|
122
|
+
settings = settings_helper.get_settings_from(self, manifest[:parameters])
|
121
123
|
|
122
124
|
require 'zendesk_apps_tools/server'
|
123
125
|
ZendeskAppsTools::Server.tap do |server|
|
@@ -130,18 +132,6 @@ module ZendeskAppsTools
|
|
130
132
|
|
131
133
|
protected
|
132
134
|
|
133
|
-
def get_value_from_stdin(valid_regex, error_msg)
|
134
|
-
while input = $stdin.readline.chomp.strip do
|
135
|
-
unless input =~ valid_regex
|
136
|
-
puts error_msg
|
137
|
-
else
|
138
|
-
break
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
return input
|
143
|
-
end
|
144
|
-
|
145
135
|
def setup_path(path)
|
146
136
|
@destination_stack << relative_to_original_destination_root(path) unless @destination_stack.last == path
|
147
137
|
end
|
@@ -160,26 +150,6 @@ module ZendeskAppsTools
|
|
160
150
|
@app_package ||= Package.new(self.app_dir.to_s)
|
161
151
|
end
|
162
152
|
|
163
|
-
def settings_for_parameters(parameters)
|
164
|
-
return {} if parameters.nil?
|
165
|
-
|
166
|
-
parameters.inject({}) do |settings, param|
|
167
|
-
if param[:required]
|
168
|
-
puts "Enter a value for required parameter '#{param[:name]}':"
|
169
|
-
input = get_value_from_stdin(/\S+/, 'Invalid, try again:')
|
170
|
-
else
|
171
|
-
puts "Enter a value for optional parameter '#{param[:name]}': (press 'Return' to skip)"
|
172
|
-
input = $stdin.readline.chomp.strip
|
173
|
-
end
|
174
|
-
|
175
|
-
unless input.empty?
|
176
|
-
input = (input =~ /^(true|t|yes|y|1)$/i) ? true : false if param[:type] == 'checkbox'
|
177
|
-
settings[param[:name]] = input
|
178
|
-
end
|
179
|
-
|
180
|
-
settings
|
181
|
-
end
|
182
|
-
end
|
183
153
|
end
|
184
154
|
end
|
185
155
|
|
@@ -7,10 +7,17 @@ module ZendeskAppsTools
|
|
7
7
|
request.get(url)
|
8
8
|
end
|
9
9
|
|
10
|
-
def get_value_from_stdin(prompt,
|
10
|
+
def get_value_from_stdin(prompt, opts = {})
|
11
|
+
options = {
|
12
|
+
:valid_regex => opts[:allow_empty] ? /^\w*$/ : /\S+/,
|
13
|
+
:error_msg => 'Invalid, try again:',
|
14
|
+
:allow_empty => false
|
15
|
+
}.merge(opts)
|
16
|
+
|
11
17
|
while input = ask(prompt)
|
12
|
-
|
13
|
-
|
18
|
+
return "" if input.empty? && options[:allow_empty]
|
19
|
+
unless input =~ options[:valid_regex]
|
20
|
+
say(options[:error_msg], :red)
|
14
21
|
else
|
15
22
|
break
|
16
23
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'zendesk_apps_tools/common'
|
2
|
+
|
3
|
+
module ZendeskAppsTools
|
4
|
+
class Settings
|
5
|
+
|
6
|
+
def get_settings_from(user_input, parameters)
|
7
|
+
return {} if parameters.nil?
|
8
|
+
|
9
|
+
parameters.inject({}) do |settings, param|
|
10
|
+
if param[:default]
|
11
|
+
input = user_input.get_value_from_stdin("Enter a value for parameter '#{param[:name]}' or press 'Return' to use the default value '#{param[:default]}':\n", :allow_empty => true)
|
12
|
+
input = param[:default] if input.empty?
|
13
|
+
elsif param[:required]
|
14
|
+
input = user_input.get_value_from_stdin("Enter a value for required parameter '#{param[:name]}':\n")
|
15
|
+
else
|
16
|
+
input = user_input.get_value_from_stdin("Enter a value for optional parameter '#{param[:name]}' or press 'Return' to skip:\n", :allow_empty => true)
|
17
|
+
end
|
18
|
+
|
19
|
+
unless input.empty?
|
20
|
+
input = (input =~ /^(true|t|yes|y|1)$/i) ? true : false if param[:type] == 'checkbox'
|
21
|
+
settings[param[:name]] = input
|
22
|
+
end
|
23
|
+
|
24
|
+
settings
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -18,19 +18,19 @@ module ZendeskAppsTools
|
|
18
18
|
app_name = manifest['name']
|
19
19
|
|
20
20
|
unless app_name
|
21
|
-
app_name = get_value_from_stdin('What is the name of this app?',
|
21
|
+
app_name = get_value_from_stdin('What is the name of this app?', :error_msg => "Invalid name, try again:")
|
22
22
|
end
|
23
23
|
|
24
|
-
package = get_value_from_stdin('What is the package name for this app?', /^[a-z_]+$/, "Invalid package name, try again:")
|
24
|
+
package = get_value_from_stdin('What is the package name for this app?', :valid_regex => /^[a-z_]+$/, :error_msg => "Invalid package name, try again:")
|
25
25
|
|
26
26
|
write_yaml(app_name, package)
|
27
27
|
end
|
28
28
|
|
29
29
|
desc 'update', 'Update translation files from Zendesk'
|
30
30
|
def update(request_builder = Faraday.new)
|
31
|
-
app_package = get_value_from_stdin("What is the package name for this app? (without app_)", /^[a-z_]+$/, "Invalid package name, try again:")
|
32
|
-
user = get_value_from_stdin("What is your support.zendesk.com username?", /^.+@.+\..+$/, "Invalid email, try again:")
|
33
|
-
token = get_value_from_stdin("What is your support.zendesk.com API token?",
|
31
|
+
app_package = get_value_from_stdin("What is the package name for this app? (without app_)", :valid_regex => /^[a-z_]+$/, :error_msg => "Invalid package name, try again:")
|
32
|
+
user = get_value_from_stdin("What is your support.zendesk.com username?", :valid_regex => /^.+@.+\..+$/, :error_msg => "Invalid email, try again:")
|
33
|
+
token = get_value_from_stdin("What is your support.zendesk.com API token?", :error_msg => "Invalid API token, try again:")
|
34
34
|
|
35
35
|
user = "#{user}/token"
|
36
36
|
key_prefix = "txt.apps.#{app_package}."
|
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: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-
|
15
|
+
date: 2013-09-18 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: thor
|
@@ -85,7 +85,7 @@ dependencies:
|
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: 1.
|
88
|
+
version: 1.4.1
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -93,7 +93,7 @@ dependencies:
|
|
93
93
|
requirements:
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.
|
96
|
+
version: 1.4.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: cucumber
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,6 +142,22 @@ dependencies:
|
|
142
142
|
- - ! '>='
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: bump
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
type: :development
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
none: false
|
157
|
+
requirements:
|
158
|
+
- - ! '>='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
145
161
|
description: Tools to help you develop Zendesk Apps.
|
146
162
|
email:
|
147
163
|
- dev@zendesk.com
|
@@ -155,6 +171,7 @@ files:
|
|
155
171
|
- lib/zendesk_apps_tools/common.rb
|
156
172
|
- lib/zendesk_apps_tools/locale_identifier.rb
|
157
173
|
- lib/zendesk_apps_tools/server.rb
|
174
|
+
- lib/zendesk_apps_tools/settings.rb
|
158
175
|
- lib/zendesk_apps_tools/translate.rb
|
159
176
|
- lib/zendesk_apps_tools.rb
|
160
177
|
- app_template/app.css
|