diff options
Diffstat (limited to 'pkgs/astal/src/lib.lua')
-rw-r--r-- | pkgs/astal/src/lib.lua | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pkgs/astal/src/lib.lua b/pkgs/astal/src/lib.lua new file mode 100644 index 0000000..93f4bc1 --- /dev/null +++ b/pkgs/astal/src/lib.lua @@ -0,0 +1,78 @@ +local Variable = require("astal").Variable + +local lib + +lib = { + --- get path to file in astal source + src = function(path) + local str = debug.getinfo(2, "S").source:sub(2) + local src = str:match("(.*/)") or str:match("(.*\\)") or "./" + return src .. path + end, + + --- map an array with a function + map = function(array, func) + local new_arr = {} + for i, v in ipairs(array) do + new_arr[i] = func(v, i) + end + return new_arr + end, + + --- filter an array with a function + filter = function(array, func) + local new_arr = {} + for i, v in ipairs(array) do + if func(v, i) then + new_arr[i] = v + end + end + return new_arr + end, + + --- sort an array of object on a key + sort = function(array, func) + + -- default func to sort on attr 'id' + if not func then + func = 'id' + end + + -- make function if just provided with attribute + if type(func) ~= 'function' then + local key = func + func = function(a, b) return a[key] < b[key] end + end + + -- copy to new array + local new_arr = {} + for i, v in ipairs(array) do + new_arr[i] = v + end + + -- sort and return + table.sort(new_arr, func) + return new_arr + end, + + --- returns length of table + count = function(array) + if not array then + return 0 + else + return #array + end + end, + + --- returns if a table is empty + empty = function(array) + return lib.count(array) == 0 + end, + + --- negates value + neg = function(val) + return not val + end, +} + +return lib |