summaryrefslogtreecommitdiff
path: root/pkgs/astal/src/lib.lua
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/astal/src/lib.lua')
-rw-r--r--pkgs/astal/src/lib.lua78
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