zendesk_apps_support 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/config/locales/en.yml +11 -0
- data/config/locales/translations/zendesk_apps_support.yml +16 -0
- data/lib/zendesk_apps_support/app_version.rb +1 -1
- data/lib/zendesk_apps_support/package.rb +2 -1
- data/lib/zendesk_apps_support/validations/manifest.rb +29 -0
- data/spec/package_spec.rb +2 -2
- data/spec/validations/manifest_spec.rb +20 -0
- metadata +37 -5
- checksums.yaml +0 -15
data/config/locales/en.yml
CHANGED
@@ -15,6 +15,10 @@ en:
|
|
15
15
|
missing:
|
16
16
|
one: ! 'Missing required field in manifest: %{missing_keys}'
|
17
17
|
other: ! 'Missing required fields in manifest: %{missing_keys}'
|
18
|
+
oauth_keys:
|
19
|
+
missing:
|
20
|
+
one: ! 'Missing required oauth field in manifest: %{missing_keys}'
|
21
|
+
other: ! 'Missing required oauth fields in manifest: %{missing_keys}'
|
18
22
|
missing_source: Could not find app.js
|
19
23
|
style_in_template: <style> tag in %{template}. Use an app.css file instead.
|
20
24
|
invalid_default_locale: ! '%{defaultLocale} is not a valid default locale.
|
@@ -27,6 +31,8 @@ en:
|
|
27
31
|
invalid_hidden_parameter:
|
28
32
|
one: ! '%{invalid_params} is set to hidden and cannot be required.'
|
29
33
|
other: ! '%{invalid_params} are set to hidden and cannot be required.'
|
34
|
+
invalid_version: ! '%{target_version} is not a valid framework version.
|
35
|
+
Available versions are: %{available_versions}.'
|
30
36
|
parameters_not_an_array: App parameters must be an array.
|
31
37
|
duplicate_parameters: ! 'Duplicate app parameters defined: %{duplicate_parameters}'
|
32
38
|
translation:
|
@@ -38,3 +44,8 @@ en:
|
|
38
44
|
invalid_type_parameter:
|
39
45
|
one: ! '%{invalid_types} is an invalid parameter type.'
|
40
46
|
other: ! '%{invalid_types} are invalid parameter types.'
|
47
|
+
warning:
|
48
|
+
app_build:
|
49
|
+
deprecated_version: You are targeting a deprecated version of the framework,
|
50
|
+
your App will still work but might break as soon as the new framework
|
51
|
+
version is deployed.
|
@@ -31,6 +31,14 @@ parts:
|
|
31
31
|
key: "txt.apps.admin.error.app_build.manifest_keys.missing.other"
|
32
32
|
title: "App builder job: missing manifest fields error"
|
33
33
|
value: "Missing required fields in manifest: %{missing_keys}"
|
34
|
+
- translation:
|
35
|
+
key: "txt.apps.admin.error.app_build.oauth_keys.missing.one"
|
36
|
+
title: "App builder job: missing oauth fields error"
|
37
|
+
value: "Missing required oauth field in manifest: %{missing_keys}"
|
38
|
+
- translation:
|
39
|
+
key: "txt.apps.admin.error.app_build.oauth_keys.missing.other"
|
40
|
+
title: "App builder job: missing oauth fields error"
|
41
|
+
value: "Missing required oauth fields in manifest: %{missing_keys}"
|
34
42
|
- translation:
|
35
43
|
key: "txt.apps.admin.error.app_build.missing_source"
|
36
44
|
title: "App builder job: missing app.js error"
|
@@ -63,6 +71,14 @@ parts:
|
|
63
71
|
key: "txt.apps.admin.error.app_build.invalid_hidden_parameter.other"
|
64
72
|
title: "App builder job: hidden parameters set to required"
|
65
73
|
value: "%{invalid_params} are set to hidden and cannot be required."
|
74
|
+
- translation:
|
75
|
+
key: "txt.apps.admin.warning.app_build.deprecated_version"
|
76
|
+
title: "App builder job: deprecated version specified"
|
77
|
+
value: 'You are targeting a deprecated version of the framework, your App will still work but might break as soon as the new framework version is deployed.'
|
78
|
+
- translation:
|
79
|
+
key: "txt.apps.admin.error.app_build.invalid_version"
|
80
|
+
title: "App builder job: invalid framework version"
|
81
|
+
value: "%{target_version} is not a valid framework version. Available versions are: %{available_versions}."
|
66
82
|
- translation:
|
67
83
|
key: "txt.apps.admin.error.app_build.parameters_not_an_array"
|
68
84
|
title: "App builder job: app parameters must be an array"
|
@@ -8,10 +8,11 @@ module ZendeskAppsSupport
|
|
8
8
|
DEFAULT_SCSS = File.read(File.expand_path('../default_styles.scss', __FILE__))
|
9
9
|
SRC_TEMPLATE = Erubis::Eruby.new( File.read(File.expand_path('../src.js.erb', __FILE__)) )
|
10
10
|
|
11
|
-
attr_reader :root
|
11
|
+
attr_reader :root, :warnings
|
12
12
|
|
13
13
|
def initialize(dir)
|
14
14
|
@root = Pathname.new(File.expand_path(dir))
|
15
|
+
@warnings = []
|
15
16
|
end
|
16
17
|
|
17
18
|
def validate
|
@@ -5,6 +5,7 @@ module ZendeskAppsSupport
|
|
5
5
|
module Manifest
|
6
6
|
|
7
7
|
REQUIRED_MANIFEST_FIELDS = %w( author defaultLocale location frameworkVersion).freeze
|
8
|
+
OAUTH_REQUIRED_FIELDS = %w( client_id client_secret authorize_uri access_token_uri ).freeze
|
8
9
|
LOCATIONS_AVAILABLE = %w( nav_bar ticket_sidebar new_ticket_sidebar user_sidebar ).freeze
|
9
10
|
TYPES_AVAILABLE = %W(text password checkbox url number multiline hidden).freeze
|
10
11
|
|
@@ -20,6 +21,8 @@ module ZendeskAppsSupport
|
|
20
21
|
errors << missing_keys_error(manifest)
|
21
22
|
errors << default_locale_error(manifest, package)
|
22
23
|
errors << invalid_location_error(manifest)
|
24
|
+
errors << invalid_version_error(manifest, package)
|
25
|
+
errors << oauth_error(manifest)
|
23
26
|
errors << parameters_error(manifest)
|
24
27
|
errors << invalid_hidden_parameter_error(manifest)
|
25
28
|
errors << invalid_type_error(manifest)
|
@@ -31,6 +34,19 @@ module ZendeskAppsSupport
|
|
31
34
|
|
32
35
|
private
|
33
36
|
|
37
|
+
def oauth_error(manifest)
|
38
|
+
return unless manifest['oauth']
|
39
|
+
|
40
|
+
missing = OAUTH_REQUIRED_FIELDS.select do |key|
|
41
|
+
manifest['oauth'][key].nil? || manifest['oauth'][key].empty?
|
42
|
+
end
|
43
|
+
|
44
|
+
if missing.any?
|
45
|
+
ValidationError.new('oauth_keys.missing', :missing_keys => missing.join(', '), :count => missing.length)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
34
50
|
def parameters_error(manifest)
|
35
51
|
return unless manifest['parameters']
|
36
52
|
|
@@ -73,6 +89,19 @@ module ZendeskAppsSupport
|
|
73
89
|
end
|
74
90
|
end
|
75
91
|
|
92
|
+
def invalid_version_error(manifest, package)
|
93
|
+
valid_to_serve = AppVersion::TO_BE_SERVED
|
94
|
+
target_version = manifest['frameworkVersion']
|
95
|
+
|
96
|
+
if target_version == AppVersion::DEPRECATED
|
97
|
+
package.warnings << I18n.t('txt.apps.admin.warning.app_build.deprecated_version')
|
98
|
+
end
|
99
|
+
|
100
|
+
unless valid_to_serve.include?(target_version)
|
101
|
+
return ValidationError.new(:invalid_version, :target_version => target_version, :available_versions => valid_to_serve.join(', '))
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
76
105
|
def invalid_hidden_parameter_error(manifest)
|
77
106
|
invalid_params = []
|
78
107
|
|
data/spec/package_spec.rb
CHANGED
@@ -68,7 +68,7 @@ describe ZendeskAppsSupport::Package do
|
|
68
68
|
email: "john@example.com"
|
69
69
|
},
|
70
70
|
translations: {"app":{\"name\":\"Buddha Machine\"}},
|
71
|
-
templates: {"layout":"<style>\\n.app-0 header {\\n border-bottom: 1px dotted #
|
71
|
+
templates: {"layout":"<style>\\n.app-0 header {\\n border-bottom: 1px dotted #CCC;\\n margin-bottom: 12px; }\\n .app-0 header h3 {\\n line-height: 30px; }\\n .app-0 header hr {\\n margin-top: 0; }\\n .app-0 header .logo {\\n background: transparent url(\\"http://localhost:4567/logo-small.png\\") no-repeat;\\n background-size: 25px 25px;\\n float: right;\\n height: 25px;\\n width: 25px; }\\n .app-0 header .app-warning-icon {\\n cursor: pointer;\\n float: right;\\n margin-left: 2px;\\n padding: 5px; }\\n.app-0 h3 {\\n font-size: 14px; }\\n.app-0 footer {\\n background: none;\\n border: 0; }\\n.app-0 h1 {\\n color: red; }\\n .app-0 h1 span {\\n color: green; }\\n</style>\\n<header>\\n <span class=\\"logo\\"/>\\n <h3>{{setting \\"name\\"}}</h3>\\n</header>\\n<section data-main/>\\n<footer>\\n <a href=\\"mailto:{{author.email}}\\">\\n {{author.name}}\\n </a>\\n</footer>\\n</div>"},
|
72
72
|
frameworkVersion: "0.5"
|
73
73
|
});
|
74
74
|
|
@@ -81,4 +81,4 @@ HERE
|
|
81
81
|
js.should == expected
|
82
82
|
end
|
83
83
|
end
|
84
|
-
end
|
84
|
+
end
|
@@ -65,6 +65,16 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
65
65
|
locations_error.should_not be_nil
|
66
66
|
end
|
67
67
|
|
68
|
+
it 'should have an error when the version is not supported' do
|
69
|
+
manifest = { 'frameworkVersion' => '0.7' }
|
70
|
+
manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
|
71
|
+
package = mock('Package', :files => [manifest_file])
|
72
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(package)
|
73
|
+
|
74
|
+
version_error = errors.find { |e| e.to_s =~ /not a valid framework version/ }
|
75
|
+
version_error.should_not be_nil
|
76
|
+
end
|
77
|
+
|
68
78
|
it 'should have an error when a hidden parameter is set to required' do
|
69
79
|
manifest = {
|
70
80
|
'parameters' => [
|
@@ -90,11 +100,21 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
90
100
|
errors.first().to_s.should =~ /^manifest is not proper JSON/
|
91
101
|
end
|
92
102
|
|
103
|
+
it "should have an error when required oauth fields are missing" do
|
104
|
+
oauth_hash = {
|
105
|
+
"oauth" => {}
|
106
|
+
}
|
107
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params.merge(oauth_hash)))
|
108
|
+
oauth_error = errors.find { |e| e.to_s =~ /oauth field/ }
|
109
|
+
oauth_error.to_s.should == "Missing required oauth fields in manifest: client_id, client_secret, authorize_uri, access_token_uri"
|
110
|
+
end
|
111
|
+
|
93
112
|
context 'with invalid parameters' do
|
94
113
|
|
95
114
|
before do
|
96
115
|
ZendeskAppsSupport::Validations::Manifest.stub(:default_locale_error)
|
97
116
|
ZendeskAppsSupport::Validations::Manifest.stub(:invalid_location_error)
|
117
|
+
ZendeskAppsSupport::Validations::Manifest.stub(:invalid_version_error)
|
98
118
|
end
|
99
119
|
|
100
120
|
it 'has an error when the app parameters are not an array' do
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk_apps_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- James A. Rosen
|
@@ -10,11 +11,12 @@ authors:
|
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date: 2013-
|
14
|
+
date: 2013-08-14 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: i18n
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
18
20
|
requirements:
|
19
21
|
- - ! '>='
|
20
22
|
- !ruby/object:Gem::Version
|
@@ -22,6 +24,7 @@ dependencies:
|
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
25
28
|
requirements:
|
26
29
|
- - ! '>='
|
27
30
|
- !ruby/object:Gem::Version
|
@@ -29,6 +32,7 @@ dependencies:
|
|
29
32
|
- !ruby/object:Gem::Dependency
|
30
33
|
name: multi_json
|
31
34
|
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
32
36
|
requirements:
|
33
37
|
- - ! '>='
|
34
38
|
- !ruby/object:Gem::Version
|
@@ -36,6 +40,7 @@ dependencies:
|
|
36
40
|
type: :runtime
|
37
41
|
prerelease: false
|
38
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
39
44
|
requirements:
|
40
45
|
- - ! '>='
|
41
46
|
- !ruby/object:Gem::Version
|
@@ -43,6 +48,7 @@ dependencies:
|
|
43
48
|
- !ruby/object:Gem::Dependency
|
44
49
|
name: sass
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
46
52
|
requirements:
|
47
53
|
- - ! '>='
|
48
54
|
- !ruby/object:Gem::Version
|
@@ -50,6 +56,7 @@ dependencies:
|
|
50
56
|
type: :runtime
|
51
57
|
prerelease: false
|
52
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
53
60
|
requirements:
|
54
61
|
- - ! '>='
|
55
62
|
- !ruby/object:Gem::Version
|
@@ -57,6 +64,7 @@ dependencies:
|
|
57
64
|
- !ruby/object:Gem::Dependency
|
58
65
|
name: json
|
59
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
60
68
|
requirements:
|
61
69
|
- - ~>
|
62
70
|
- !ruby/object:Gem::Version
|
@@ -64,6 +72,7 @@ dependencies:
|
|
64
72
|
type: :runtime
|
65
73
|
prerelease: false
|
66
74
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
67
76
|
requirements:
|
68
77
|
- - ~>
|
69
78
|
- !ruby/object:Gem::Version
|
@@ -71,6 +80,7 @@ dependencies:
|
|
71
80
|
- !ruby/object:Gem::Dependency
|
72
81
|
name: erubis
|
73
82
|
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
74
84
|
requirements:
|
75
85
|
- - ! '>='
|
76
86
|
- !ruby/object:Gem::Version
|
@@ -78,6 +88,7 @@ dependencies:
|
|
78
88
|
type: :runtime
|
79
89
|
prerelease: false
|
80
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
81
92
|
requirements:
|
82
93
|
- - ! '>='
|
83
94
|
- !ruby/object:Gem::Version
|
@@ -85,6 +96,7 @@ dependencies:
|
|
85
96
|
- !ruby/object:Gem::Dependency
|
86
97
|
name: jshintrb
|
87
98
|
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
88
100
|
requirements:
|
89
101
|
- - '='
|
90
102
|
- !ruby/object:Gem::Version
|
@@ -92,6 +104,7 @@ dependencies:
|
|
92
104
|
type: :runtime
|
93
105
|
prerelease: false
|
94
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
95
108
|
requirements:
|
96
109
|
- - '='
|
97
110
|
- !ruby/object:Gem::Version
|
@@ -99,6 +112,7 @@ dependencies:
|
|
99
112
|
- !ruby/object:Gem::Dependency
|
100
113
|
name: rspec
|
101
114
|
requirement: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
102
116
|
requirements:
|
103
117
|
- - ! '>='
|
104
118
|
- !ruby/object:Gem::Version
|
@@ -106,10 +120,27 @@ dependencies:
|
|
106
120
|
type: :development
|
107
121
|
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
109
124
|
requirements:
|
110
125
|
- - ! '>='
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: bump
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ~>
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.4.0
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ~>
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: 0.4.0
|
113
144
|
description: Support to help you develop Zendesk Apps.
|
114
145
|
email:
|
115
146
|
- dev@zendesk.com
|
@@ -158,26 +189,27 @@ files:
|
|
158
189
|
homepage: http://github.com/zendesk/zendesk_apps_support
|
159
190
|
licenses:
|
160
191
|
- Apache License Version 2.0
|
161
|
-
metadata: {}
|
162
192
|
post_install_message:
|
163
193
|
rdoc_options: []
|
164
194
|
require_paths:
|
165
195
|
- lib
|
166
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
167
198
|
requirements:
|
168
199
|
- - ! '>='
|
169
200
|
- !ruby/object:Gem::Version
|
170
201
|
version: '0'
|
171
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
172
204
|
requirements:
|
173
205
|
- - ! '>='
|
174
206
|
- !ruby/object:Gem::Version
|
175
207
|
version: 1.3.6
|
176
208
|
requirements: []
|
177
209
|
rubyforge_project:
|
178
|
-
rubygems_version:
|
210
|
+
rubygems_version: 1.8.23
|
179
211
|
signing_key:
|
180
|
-
specification_version:
|
212
|
+
specification_version: 3
|
181
213
|
summary: Support to help you develop Zendesk Apps.
|
182
214
|
test_files:
|
183
215
|
- spec/app/app.css
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
MGU4ZDQ2YzkxOWEzNmM2NjJjNDNiZmYzODZjOTdhNmM5MGE3YjA4ZQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OGU3MTU0YmJhNDQzODEzMWZhODA0ZmU2YWYxOWYwZWM0OGQ3ZTBkYw==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZWNlZWNjZDg3NzNlNDIxNjc5OWRhZWFlMzBkMWQ3OTUyOGM1MWZlOTYyNjJl
|
10
|
-
NWQ3MjQ5ODJiYzFiNzRmOWZiOTE3ZGY4N2Y1OTZhY2U2ZjdiMzJjYTk1MTky
|
11
|
-
YjEwNGJjYmNkOTk0NzJlN2ViZTRmMjJjMWVlNzIyNTY0NWMxZjI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MGQ0Njk5YmIxMTMzYmU3YTdiYzNkN2VmMTMyNmIzOWU4NjEyZDk2ZGY2NWVm
|
14
|
-
MzFhZTUzNmMyMGM1NjAwMWEyZTg1MGM5NzNkMTVjMDA4MWE0YTI4NjEyZjQx
|
15
|
-
Zjg5ZjE1ZmZkMzcwYTE4MDJkNjFhYmZjYWNmY2QwODkwMzFhZDY=
|