zendesk_apps_support 4.4.2 → 4.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d2e58ed37d53238a4125173c9b4cc4e401a2364
4
- data.tar.gz: 31120c07af28f6a706c6be119012d8345aa51f74
3
+ metadata.gz: 68ec75f6edd58e546096a0264c27bb17652cdac8
4
+ data.tar.gz: f7941d0e10b8ed005b59e88af3c2c6ac50dbe742
5
5
  SHA512:
6
- metadata.gz: 7d793ec518b66b7e1890f89a04e714987a61a335343c4007246782689eb6abc5b4af258338049f46a331a4400026d0d572761d410eb851b053f2fbb1ef5d9d8d
7
- data.tar.gz: 0b9bb7cc6678f80e2dd19009fe6a314831fa59e73aab6035a1640cd505e29cc672a60a3636e82923ec59600f874c3d4d92a6ee576b25d30fe903eaf468c58a1b
6
+ metadata.gz: 006e9e8e880b349aa33a3fcff1925e3fccbe9b12ff0ee950ecba54a79ba73363652f43fddfe27720263c6d949da4b06af14d9ce7a0120fc4c43623fe571e5d20
7
+ data.tar.gz: 38c4f30c83611fd1e81b13e50df3e5c25027e07348b9dd6352d926cfee0560c156dec281c90e0fd7fbe3ad4fce23c0c9bde28758899ad357ed3c658bd9ffe240
@@ -57,6 +57,8 @@ en:
57
57
  banner:
58
58
  invalid_format: Banner image must be a PNG file.
59
59
  invalid_size: Invalid banner image dimensions. Must be %{required_banner_width}x%{required_banner_height}px.
60
+ dirty_svg: "%{svg} contains invalid markup and was unable to be automatically
61
+ regenerated."
60
62
  oauth_keys:
61
63
  missing:
62
64
  one: 'Missing required oauth field in manifest: %{missing_keys}'
@@ -120,3 +122,5 @@ en:
120
122
  deprecated_version: You are targeting a deprecated version of the framework.
121
123
  Your app will work, but it might break when the new framework version
122
124
  is deployed.
125
+ sanitised_svg: The markup in %{svg} has been edited for use in Zendesk,
126
+ and may not display as intended.
@@ -128,6 +128,10 @@ parts:
128
128
  key: "txt.apps.admin.error.app_build.banner.invalid_size"
129
129
  title: "App builder job: Banner image invalid size error"
130
130
  value: "Invalid banner image dimensions. Must be %{required_banner_width}x%{required_banner_height}px."
131
+ - translation:
132
+ key: "txt.apps.admin.error.app_build.dirty_svg"
133
+ title: "App builder job: invalid SVG markup error"
134
+ value: "%{svg} contains invalid markup and was unable to be automatically regenerated."
131
135
  - translation:
132
136
  key: "txt.apps.admin.error.app_build.oauth_keys.missing.one"
133
137
  title: "App builder job: missing oauth fields error"
@@ -202,6 +206,10 @@ parts:
202
206
  key: "txt.apps.admin.warning.app_build.deprecated_version"
203
207
  title: "App builder job: deprecated version specified"
204
208
  value: 'You are targeting a deprecated version of the framework. Your app will work, but it might break when the new framework version is deployed.'
209
+ - translation:
210
+ key: "txt.apps.admin.warning.app_build.sanitised_svg"
211
+ title: "App builder job: warning that contents of svg have been sanitised and overwritten"
212
+ value: "The markup in %{svg} has been edited for use in Zendesk, and may not display as intended."
205
213
  - translation:
206
214
  key: "txt.apps.admin.error.app_build.invalid_version"
207
215
  title: "App builder job: invalid framework version"
@@ -27,6 +27,7 @@ module ZendeskAppsSupport
27
27
  autoload :Stylesheets, 'zendesk_apps_support/validations/stylesheets'
28
28
  autoload :Requirements, 'zendesk_apps_support/validations/requirements'
29
29
  autoload :Banner, 'zendesk_apps_support/validations/banner'
30
+ autoload :Svg, 'zendesk_apps_support/validations/svg'
30
31
  end
31
32
 
32
33
  class Manifest
@@ -30,6 +30,7 @@ module ZendeskAppsSupport
30
30
  def validate(marketplace: true)
31
31
  [].tap do |errors|
32
32
  errors << Validations::Manifest.call(self)
33
+
33
34
  if has_manifest?
34
35
  errors << Validations::Marketplace.call(self) if marketplace
35
36
  errors << Validations::Source.call(self)
@@ -43,6 +44,7 @@ module ZendeskAppsSupport
43
44
  end
44
45
 
45
46
  errors << Validations::Banner.call(self) if has_banner?
47
+ errors << Validations::Svg.call(self) if has_svgs?
46
48
 
47
49
  errors.flatten!.compact!
48
50
  end
@@ -91,6 +93,10 @@ module ZendeskAppsSupport
91
93
  @lib_files ||= js_files.select { |f| f =~ %r{^lib/} }
92
94
  end
93
95
 
