Skip to content

Feature: Namespacer

Tron edited this page Jan 13, 2023 · 1 revision

━ What's the Objective?

Namespaces are useful when you've to control or limit the scope of the variables & handlers. Beside that they are also widely used to organize code into logical groups and to prevent naming collisions that can occur especially when you are dealing w/ multiple scripts that utilizes same naming. This module additionally also features a lightweight yet safest way to simulate classes & their instances while having public & private members fully supported out of the box!

Namespace & Class both does support public & private member variables & functions. Private members are completely protected from being accessed via global scope unless the user "INTENTIONALLY" exposes it. Moreover Class can be namespaced as well; i.e you can create classes inside namespace without conflicting the global or other namespaced classes while using same namings!

━ How to Import?

Add the below code once in either of the shared .lua script of the resource you want to use within:

--Declare it globally only once
loadstring(exports.assetify_library:import("namespacer"))()

━ APIs

━ assetify.namespace:create() (Shared)

@Objective: Creates the specified namespace.
⚠️ Always ensure to localize the namespace instance to avoid being exposed to global scope.
--Note: Public & Private members can be appended later via cNamespace.public & cNamespace.private respectively.
local namespace: cNamespace = assetify.namespace:create(
  string: type --Name of your namespace,
  table: parent --(Optional) Any non class table that you wish to utilize for creating the namespace.
)

━ assetify.namespace:destroy() (Shared)

@Objective: Destroys an existing namespace.
⚠️ Destroying namespace will also destroy any further classes & their instances located within it.
local bool: result = assetify.namespace:destroy(
  string: type --Name of your namespace
)

━ assetify.class:getType() (Shared)

@Objective: Retrieves class's type.
local string: type = self:getType()

━ assetify.class:create() (Shared)

@Objective: Creates the specified class.
⚠️ Always ensure to localize the class instance to avoid being exposed to global scope.
--Note: Public & Private members can be appended later via cClass.public & cClass.private respectively.
local class: cClass = assetify.class:create(
  string: type, --Name of your class
  table: parent, --(Optional) Any non class table that you wish to utilize for creating the class.
  string: namespace --(Optional) Valid namespace that you prefer to scope the class within. If not specified the instance will be created within the global scope.
)

━ assetify.class:destroy() (Shared)

@Objective: Destroys the specified class.
⚠️ Destroying class also destroys all of its belonging instances.
local bool: result = assetify.class:destroy(
  class: instance
)

━ assetify.class:isInstance() (Shared)

@Objective: Verifies whether the table is an instance of the specified class.
local bool: result = self:isInstance(
  class <instance>: cInstance
)

━ assetify.class:createInstance() (Shared)

@Objective: Creates an instance of the specified class.
local class <instance>: cInstance = self:createInstance()

━ assetify.class:destroyInstance() (Shared)

@Objective: Destroys specified instance.
local bool: result = cInstance:destroyInstance()
Clone this wiki locally