moved code for coherence
This commit is contained in:
73
src/lua_func/handle.lua
Normal file
73
src/lua_func/handle.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
local utils = require("utils")
|
||||
local tm = require("tm")
|
||||
|
||||
local unpack = unpack or table.unpack
|
||||
|
||||
local handle = {}
|
||||
|
||||
local function _get_func_by_path(file_path, func_name)
|
||||
-- 1. Load the file from the path
|
||||
-- loadfile returns a 'chunk' (a function that runs the file's code)
|
||||
local chunk, load_err = loadfile(file_path)
|
||||
|
||||
if not chunk then
|
||||
return nil, "Failed to load file: " .. tostring(load_err)
|
||||
end
|
||||
|
||||
-- 2. Execute the chunk to get the module's return value
|
||||
-- Most Lua modules end with 'return { ... }'
|
||||
local ok, module = pcall(chunk)
|
||||
|
||||
if not ok then
|
||||
return nil, "Error executing file: " .. tostring(module)
|
||||
end
|
||||
|
||||
-- 3. Validate the module is a table and contains the function
|
||||
if type(module) ~= "table" then
|
||||
return nil, "Module did not return a table (returned " .. type(module) .. ")"
|
||||
end
|
||||
|
||||
local target_func = module[func_name]
|
||||
if type(target_func) ~= "function" then
|
||||
return nil, "Function '" .. func_name .. "' not found in '" .. file_path .. "'"
|
||||
end
|
||||
|
||||
return target_func
|
||||
end
|
||||
|
||||
function handle.func_call(params)
|
||||
local file = params.file
|
||||
local fname = params.fname
|
||||
local prms = params.params
|
||||
local res = nil
|
||||
local succ, ret
|
||||
|
||||
local pfile = file
|
||||
-- 1. modify the file path if it is relative
|
||||
if utils.is_relative_path(pfile) then
|
||||
local td = tm.gd("test_directory")
|
||||
pfile = utils.join_paths(td, file)
|
||||
end
|
||||
|
||||
-- 2. retrieve the function "fname"
|
||||
local func, err = _get_func_by_path(pfile, fname)
|
||||
|
||||
-- 3. Execute the function
|
||||
if err == nil then
|
||||
print(string.format("Function executed from '%s'", pfile))
|
||||
utils.log("func_call function found '%s', '%s'", file, fname)
|
||||
succ, ret = pcall(func, unpack(prms))
|
||||
utils.log("func_call returned '%s', '%s'", tostring(succ), tostring(ret))
|
||||
|
||||
if succ then
|
||||
res = ret
|
||||
else
|
||||
err = ret
|
||||
end
|
||||
end
|
||||
|
||||
-- 4. Returns result
|
||||
return res, err
|
||||
end
|
||||
|
||||
return handle
|
||||
Reference in New Issue
Block a user