cco 0.2.0

cascading configuration
Documentation
str_empty_true = str::empty("")
str_empty_false = str::empty("hello")
str_len = str::len("hello world")
str_trim = str::trim("  hello world  ")
str_trim_start = str::trim_start("  hello world  ")
str_trim_end = str::trim_end("  hello world  ")
str_contains_true = str::contains("hello world", "world")
str_contains_false = str::contains("hello world", "foo")
str_starts_with_true = str::starts_with("hello world", "hello")
str_starts_with_false = str::starts_with("hello world", "world")
str_ends_with_true = str::ends_with("hello world", "world")
str_ends_with_false = str::ends_with("hello world", "hello")
str_to_upper = str::to_upper("hello world")
str_to_lower = str::to_lower("HELLO WORLD")
str_split = str::split("hello,world,test", ",")
str_join_with_sep = str::join(["a", "b", "c"], ",")
str_join_args = str::join("a", "b", "c", ",")
str_concat_list = str::concat(["hello", " ", "world"])
str_concat_args = str::concat("hello", " ", "world")
str_replace = str::replace("hello world", "world", "universe")
str_reverse = str::reverse("hello")

path_basename = path::basename("/path/to/file.txt")
path_file_name = path::file_name("/path/to/file.txt")
path_file_stem = path::file_stem("/path/to/file.txt")
path_file_ext = path::file_ext("/path/to/file.txt")
path_dirname = path::dirname("/path/to/file.txt")
path_join_list = path::join([
"usr", "local", "bin"
])
path_join_args = path::join("usr", "local", "bin")

list_empty_true = list::empty([])
list_empty_false = list::empty(["a", "b"])
list_len_empty = list::len([
])
list_len_three = list::len(["a", "b", "c"
])
list_all_true = list::all([
true, true, true
])
list_all_false = list::all([true, false, true])
list_all_args = list::all(true, true, true)
list_any_true = list::any([
false, true, false
])
list_any_false = list::any([false, false, false])
list_any_args = list::any(false, true, false)
list_first = list::first([
"a", "b", "c"
])
list_last = list::last(["a", "b", "c"])
list_reverse = list::reverse([
"a", "b", "c"
])
list_contains_true = list::contains(["a", "b", "c"], "b")
list_contains_false = list::contains(["a", "b", "c"
], "d")

map_empty_true = map::empty({})
map_empty_false = map::empty({key = "value"})
map_len_empty = map::len({})
map_len_two = map::len({key1 = "value1", key2 = "value2"})
map_keys = map::keys({key1 = "value1", key2 = "value2"})
map_values = map::values({key1 = "value1", key2 = "value2"})
map_has_key_true = map::has_key({key1 = "value1", key2 = "value2"}, "key1")
map_has_key_false = map::has_key({key1 = "value1", key2 = "value2"}, "key3")
map_merge = map::merge({a = 1}, {b = 2}, {c = 3})
map_merge_overwrites = map::merge({a = 1}, {b = 2}, {a = 3})

int_abs_positive = int::abs(5)
int_abs_negative = int::abs(-5)
int_min = int::min(10, 3)
int_max = int::max(10, 3)
int_clamp = int::clamp(2, 5, 10)

time_minutes = time::minutes(4)
time_hours = time::hours(2)
time_days = time::days(9)
time_weeks = time::weeks(1)