zendesk_apps_support 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c35e29cfb59ea49f7c17e2c67e7e87448d082d70
4
- data.tar.gz: 9b9bed066d256daedaaddb4430f8c8e2cf77d2b3
3
+ metadata.gz: e72293eff17b81b124a52b13846a4fa5960d0f09
4
+ data.tar.gz: 4187e6abb5b4d2f8c1d2c923c91e5b18ae3d8029
5
5
  SHA512:
6
- metadata.gz: f77764d71a3a8a65e69a50b8ee708ffc25f110694d28b218bb001d7675a8949f30b2d7896b1b5b394a3d99aa4a0624f84d23c7ac12c632a08b19d22457ac0ed1
7
- data.tar.gz: 61c0cdff51c2ddff19b94d24b37355c5d01ec1c57fcecd379f9e09df716a3280373548e7c76a28b3e9268052f82ff229efa103b8fe9ab0322f6008fd4801f528
6
+ metadata.gz: 0debb87a845b756dd8baa4610d29d06b0cc0aef16b2a8623a1cfc0134c32f45d0b2432d76cf2d7d0439b73107c91ad2be1e436c5cce6d3fd9088b349d4207ad1
7
+ data.tar.gz: 912cd57cc7ce6e5448a0b28124038760ae9d98a700edd0ebfc49f935f4d255128cb4233f1bac6ac656855be291cbeac0989aa3883d8f767cd20bd8fbce684e2d
@@ -94,6 +94,8 @@ en:
94
94
  not_json: "%{file} is not valid JSON. %{errors}"
95
95
  not_json_object: "%{file} is not a JSON object."
96
96
  missing_required_key: 'Missing required key from %{file}: %{missing_key}'
97
+ missing_required_key_for_product: 'Missing required key from %{file} for %{product}: %{missing_key}'
98
+ products_do_not_match_manifest_products: 'Products in manifest (%{manifest_products}) do not match products in translations (%{translation_products}).'
97
99
  stylesheet_error: 'Sass error: %{sass_error}'
98
100
  invalid_type_parameter:
99
101
  one: "%{invalid_types} is an invalid parameter type."
@@ -15,10 +15,10 @@ module ZendeskAppsSupport
15
15
  def call(package)
16
16
  package.files.each_with_object([]) do |file, errors|
17
17
  path_match = TRANSLATIONS_PATH.match(file.relative_path)
18
- if path_match
19
- errors << locale_error(file, path_match[1]) << json_error(file)
20
- errors << required_keys(file) if errors.compact.empty?
21
- end
18
+ next unless path_match
19
+ errors << locale_error(file, path_match[1]) << json_error(file)
20
+ next unless errors.compact.empty?
21
+ errors.push(*validate_marketplace_content(file, package)) if file.relative_path == 'translations/en.json'
22
22
  end.compact
23
23
  end
24
24
 
@@ -48,14 +48,54 @@ module ZendeskAppsSupport
48
48
  ValidationError.new('translation.not_json', file: file.relative_path, errors: e)
49
49
  end
50
50
 
51
- def required_keys(file)
52
- return unless file.relative_path == 'translations/en.json'
51
+ def validate_marketplace_content(file, package)
52
+ errors = []
53
53
  json = JSON.parse(file.read)
54
- return if json.is_a?(Hash) && json['app'].is_a?(Hash) && json['app']['name']
54
+ product_names = Product::PRODUCTS_AVAILABLE.map(&:name)
55
+ present_product_keys = json['app'].is_a?(Hash) ? json['app'].keys & product_names : []
56
+
57
+ if present_product_keys.empty?
58
+ errors << validate_top_level_required_keys(json, package, file.relative_path)
59
+ else
60
+ errors << validate_products_match_manifest_products(present_product_keys, package, file.relative_path)
61
+ errors << validate_products_have_required_keys(json, package, present_product_keys, file.relative_path)
62
+ end
63
+ errors.compact
64
+ end
65
+
66
+ def validate_top_level_required_keys(json, package, file_path)
67
+ missing_keys = get_missing_keys(package, json['app'].keys)
68
+ return if missing_keys.empty?
69
+ ValidationError.new(
70
+ 'translation.missing_required_key',
71
+ file: file_path,
72
+ missing_key: missing_keys.join(', ')
73
+ )
74
+ end
55
75
 
56
- ValidationError.new('translation.missing_required_key',
57
- file: file.relative_path,
58
- missing_key: 'app.name')
76
+ def validate_products_have_required_keys(json, package, products, file_path)
77
+ products.each do |product|
78
+ missing_keys = get_missing_keys(package, json['app'][product].keys)
79
+ next if missing_keys.empty?
80
+ return ValidationError.new(
81
+ 'translation.missing_required_key_for_product',
82
+ file: file_path,
83
+ product: product,
84
+ missing_key: missing_keys.join(', ')
85
+ )
86
+ end
87
+ nil
88
+ end
89
+
90
+ def validate_products_match_manifest_products(products, package, file_path)
91
+ manifest_products = package.manifest.products.map(&:name)
92
+ return if (products - manifest_products).empty?
93
+ ValidationError.new(
94
+ 'translation.products_do_not_match_manifest_products',
95
+ file: file_path,
96
+ translation_products: products.join(', '),
97
+ manifest_products: manifest_products.join(', ')
98
+ )
59
99
  end
60
100
 
61
101
  def validate_translation_format(json)
@@ -71,6 +111,19 @@ module ZendeskAppsSupport
71
111
  end
72
112
  end
73
113
  end
114
+
115
+ def get_missing_keys(package, keys)
116
+ public_app_keys = %w(name short_description installation_instructions long_description)
117
+ mandatory_keys = package.manifest.private? ? ['name'] : public_app_keys
118
+
119
+ # since we support description as well as short_description for backwards compatibility,
120
+ # validate keys as if description == short_description
121
+ keys_to_validate = keys.map do |key|
122
+ key == 'description' ? 'short_description' : key
123
+ end
124
+
125
+ mandatory_keys - keys_to_validate
126
+ end
74
127
  end
75
128
  end
76
129
  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.3.0
4
+ version: 4.4.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-13 00:00:00.000000000 Z
14
+ date: 2017-09-25 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: i18n