module ZendeskAppsSupport::Validations::Translations
Constants
- TRANSLATIONS_PATH
- VALID_LOCALE
Public Class Methods
call(package)
click to toggle source
# File lib/zendesk_apps_support/validations/translations.rb, line 13 def call(package) package.files.inject([]) do |errors, file| if path_match = TRANSLATIONS_PATH.match(file.relative_path) errors << locale_error(file, path_match[1]) << json_error(file) end errors end.compact end
Private Class Methods
json_error(file)
click to toggle source
# File lib/zendesk_apps_support/validations/translations.rb, line 29 def json_error(file) json = JSON.load(file.read) if json.is_a?(Hash) if json['app'] && json['app']['package'] json['app'].delete('package') begin validate_translation_format(json) return rescue TranslationFormatError => e ValidationError.new('translation.invalid_format', field: e.message) end end else ValidationError.new('translation.not_json_object', file: file.relative_path) end rescue JSON::ParserError => e ValidationError.new('translation.not_json', file: file.relative_path, errors: e) end
locale_error(file, locale)
click to toggle source
# File lib/zendesk_apps_support/validations/translations.rb, line 24 def locale_error(file, locale) return nil if VALID_LOCALE =~ locale ValidationError.new('translation.invalid_locale', file: file.relative_path) end
validate_translation_format(json)
click to toggle source
# File lib/zendesk_apps_support/validations/translations.rb, line 48 def validate_translation_format(json) json.keys.each do |key| fail TranslationFormatError.new("'#{key}': '#{json[key]}'") unless json[key].is_a? Hash if json[key].keys.sort == BuildTranslation::I18N_KEYS && json[key][BuildTranslation::I18N_TITLE_KEY].class == String && json[key][BuildTranslation::I18N_VALUE_KEY].class == String next else validate_translation_format(json[key]) end end end