annotate LibStub.lua @ 37:f971130a84bb v1.2 release

Timestamps should now be recorded even if dual spec is not used. Profile options tables should now update immediately when dual spec is enabled. Incremented minor version number.
author Andrew Knoll <andrewtknoll@gmail.com>
date Thu, 04 Apr 2013 20:10:20 -0400
parents e56e38558864
children
rev   line source
>@3 1 -- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $
>@3 2 -- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
>@3 3 -- LibStub is hereby placed in the Public Domain
>@3 4 -- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
>@3 5 local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
>@3 6 local LibStub = _G[LIBSTUB_MAJOR]
>@3 7
>@3 8 -- Check to see is this version of the stub is obsolete
>@3 9 if not LibStub or LibStub.minor < LIBSTUB_MINOR then
>@3 10 LibStub = LibStub or {libs = {}, minors = {} }
>@3 11 _G[LIBSTUB_MAJOR] = LibStub
>@3 12 LibStub.minor = LIBSTUB_MINOR
>@3 13
>@3 14 -- LibStub:NewLibrary(major, minor)
>@3 15 -- major (string) - the major version of the library
>@3 16 -- minor (string or number ) - the minor version of the library
>@3 17 --
>@3 18 -- returns nil if a newer or same version of the lib is already present
>@3 19 -- returns empty library object or old library object if upgrade is needed
>@3 20 function LibStub:NewLibrary(major, minor)
>@3 21 assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
>@3 22 minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
>@3 23
>@3 24 local oldminor = self.minors[major]
>@3 25 if oldminor and oldminor >= minor then return nil end
>@3 26 self.minors[major], self.libs[major] = minor, self.libs[major] or {}
>@3 27 return self.libs[major], oldminor
>@3 28 end
>@3 29
>@3 30 -- LibStub:GetLibrary(major, [silent])
>@3 31 -- major (string) - the major version of the library
>@3 32 -- silent (boolean) - if true, library is optional, silently return nil if its not found
>@3 33 --
>@3 34 -- throws an error if the library can not be found (except silent is set)
>@3 35 -- returns the library object if found
>@3 36 function LibStub:GetLibrary(major, silent)
>@3 37 if not self.libs[major] and not silent then
>@3 38 error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
>@3 39 end
>@3 40 return self.libs[major], self.minors[major]
>@3 41 end
>@3 42
>@3 43 -- LibStub:IterateLibraries()
>@3 44 --
>@3 45 -- Returns an iterator for the currently registered libraries
>@3 46 function LibStub:IterateLibraries()
>@3 47 return pairs(self.libs)
>@3 48 end
>@3 49
>@3 50 setmetatable(LibStub, { __call = LibStub.GetLibrary })
>@3 51 end