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.
@@ -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"
@@ -14,7 +14,7 @@ module ZendeskAppsSupport
14
14
 
15
15
  DEPRECATED = '0.4'.freeze
16
16
  CURRENT = '0.5'.freeze
17
- FUTURE = nil
17
+ FUTURE = '1.0'.freeze
18
18
 
19
19
  TO_BE_SERVED = [ DEPRECATED, CURRENT, FUTURE ].compact.freeze
20
20
  VALID_FOR_UPDATE = [ CURRENT, FUTURE ].compact.freeze
@@ -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 #cccccc;\\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>"},
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.2.0
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-07-12 00:00:00.000000000 Z
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: 2.0.3
210
+ rubygems_version: 1.8.23
179
211
  signing_key:
180
- specification_version: 4
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=