feat(lib): withDynamicArgs, add basic module system tests
This commit is contained in:
parent
0409563e32
commit
b7456195bd
|
@ -42,5 +42,17 @@ lib: {
|
|||
if f ? __functor
|
||||
then f.__args__ or lib.fp.args (f.__functor f)
|
||||
else builtins.functionArgs f;
|
||||
|
||||
# TODO: Document this.
|
||||
withDynamicArgs = f: args: let
|
||||
fArgs = lib.fp.args f;
|
||||
common = builtins.intersectAttrs fArgs args;
|
||||
in
|
||||
if builtins.isAttrs args
|
||||
then
|
||||
if fArgs == {}
|
||||
then f args
|
||||
else f common
|
||||
else f args;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -172,7 +172,7 @@ lib: {
|
|||
(lib.fp.args module);
|
||||
in
|
||||
if builtins.isFunction module
|
||||
then module (args // dynamicArgs)
|
||||
then lib.fp.withDynamicArgs module (args // dynamicArgs)
|
||||
else module;
|
||||
|
||||
# TODO: Document this.
|
||||
|
|
|
@ -3,6 +3,25 @@ let
|
|||
in {
|
||||
examples = {
|
||||
"empty" = let
|
||||
evaluated = lib.modules.run {
|
||||
modules = [
|
||||
{
|
||||
options.aux = {
|
||||
message = lib.options.create {
|
||||
type = lib.types.string;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
aux.message = "Hello, World!";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
in
|
||||
evaluated ? config;
|
||||
|
||||
"hello world" = let
|
||||
expected = "Hello, World!";
|
||||
|
||||
evaluated = lib.modules.run {
|
||||
|
@ -21,6 +40,36 @@ in {
|
|||
];
|
||||
};
|
||||
|
||||
actual = evaluated.config.aux.message;
|
||||
in
|
||||
actual == expected;
|
||||
|
||||
"recursive" = let
|
||||
expected = "Hello, World!";
|
||||
|
||||
evaluated = lib.modules.run {
|
||||
modules = [
|
||||
({config}: {
|
||||
options.aux = {
|
||||
message = lib.options.create {
|
||||
type = lib.types.string;
|
||||
};
|
||||
|
||||
proxy = lib.options.create {
|
||||
type = lib.types.string;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
aux = {
|
||||
proxy = "Hello, World!";
|
||||
message = config.aux.proxy;
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
actual = evaluated.config.aux.message;
|
||||
in
|
||||
actual == expected;
|
||||
|
|
Loading…
Reference in a new issue