96
+ def svg_files
97
+ @svg_files ||= files.select { |f| f =~ %r{^assets/.*\.svg$} }
98
+ end
99
+
94
100
  def template_files
95
101
  files.select { |f| f =~ %r{^templates/.*\.hdbs$} }
96
102
  end
@@ -181,6 +187,10 @@ module ZendeskAppsSupport
181
187
  File.file?(path_to(path))
182
188
  end
183
189
 
190
+ def has_svgs?
191
+ svg_files.any?
192
+ end
193
+
184
194
  def has_requirements?
185
195
  has_file?(REQUIREMENTS_FILENAME)
186
196
  end
@@ -7,7 +7,7 @@ module ZendeskAppsSupport
7
7
  BANNER_WIDTH = 830
8
8
  BANNER_HEIGHT = 200
9
9
 
10
- class <<self
10
+ class << self
11
11
  def call(package)
12
12
  File.open(package.path_to('assets/banner.png'), 'rb') do |fh|
13
13
  begin
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+ require 'loofah'
3
+
4
+ module ZendeskAppsSupport
5
+ module Validations
6
+ module Svg
7
+ @strip_declaration = Loofah::Scrubber.new do |node|
8
+ node.remove if node.name == 'xml' && node.children.empty?
9
+ end
10
+
11
+ @empty_malformed_markup = Loofah::Scrubber.new do |node|
12
+ node.next.remove while node.name == 'svg' && node.next
13
+ end
14
+
15
+ # CRUFT: ignore a (very specific) style attribute which Loofah would otherwise scrub.
16
+ # This attribute is deprecated (https://www.w3.org/TR/filter-effects/#AccessBackgroundImage)
17
+ # but is included in many of the test apps used in fixtures for tests in ZAM, ZAT etc.
18
+ @remove_enable_background = Loofah::Scrubber.new do |node|
19
+ match_pattern = Regexp.new("enable-background:.*?(\;|\z)")
20
+ if node.name == 'svg' && node['style']
21
+ node['style'] = node['style'].gsub(match_pattern, '')
22
+ node.attributes['style'].remove if node['style'].empty?
23
+ end
24
+ end
25
+
26
+ class << self
27
+ def call(package)
28
+ errors = []
29
+
30
+ package.svg_files.each do |svg|
31
+ markup = Loofah.xml_fragment(svg.read)
32
+ .scrub!(@strip_declaration)
33
+ .scrub!(@remove_enable_background)
34
+ .to_xml.strip
35
+
36
+ clean_markup = Loofah.xml_fragment(markup)
37
+ .scrub!(:prune)
38
+ .scrub!(@empty_malformed_markup)
39
+ .to_xml
40
+
41
+ filepath = svg.relative_path
42
+
43
+ next if clean_markup == markup
44
+ begin
45
+ compressed_clean_markup = clean_markup.tr("\n", '').squeeze(' ').gsub(/\>\s+\</, '><')
46
+ IO.write(filepath, compressed_clean_markup)
47
+ package.warnings << I18n.t('txt.apps.admin.warning.app_build.sanitised_svg', svg: filepath)
48
+ rescue
49
+ errors << ValidationError.new(:dirty_svg, svg: filepath)
50
+ end
51
+ end
52
+ errors
53
+ end
54
+ end
55
+ end
56
+ end
57
+ 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: 4.4.2
4
+ version: 4.5.0
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: 2017-09-25 00:00:00.000000000 Z
14
+ date: 2017-10-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: i18n
@@ -111,6 +111,34 @@ dependencies:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
113
  version: 0.3.0
114
+ - !ruby/object:Gem::Dependency
115
+ name: loofah
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: nokogiri
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: 1.6.8
135
+ type: :runtime
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 1.6.8
114
142
  - !ruby/object:Gem::Dependency
115
143
  name: rspec
116
144
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +195,20 @@ dependencies:
167
195
  - - "~>"
168
196
  - !ruby/object:Gem::Version
169
197
  version: 0.46.0
198
+ - !ruby/object:Gem::Dependency
199
+ name: byebug
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: 9.0.6
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: 9.0.6
170
212
  description: Support to help you develop Zendesk Apps.
171
213
  email:
172
214
  - dev@zendesk.com
@@ -207,6 +249,7 @@ files:
207
249
  - lib/zendesk_apps_support/validations/requirements.rb
208
250
  - lib/zendesk_apps_support/validations/source.rb
209
251
  - lib/zendesk_apps_support/validations/stylesheets.rb
252
+ - lib/zendesk_apps_support/validations/svg.rb
210
253
  - lib/zendesk_apps_support/validations/templates.rb
211
254
  - lib/zendesk_apps_support/validations/translations.rb
212
255
  - lib/zendesk_apps_support/validations/validation_error.rb
@@ -222,7 +265,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
265
  requirements:
223
266
  - - ">="
224
267
  - !ruby/object:Gem::Version
225
- version: '0'
268
+ version: '2.0'
226
269
  required_rubygems_version: !ruby/object:Gem::Requirement
227
270
  requirements:
228
271
  - - ">="