zendesk_apps_support 1.1.3 → 1.1.4
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/config/locales/en.yml +3 -1
- data/config/locales/translations/zendesk_apps_support.yml +8 -0
- data/lib/zendesk_apps_support.rb +1 -0
- data/lib/zendesk_apps_support/package.rb +7 -3
- data/lib/zendesk_apps_support/validations/manifest.rb +9 -3
- data/lib/zendesk_apps_support/validations/stylesheets.rb +32 -0
- data/spec/validations/manifest_spec.rb +29 -16
- data/spec/validations/stylesheets_spec.rb +34 -0
- metadata +5 -2
data/config/locales/en.yml
CHANGED
@@ -27,9 +27,11 @@ en:
|
|
27
27
|
invalid_hidden_parameter:
|
28
28
|
one: ! '%{invalid_params} is set to hidden and cannot be required.'
|
29
29
|
other: ! '%{invalid_params} are set to hidden and cannot be required.'
|
30
|
-
parameters_not_an_array: App
|
30
|
+
parameters_not_an_array: App parameters must be an array.
|
31
|
+
duplicate_parameters: ! 'Duplicate app parameters defined: %{duplicate_parameters}'
|
31
32
|
translation:
|
32
33
|
invalid_locale: ! '%{file} is not a valid locale. Only two- and three-letter
|
33
34
|
ISO 639 language codes are allowed.'
|
34
35
|
not_json: ! '%{file} is not valid JSON. %{errors}'
|
35
36
|
not_json_object: ! '%{file} is not a JSON object.'
|
37
|
+
stylesheet_error: ! 'Sass error: %{sass_error}'
|
@@ -67,6 +67,10 @@ parts:
|
|
67
67
|
key: "txt.apps.admin.error.app_build.parameters_not_an_array"
|
68
68
|
title: "App builder job: app parameters must be an array"
|
69
69
|
value: "App parameters must be an array."
|
70
|
+
- translation:
|
71
|
+
key: "txt.apps.admin.error.app_build.duplicate_parameters"
|
72
|
+
title: "App builder job: duplicate parameters error"
|
73
|
+
value: "Duplicate app parameters defined: %{duplicate_parameters}"
|
70
74
|
- translation:
|
71
75
|
key: "txt.apps.admin.error.app_build.translation.invalid_locale"
|
72
76
|
title: "App builder job: invalid locale file name"
|
@@ -79,3 +83,7 @@ parts:
|
|
79
83
|
key: "txt.apps.admin.error.app_build.translation.not_json_object"
|
80
84
|
title: "App builder job: translation file is not a JSON object"
|
81
85
|
value: "%{file} is not a JSON object."
|
86
|
+
- translation:
|
87
|
+
key: "txt.apps.admin.error.app_build.stylesheet_error"
|
88
|
+
title: "App builder job: invalid stylesheet syntax"
|
89
|
+
value: "Sass error: %{sass_error}"
|
data/lib/zendesk_apps_support.rb
CHANGED
@@ -16,5 +16,6 @@ module ZendeskAppsSupport
|
|
16
16
|
autoload :Templates, 'zendesk_apps_support/validations/templates'
|
17
17
|
autoload :Translations, 'zendesk_apps_support/validations/translations'
|
18
18
|
autoload :JSHintValidationError, 'zendesk_apps_support/validations/validation_error'
|
19
|
+
autoload :Stylesheets, 'zendesk_apps_support/validations/stylesheets'
|
19
20
|
end
|
20
21
|
end
|
@@ -18,7 +18,8 @@ module ZendeskAppsSupport
|
|
18
18
|
Validations::Manifest.call(self) +
|
19
19
|
Validations::Source.call(self) +
|
20
20
|
Validations::Templates.call(self) +
|
21
|
-
Validations::Translations.call(self)
|
21
|
+
Validations::Translations.call(self) +
|
22
|
+
Validations::Stylesheets.call(self)
|
22
23
|
end
|
23
24
|
|
24
25
|
def files
|
@@ -65,11 +66,14 @@ module ZendeskAppsSupport
|
|
65
66
|
)
|
66
67
|
end
|
67
68
|
|
69
|
+
def customer_css
|
70
|
+
css_file = File.join(root, 'app.css')
|
71
|
+
customer_css = File.exist?(css_file) ? File.read(css_file) : ""
|
72
|
+
end
|
73
|
+
|
68
74
|
private
|
69
75
|
|
70
76
|
def compiled_templates(app_id, asset_url_prefix)
|
71
|
-
css_file = File.join(root, "app.css")
|
72
|
-
customer_css = File.exist?(css_file) ? File.read(css_file) : ""
|
73
77
|
compiled_css = ZendeskAppsSupport::StylesheetCompiler.new(DEFAULT_SCSS + customer_css, app_id, asset_url_prefix).compile
|
74
78
|
|
75
79
|
templates = begin
|
@@ -19,7 +19,7 @@ module ZendeskAppsSupport
|
|
19
19
|
errors << missing_keys_error(manifest)
|
20
20
|
errors << default_locale_error(manifest, package)
|
21
21
|
errors << invalid_location_error(manifest)
|
22
|
-
errors <<
|
22
|
+
errors << parameters_error(manifest)
|
23
23
|
errors << invalid_hidden_parameter_error(manifest)
|
24
24
|
errors.compact!
|
25
25
|
end
|
@@ -29,11 +29,17 @@ module ZendeskAppsSupport
|
|
29
29
|
|
30
30
|
private
|
31
31
|
|
32
|
-
def
|
32
|
+
def parameters_error(manifest)
|
33
33
|
return unless manifest['parameters']
|
34
34
|
|
35
35
|
unless manifest['parameters'].kind_of?(Array)
|
36
|
-
ValidationError.new(:parameters_not_an_array)
|
36
|
+
return ValidationError.new(:parameters_not_an_array)
|
37
|
+
end
|
38
|
+
|
39
|
+
para_names = manifest['parameters'].collect{|para| para['name']}
|
40
|
+
duplicate_parameters = para_names.select {|name| para_names.count(name) > 1}.uniq
|
41
|
+
unless duplicate_parameters.empty?
|
42
|
+
return ValidationError.new(:duplicate_parameters, :duplicate_parameters => duplicate_parameters)
|
37
43
|
end
|
38
44
|
end
|
39
45
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'zendesk_apps_support/stylesheet_compiler'
|
2
|
+
|
3
|
+
module ZendeskAppsSupport
|
4
|
+
module Validations
|
5
|
+
module Stylesheets
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def call(package)
|
10
|
+
if css_error = validate_styles(package.customer_css)
|
11
|
+
[css_error]
|
12
|
+
else
|
13
|
+
[]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def validate_styles(css)
|
20
|
+
compiler = ZendeskAppsSupport::StylesheetCompiler.new(css, nil, nil)
|
21
|
+
begin
|
22
|
+
compiler.compile
|
23
|
+
rescue Sass::SyntaxError => e
|
24
|
+
return ValidationError.new(:stylesheet_error, :sass_error => e.message)
|
25
|
+
end
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -12,6 +12,12 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
12
12
|
valid_fields.merge(overrides)
|
13
13
|
end
|
14
14
|
|
15
|
+
def create_package(parameter_hash)
|
16
|
+
params = default_required_params(parameter_hash)
|
17
|
+
manifest = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(params))
|
18
|
+
mock('Package', :files => [manifest])
|
19
|
+
end
|
20
|
+
|
15
21
|
it 'should have an error when manifest.json is missing' do
|
16
22
|
files = [mock('AppFile', :relative_path => 'abc.json')]
|
17
23
|
package = mock('Package', :files => files)
|
@@ -84,7 +90,7 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
84
90
|
errors.first().to_s.should =~ /^manifest is not proper JSON/
|
85
91
|
end
|
86
92
|
|
87
|
-
context 'with invalid
|
93
|
+
context 'with invalid parameters' do
|
88
94
|
|
89
95
|
before do
|
90
96
|
ZendeskAppsSupport::Validations::Manifest.stub(:default_locale_error)
|
@@ -99,12 +105,8 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
99
105
|
}
|
100
106
|
}
|
101
107
|
|
102
|
-
|
103
|
-
|
104
|
-
package = mock('Package', :files => [manifest])
|
105
|
-
|
106
|
-
errors = ZendeskAppsSupport::Validations::Manifest.call(package)
|
107
|
-
errors.map(&:to_s).should == ['App Parameters must be an array.']
|
108
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
|
109
|
+
errors.map(&:to_s).should == ['App parameters must be an array.']
|
108
110
|
end
|
109
111
|
|
110
112
|
it "doesn't have an error with an array of app parameters" do
|
@@ -115,20 +117,31 @@ describe ZendeskAppsSupport::Validations::Manifest do
|
|
115
117
|
}]
|
116
118
|
}
|
117
119
|
|
118
|
-
|
119
|
-
manifest = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(params))
|
120
|
-
package = mock('Package', :files => [manifest])
|
121
|
-
|
122
|
-
errors = ZendeskAppsSupport::Validations::Manifest.call(package)
|
120
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
|
123
121
|
errors.should be_empty
|
124
122
|
end
|
125
123
|
|
126
124
|
it 'behaves when the manifest does not have parameters' do
|
127
|
-
|
128
|
-
package = mock('Package', :files => [manifest])
|
129
|
-
|
130
|
-
errors = ZendeskAppsSupport::Validations::Manifest.call(package)
|
125
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params))
|
131
126
|
errors.should be_empty
|
132
127
|
end
|
128
|
+
|
129
|
+
it 'shows error when duplicate parameters are defined' do
|
130
|
+
parameter_hash = {
|
131
|
+
'parameters' => [
|
132
|
+
{
|
133
|
+
'name' => 'url',
|
134
|
+
'type' => 'string'
|
135
|
+
},
|
136
|
+
{
|
137
|
+
'name' => 'url',
|
138
|
+
'type' => 'string'
|
139
|
+
}
|
140
|
+
]
|
141
|
+
}
|
142
|
+
|
143
|
+
errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
|
144
|
+
errors.map(&:to_s).should == ['Duplicate app parameters defined: ["url"]']
|
145
|
+
end
|
133
146
|
end
|
134
147
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'zendesk_apps_support'
|
2
|
+
|
3
|
+
describe ZendeskAppsSupport::Validations::Stylesheets do
|
4
|
+
it 'does not return errors if there is no custom css' do
|
5
|
+
|
6
|
+
package = stub(:customer_css => "")
|
7
|
+
ZendeskAppsSupport::Validations::Stylesheets.call(package).should be_empty
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not return errors for valid css' do
|
11
|
+
valid_css = <<-CSS
|
12
|
+
.my-class {
|
13
|
+
border: solid 1px black;
|
14
|
+
}
|
15
|
+
CSS
|
16
|
+
package = stub(:customer_css => valid_css)
|
17
|
+
|
18
|
+
errors = ZendeskAppsSupport::Validations::Stylesheets.call(package)
|
19
|
+
errors.should be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns style sheet validation error for invalid css' do
|
23
|
+
invalid_css = <<-CSS
|
24
|
+
.my-class {
|
25
|
+
border: }
|
26
|
+
}
|
27
|
+
CSS
|
28
|
+
package = stub(:customer_css => invalid_css)
|
29
|
+
|
30
|
+
errors = ZendeskAppsSupport::Validations::Stylesheets.call(package)
|
31
|
+
errors.count.should == 1
|
32
|
+
errors.first.to_s.should match /Sass error: Invalid CSS after.*/
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk_apps_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-05-16 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: i18n
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/zendesk_apps_support/stylesheet_compiler.rb
|
144
144
|
- lib/zendesk_apps_support/validations/manifest.rb
|
145
145
|
- lib/zendesk_apps_support/validations/source.rb
|
146
|
+
- lib/zendesk_apps_support/validations/stylesheets.rb
|
146
147
|
- lib/zendesk_apps_support/validations/templates.rb
|
147
148
|
- lib/zendesk_apps_support/validations/translations.rb
|
148
149
|
- lib/zendesk_apps_support/validations/validation_error.rb
|
@@ -165,6 +166,7 @@ files:
|
|
165
166
|
- spec/validations/jshint_error_spec.rb
|
166
167
|
- spec/validations/manifest_spec.rb
|
167
168
|
- spec/validations/source_spec.rb
|
169
|
+
- spec/validations/stylesheets_spec.rb
|
168
170
|
- spec/validations/templates_spec.rb
|
169
171
|
- spec/validations/translations_spec.rb
|
170
172
|
- spec/validations/validation_serialization_spec.rb
|
@@ -208,6 +210,7 @@ test_files:
|
|
208
210
|
- spec/validations/jshint_error_spec.rb
|
209
211
|
- spec/validations/manifest_spec.rb
|
210
212
|
- spec/validations/source_spec.rb
|
213
|
+
- spec/validations/stylesheets_spec.rb
|
211
214
|
- spec/validations/templates_spec.rb
|
212
215
|
- spec/validations/translations_spec.rb
|
213
216
|
- spec/validations/validation_serialization_spec.rb
|