diff options
author | Tulio Leao <tupaschoal@gmail.com> | 2020-06-06 00:23:59 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-06 00:23:59 -0300 |
commit | ff1145ddec30f378b837f597ea9923a8ef3b0d86 (patch) | |
tree | c4f02e8ee12ddabf5eb3bfa448b610778da7f267 | |
parent | e63a7fd45226d2dc9c316c12de474ea4b69044f6 (diff) |
Make sure linting disallow unsupported json keys (#526)
* Make sure linting disallow unsupported json keys
Co-authored-by: Jordan <Nightfirecat@users.noreply.github.com>
-rw-r--r-- | _data/sites.json | 7 | ||||
-rwxr-xr-x | script/validate_json.rb | 34 |
2 files changed, 37 insertions, 4 deletions
diff --git a/_data/sites.json b/_data/sites.json index 618f6250..e45ae3c7 100644 --- a/_data/sites.json +++ b/_data/sites.json @@ -3910,7 +3910,7 @@ "url": "https://itch.io/support", "difficulty": "hard", "notes": "You need to contact support via email to get your account deleted.", - "email:": "support@itch.io", + "email": "support@itch.io", "domains": [ "itch.io" ] @@ -7075,13 +7075,12 @@ "notes_fr": "Votre compte utilisateur sera supprimé après 7 jours si vous n’annulez pas l’opération à l’avance. Le contenu créé, comme les publications de forum, n’est pas supprimé, mais votre nom d’utilisateur est anonymisé et protégé contre la réinscription pendant 363 jours.", "notes_ar": "سيتم حذف حساب المستخدم الخاص بك بعد 7 أيام إذا لم تقم بإلغاء العملية مسبقًا. لا يتم حذف المحتوى الذي تم إنشاؤه، مثل منشورات المنتدى، ولكن اسم المستخدم الخاص بك مجهول الهوية ومحمي من إعادة التسجيل لمدة 363 يومًا.", "notes_fa": "اگر عملیات را از قبل لغو نکنید ، حساب کاربری شما پس از 7 روز حذف خواهد شد. محتوا ایجاد شده ، مانند ارسال های انجمن ، حذف نمی شود ، اما نام کاربری شما ناشناس است و از ثبت مجدد برای ۳۶۳ روز محافظت می شود.", - "notes_cn": "ا如果您未提前取消操作,您的使用者帳戶將在 7 天后刪除。創建的內容(如論壇帖子)不會被刪除,但您的使用者名是匿名的,並且不會重新註冊 363 天。", - "notes_jp": "操作を事前にキャンセルしない場合、7日後にユーザーアカウントが削除されます。フォーラムの投稿など、作成されたコンテンツは削除されませんが、ユーザー名は匿名化され、363 日間の再登録から保護されます。", + "notes_zh-cn": "ا如果您未提前取消操作,您的使用者帳戶將在 7 天后刪除。創建的內容(如論壇帖子)不會被刪除,但您的使用者名是匿名的,並且不會重新註冊 363 天。", "notes_gr": "Ο λογαριασμός χρήστη σας θα διαγραφεί μετά από 7 ημέρες, εάν δεν ακυρώσετε την εργασία εκ των προτέρων. Το περιεχόμενο που δημιουργείται, όπως οι δημοσιεύσεις του φόρουμ, δεν διαγράφεται, αλλά το όνομα χρήστη σας είναι ανώνυμο και προστατεύεται από την εκ νέου εγγραφή για 363 ημέρες.", "notes_ru": "Ваша учетная запись будет удалена через 7 дней, если вы не отмените операцию заранее. Созданный контент (например, публикации на форуме) не удаляется, но имя пользователя обезличивается и блокируется для повторной регистрации на 363 дня.", "notes_pl": "Twoje konto użytkownika zostanie usunięte po 7 dniach, jeśli wcześniej nie anulujesz procesu. Utworzona treść, taka jak posty na forum, nie zostanie usunięta, ale nazwa użytkownika będzie anonimowa i chroniona przed ponowną rejestracją przez 363 dni.", "notes_es": "Su cuenta de usuario se eliminará después de 7 días si no cancela el proceso de antemano. El contenido creado, como las publicaciones en el foro, no se eliminará, pero su nombre de usuario será anónimo y protegido contra el nuevo registro durante 363 días.", - "notes_pt": "Sua conta de usuário será excluída após 7 dias se você não cancelar o processo com antecedência. O conteúdo criado, como postagens em fóruns, não será excluído, mas seu nome de usuário será anonimizado e protegido de novo registro por 363 dias.", + "notes_pt_br": "Sua conta de usuário será excluída após 7 dias se você não cancelar o processo com antecedência. O conteúdo criado, como postagens em fóruns, não será excluído, mas seu nome de usuário será anonimizado e protegido de novo registro por 363 dias.", "notes_tr": "İşlemi önceden iptal etmezseniz, kullanıcı hesabınız 7 gün sonra silinir. Forum gönderileri gibi oluşturulan içerik silinmez, ancak kullanıcı adınız anonimleştirilmiştir ve 363 gün boyunca yeniden kaydedilmesine engel lenir.", "domains": [ "softcreatr.com", diff --git a/script/validate_json.rb b/script/validate_json.rb index d4a3c671..c3b4ff45 100755 --- a/script/validate_json.rb +++ b/script/validate_json.rb @@ -16,9 +16,12 @@ module ExitCodes UNEXPECTED_DIFFICULTY = 8 # Unexpected value for 'difficulty' field UNEXPECTED_LANGUAGE = 9 # Unexpected language code for 'url_code' field UNEXPECTED_LANGUAGE_KEY = 10 # Unexpected language key for translation + UNSUPPORTED_FIELD = 11 # Unsupported field for site entry + UNEXPECTED_NOTES = 12 # Unexpected notes key for translation end SupportedDifficulties = ["easy", "medium", "hard", "impossible"] +SupportedEntryKeys = ["difficulty", "domains", "email", "email_body", "email_subject", "meta", "name", "notes", "url"] SupportedLanguageKeys = ["about", "difficulty", "difficulty_easy", "difficulty_hard", "difficulty_impossible", "difficulty_medium", "extension", "extensionguide", "extensionp1", "extensionp2", "extensionp3", "extensionp4", "extensionp5", "extensionp6", "footercredits", "fork", @@ -37,6 +40,23 @@ def get_transformed_name(site_object) return site_object['name'].downcase.sub(/^the\s+/, '') end +def validate_accepted_keys(key) + key.keys.each do |entry_key| + if entry_key.start_with?('url_') || entry_key.start_with?('notes_') + # These have their own validation methods + next + end + + unless SupportedEntryKeys.include?(entry_key) + STDERR.puts "Entry '#{key['name']}' has unsupported field: "\ + "'#{entry_key}'.\n"\ + "Use one of the supported fields:\n"\ + "\t#{SupportedEntryKeys}" + exit ExitCodes::UNSUPPORTED_FIELD + end + end +end + def error_on_missing_field(key, field, exit_code) unless key.key?(field) STDERR.puts "Entry '#{key['name']}' has no '#{field}' field" @@ -67,16 +87,30 @@ def validate_localized_urls(key) end end +def validate_localized_notes(key) + key.keys.each do |entry_key| + if entry_key.start_with?('notes_') && !SupportedLanguages.any? { |lang| entry_key.eql?("notes_#{lang}") } + STDERR.puts "Entry '#{key['name']}' has unrecognized notes code: "\ + "'#{entry_key}'.\n"\ + "Use one of the supported languages:\n"\ + "\t#{SupportedLanguages}" + exit ExitCodes::UNEXPECTED_NOTES + end + end +end + def validate_website_entry(key, i) unless key.key?('name') STDERR.puts "Entry #{i} has no 'name' field" exit ExitCodes::MISSING_NAME end + validate_accepted_keys(key) error_on_missing_field(key, 'url', ExitCodes::MISSING_URL) error_on_missing_field(key, 'difficulty', ExitCodes::MISSING_DIFFICULTY) error_on_missing_field(key, 'domains', ExitCodes::MISSING_DOMAINS) validate_difficulty(key) validate_localized_urls(key) + validate_localized_notes(key) end def add_valid_language_key(keys_in_language_json, key, file) |