- cjson
- Base
- try
- noop
- once
- Array
- concat
- diff
- each
- every
- fill
- filter
- find
- findIndex
- from
- includes
- indexOf
- join
- lastIndexOf
- map
- pop
- push
- reduce
- reduceRight
- reverse
- shift
- slice
- some
- sort
- splice
- toString
- union
- unshift
- Function
- apply
- bind
- call
- Object
- assign
- entries
- freeze
- get
- keys
- omit
- pick
- set
- values
- String
- endsWith
- replace
- slice
- split
- startsWith
- trim
- trimLeft
- trimRight
local resty_redis = require "resty.redis"
local utility = require "utility"
function get_redis()
local redis, err = resty_redis:new()
if not redis then return nil, err end
local ok, err = redis:connect("127.0.0.1", 6379)
if ok then
return redis
else
return nil, err
end
end
function close_redis(res)
local redis = res[0]
local data = res[1]
redis:close()
return data
end
local res, err = utility.try({
get_redis
function(red)
local data, err = redis:get("something")
return { redis, data }, err
end,
close_redis
}, function(err)
return nil, "some error happened"
end)
utility.noop() -- nothing happend
utility.once(function()
-- only call once
end)
This api is similar to js Array
local Array = require "utility.array"
local arr = Array({}) -- {}
local arr1 = Array({ 1, 2, 3 }) -- { 1, 2, 3 }
local arr2 = Array.from({ 1, 2, 3 }) -- { 1, 2, 3 }
arr:concat(arr1)
arr:each(function(value, index, arr) end)
arr:every(function(value, index, arr) end)
arr:fill(1)
arr:filter(function(value, index, arr) end)
arr:find(function(value, index, arr) end)
arr:findIndex(function(value, index, arr) end)
arr:forEach(function(value, index, arr) end)
arr:includes(1)
arr:indexOf(1)
arr:join('-')
arr:lastIndexOf(1)
arr:map(function(value, index, arr) end)
arr:pop()
arr:push(1)
arr:reduce(function(result, value, index, arr) end, 0)
arr:reduceRight(function(result, value, index, arr) end, 0)
arr:reverse()
arr:shift()
arr:slice(0, 1)
arr:some(function(value, index, arr) end)
arr:sort(function(value1, value2) end)
arr:splice(0, 1)
arr:toString()
arr:unshift(1)
arr:diff(arr1) -- arr_only, arr1_only
arr:union(arr1, arr2) -- arr U arr1 U arr2
local Function require "utility.function"
local func = Function(function(arg1, arg2, arg3)
print(arg1 .. " " .. arg2 .. " " .. arg3)
end)
-- 1 2 3
func(1, 2, 3)
-- 1 2 3
func:apply({ 1, 2, 3 })
-- 1 2 4
func:bind(1, 2)(2, 3, 4)
-- 1 2 2 3 4
func:call(1, 2, 3)
local Object = require "utility.array"
-- { a = 2, b = 3, c = 2, d = 3 }
Object.assign({
a = 1,
b = 1
}, {
a = 2,
c = 2
}, {
b = 3,
d = 3
})
-- { a = 1, b = 1 }
Object.pick({
a = 1,
b = 1,
c = 1
}, { "a", "b" })
-- { c = 1 }
Object.omit({
a = 1,
b = 1,
c = 1
}, { "a", "b" })
-- 1
Object.get({
a = {
a = 1
},
b = 1,
c = 1
}, "a.a") -- or { "a", "a" }
-- 0
Object.get({
a = 1,
b = 1,
c = 1
}, "a.a", 0)
-- { a = { a = 1 } }
Object.set({}, "a.a", 1)
-- { a = { a = 1 } }
Object.set({}, { "a", "a" }, 1)
-- { "a", "b", "c" }
Object.keys({
a = 1,
b = 2,
c = 3
})
-- { 1, 2, 3 }
Object.values({
a = 1,
b = 2,
c = 3
})
-- { { "a", 1 }, { "b", 2 }, { "c", 3 } }
Object.entries({
a = 1,
b = 2,
c = 3
})
local obj = { a = "a" }
Object.freeze(obj) -- after this, obj is not editable
obj.a = "b" -- { a = "a" }
obj.b = "b" -- { a = "a" }
local String = require "utility.string"
String.endsWith("test.lua", ".lua") -- true
String.endsWith("test.lua", ".lu") -- false
String.replace("test.lua", ".", "-") -- "test-lua"
String.replace("$a-$b", { a = "aaa", b = "bbb" }) -- "aaa-bbb"
String.replace("${a}-${b}", { a = "aaa", b = "bbb" }, function(k) return "${" .. k .. "}" end) -- "aaa-bbb"
String.slice("test.lua", 1, 5) -- test
String.split("test.lua", ".") -- { "test", "lua" }
String.startsWith("test.lua", "test") -- true
String.startsWith("test.lua", "est") -- false
String.trim(" test.lua ") -- "test.lua"
String.trimLeft(" test.lua ") -- "test.lua "
String.trimRight(" test.lua ") -- " test.lua"
export LUA_PATH="/path/to/lua-utility/lib/?.lua;;"
export LUA_CPATH="/path/to/lua-cjson/?.so;;"
lua test.lua
Copyright (c) 2018 xiedacon