You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.0 KiB

local _, addonTable = ...
local Validation = {
metaKeys = {
-- Why is this stored in the item database!? IDK, but we can't change it easily now without proper schema migrations
["collapsedGroup"] = true,
["collapsed"] = true,
["name"] = true,
},
}
-- Upvalues
local L = LibStub("AceLocale-3.0"):GetLocale("Rarity")
local CONSTANTS = addonTable.constants
local pairs = pairs
function Validation:ValidateItemDB()
Rarity:Print(L["Validating item database... this shouldn't take long!"]) -- It better be true :P
local numErrors = 0
local numInvalidItemsAndToys = self:ValidateItemsAndToys() -- Yeah, they aren't separated... I guess toys didn't exist originally and were just regular items
local numInvalidPets = self:ValidatePets()
local numInvalidMounts = self:ValidateMounts()
local numInvalidCustomItems = self:ValidateCustomItems()
numErrors = numErrors + numInvalidItemsAndToys + numInvalidPets + numInvalidMounts + numInvalidCustomItems
if numErrors == 0 then
Rarity:Print(L["We didn't find any errors in your database. Yay!"])
else
Rarity:Print(format(L["We found %d invalid items in your database!"], numErrors))
Rarity:Debug(format("Items/Toys: %d errors", numInvalidItemsAndToys))
Rarity:Debug(format("Pets: %d errors", numInvalidPets))
Rarity:Debug(format("Mounts: %d errors", numInvalidMounts))
Rarity:Debug(format("Custom: %d errors", numInvalidCustomItems))
end
end
function Validation:ValidateItemsAndToys()
Rarity:Debug("Validating items and toys")
return self:ValidateGroup(Rarity.db.profile.groups.items)
end
function Validation:ValidatePets()
Rarity:Debug("Validating pets")
return self:ValidateGroup(Rarity.db.profile.groups.pets)
end
function Validation:ValidateMounts()
Rarity:Debug("Validating mounts")
return self:ValidateGroup(Rarity.db.profile.groups.mounts)
end
function Validation:ValidateCustomItems()
Rarity:Debug("Validating custom items")
return self:ValidateGroup(Rarity.db.profile.groups.user)
end
function Validation:ValidateGroup(group)
local numErrors = 0
for key, entry in pairs(group) do
if not self:IsMetaKey(key) then
local isValid = self:IsValidItem(entry)
if not isValid then
Rarity:Print(format(L["Validation failed for item: %s"], key))
numErrors = numErrors + 1
end
end
end
return numErrors
end
function Validation:IsMetaKey(key)
return self.metaKeys[key] == true
end
function Validation:IsValidItem(entry)
local isValidItem = Rarity.DatabaseSchema:IsValidItem(entry)
local isPet = (entry.type == CONSTANTS.ITEM_TYPES.PET)
local isMount = (entry.type == CONSTANTS.ITEM_TYPES.MOUNT)
if isPet and not self:IsValidPet(entry) then
return false
end
if isMount and not self:IsValidMount(entry) then
return false
end
return isValidItem
end
function Validation:IsValidPet(entry)
return Rarity.DatabaseSchema:IsValidPet(entry)
end
function Validation:IsValidMount(entry)
return Rarity.DatabaseSchema:IsValidMount(entry)
end
Rarity.Validation = Validation
return Validation