diff options
Diffstat (limited to 'bos-dispatch.sh')
-rw-r--r-- | bos-dispatch.sh | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/bos-dispatch.sh b/bos-dispatch.sh index afefb5e..8489765 100644 --- a/bos-dispatch.sh +++ b/bos-dispatch.sh @@ -1,15 +1,35 @@ #!bash +# return the closest non-BOS function name from the call stack +function bos-dispatch/caller-into() { + local -n bos_dispatch_caller_result="$1" + + local idx + for caller in "${FUNCNAME[@]}"; do + if [[ ! $caller =~ ^bos[_/-] ]]; then + bos_dispatch_caller_result="$caller" + return 0 + fi + done + + return 1 +} + # the bare-bones / fallback dispatcher function bos-dispatch/invoke() { local class="$1";shift local self_id="$1";shift local method="$1";shift + local qualified_method="$class/$method" + + if [[ "$method" =~ / ]]; then + qualified_method="$method" + fi - if declare -F "$class/$method" >/dev/null; then + if declare -F "$qualified_method" >/dev/null; then local self bos-object-id/pack-self-into "$class" "$self_id" self - "$class/$method" "$@" + "$qualified_method" "$@" return $? fi |