annotate libs/LibDataBroker-1.1/LibDataBroker-1.1.lua @ 1:ec3e67868c5c

Added tag 1.2.12.0 for changeset ec731d2fe6ba
author Adam tegen <adam.tegen@gmail.com>
date Tue, 20 May 2014 21:45:48 -0500
parents ec731d2fe6ba
children
rev   line source
adam@0 1
adam@0 2 assert(LibStub, "LibDataBroker-1.1 requires LibStub")
adam@0 3 assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
adam@0 4
adam@0 5 local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
adam@0 6 if not lib then return end
adam@0 7 oldminor = oldminor or 0
adam@0 8
adam@0 9
adam@0 10 lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
adam@0 11 lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}
adam@0 12 local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks
adam@0 13
adam@0 14 if oldminor < 2 then
adam@0 15 lib.domt = {
adam@0 16 __metatable = "access denied",
adam@0 17 __index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,
adam@0 18 }
adam@0 19 end
adam@0 20
adam@0 21 if oldminor < 3 then
adam@0 22 lib.domt.__newindex = function(self, key, value)
adam@0 23 if not attributestorage[self] then attributestorage[self] = {} end
adam@0 24 if attributestorage[self][key] == value then return end
adam@0 25 attributestorage[self][key] = value
adam@0 26 local name = namestorage[self]
adam@0 27 if not name then return end
adam@0 28 callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self)
adam@0 29 callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self)
adam@0 30 callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self)
adam@0 31 callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self)
adam@0 32 end
adam@0 33 end
adam@0 34
adam@0 35 if oldminor < 2 then
adam@0 36 function lib:NewDataObject(name, dataobj)
adam@0 37 if self.proxystorage[name] then return end
adam@0 38
adam@0 39 if dataobj then
adam@0 40 assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table")
adam@0 41 self.attributestorage[dataobj] = {}
adam@0 42 for i,v in pairs(dataobj) do
adam@0 43 self.attributestorage[dataobj][i] = v
adam@0 44 dataobj[i] = nil
adam@0 45 end
adam@0 46 end
adam@0 47 dataobj = setmetatable(dataobj or {}, self.domt)
adam@0 48 self.proxystorage[name], self.namestorage[dataobj] = dataobj, name
adam@0 49 self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj)
adam@0 50 return dataobj
adam@0 51 end
adam@0 52 end
adam@0 53
adam@0 54 if oldminor < 1 then
adam@0 55 function lib:DataObjectIterator()
adam@0 56 return pairs(self.proxystorage)
adam@0 57 end
adam@0 58
adam@0 59 function lib:GetDataObjectByName(dataobjectname)
adam@0 60 return self.proxystorage[dataobjectname]
adam@0 61 end
adam@0 62
adam@0 63 function lib:GetNameByDataObject(dataobject)
adam@0 64 return self.namestorage[dataobject]
adam@0 65 end
adam@0 66 end
adam@0 67
adam@0 68 if oldminor < 4 then
adam@0 69 local next = pairs(attributestorage)
adam@0 70 function lib:pairs(dataobject_or_name)
adam@0 71 local t = type(dataobject_or_name)
adam@0 72 assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
adam@0 73
adam@0 74 local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
adam@0 75 assert(attributestorage[dataobj], "Data object not found")
adam@0 76
adam@0 77 return next, attributestorage[dataobj], nil
adam@0 78 end
adam@0 79
adam@0 80 local ipairs_iter = ipairs(attributestorage)
adam@0 81 function lib:ipairs(dataobject_or_name)
adam@0 82 local t = type(dataobject_or_name)
adam@0 83 assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
adam@0 84
adam@0 85 local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
adam@0 86 assert(attributestorage[dataobj], "Data object not found")
adam@0 87
adam@0 88 return ipairs_iter, attributestorage[dataobj], 0
adam@0 89 end
adam@0 90 end