summaryrefslogtreecommitdiff
path: root/pkgs/astal/src/lib.lua
blob: 93f4bc1b69eacb7c829f8c741af529ee54124def (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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