Skip to content
This repository was archived by the owner on Nov 28, 2018. It is now read-only.

Library Examples

Jay Reardon edited this page Jun 2, 2015 · 5 revisions

Sample Embedded Library Example

EmbeddedLibrary.lua

-----------------------------------------------------------------------------------------------
-- EmbeddedLibrary Module Definition
-----------------------------------------------------------------------------------------------
local PackageName, Major, Minor, Patch = "EmbededLibrary", 1, 0, 0
local PkgMajor, PkgMinor = sting.format("%s-%d.%d", PackageName, Major, Minor), Patch
local Pkg = Apollo.GetPackage(PkgMajor)
if Pkg and (Pkg.nVersion or 0) >= PkgMinor then
  return -- no upgrade needed
end

-- Set a reference to the actual package or create an empty table
local EmbededLibrary = Pkg and Pkg.tPackage or {}

EmbededLibrary.embeded = EmbededLibrary.embeded or {}

-- upgrading of embeded is done at the bottom of the file
local mixins = {
  "EmbeddedLibraryFunction"
}   

function EmbeddedLibrary:EmbeddedLibraryFunction()
  -- Do something interesting
end

-----------------------------------------------------------------------------------------------
-- EmbeddedLibrary Constructor
-----------------------------------------------------------------------------------------------
function EmbeddedLibrary:new(args)
  local new = { }

  if args then
    for key, val in pairs(args) do
      new[key] = val
    end
  end

  return setmetatable(new, EmbeddedLibrary)
end

-----------------------------------------------------------------------------------------------
-- EmbeddedLibrary Library / Apollo Routines
-----------------------------------------------------------------------------------------------
function EmbeddedLibrary:Embed( target )
  for k, v in pairs( mixins ) do
    target[v] = self[v]
  end
  self.embeded[target] = true
  return target
end

function EmbeddedLibrary:OnLoad() 
  Event_FireGenericEvent("OneVersion_ReportAddonInfo", "EmbeddedLibrary", Major, Minor, Patch, 0, true)
end

-- No dependencies
function EmbeddedLibrary:OnDependencyError(strDep, strError) return false 
end

-----------------------------------------------------------------------------------------------
-- EmbeddedLibrary Instantiation/ Registration
-----------------------------------------------------------------------------------------------

--- Upgrade our old embeded
for target, v in pairs( EmbeddedLibrary.embeded ) do
  EmbeddedLibrary:Embed( target )
end

Apollo.RegisterPackage(EmbeddedLibrary, PkgMajor, PkgMinor, {})

Other File

function SomeAddon:OnLoad()
  -- Library Embeds
  Apollo.GetPackage("EmbededLibrary-1.0").tPackage:Embed(self)
  self:EmbeddedLibraryFunction()
end

Sample Loaded Library Example

LoadedLibrary.lua

local PackageName, Major, Minor, Patch = "LoadedLibrary", 1, 0, 0
local PkgMajor, PkgMinor = sting.format("%s-%d.%d", PackageName, Major, Minor), Patch
local Pkg = Apollo.GetPackage(PkgMajor)
if Pkg and (Pkg.nVersion or 0) >= PkgMinor then
  return -- no upgrade needed
end

function LoadedLibrary:new(args)
  local new = { }

  if args then
    for key, val in pairs(args) do
      new[key] = val
    end
  end
  return setmetatable(new, LoadedLibrary)
end

function LoadedLibrary:OnLoad() 
  Event_FireGenericEvent("OneVersion_ReportAddonInfo", "LoadedLibrary", Major, Minor, Patch, 0, true)
end

function LoadedLibrary:LibraryFunction() 
end

Apollo.RegisterPackage(LoadedLibrary, PkgMajor, PkgMinor, {})

Other File

local Library = Apollo.GetPackage("LoadedLibrary-1.0").tPackage
Library:LibraryFunction()

Clone this wiki locally