Skip to content

Commit 68fd135

Browse files
committed
fix: set-object now works in the basic case
1 parent c7672b9 commit 68fd135

File tree

4 files changed

+22
-10
lines changed

4 files changed

+22
-10
lines changed

pkg/lib/traverse-get.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ bash_object.traverse-get() {
108108
return
109109
;;
110110
array)
111+
declare -ga REPLY=()
112+
# shellcheck disable=SC2190
111113
REPLY=("${current_object[@]}")
112114
;;
113115
*)
@@ -155,6 +157,7 @@ bash_object.traverse-get() {
155157
bash_object.util.traverse_fail 'ERROR_VALUE_INCORRECT_TYPE' "Queried for array, but found string '$value'"
156158
return
157159
elif [ "$final_value_type" = string ]; then
160+
# shellcheck disable=SC2178
158161
REPLY="$value"
159162
fi
160163
fi

pkg/lib/traverse-set.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ bash_object.traverse-set() {
6464

6565
# 1. Create object
6666
if ! eval "declare -gA $new_current_object_name=()"; then
67+
# TODO: error
6768
printf '%s\n' 'Error: bash-object: eval declare failed'
6869
return 1
6970
fi
@@ -73,7 +74,8 @@ bash_object.traverse-set() {
7374

7475
local -n new_current_object="$new_current_object_name"
7576
local -n object_to_copy="$final_value"
76-
for key in "${!new_current_object[@]}"; do
77+
# test if the object_to_copy is of the right type
78+
for key in "${!object_to_copy[@]}"; do
7779
new_current_object["$key"]="${object_to_copy["$key"]}"
7880
done
7981
elif [ "$final_value_type" = array ]; then

tests/set-object.bats

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
load './util/init.sh'
44

55
@test "correctly sets object" {
6-
declare -a obj=([omicron]=pi rho=sigma tau=upsilon)
6+
declare -A obj=([omicron]=pi [rho]=sigma [tau]=upsilon)
77
declare -A OBJECT=()
88

9-
bash_object.traverse-set object OBJECT '.obj' obj
9+
bash_object.traverse-set object 'OBJECT' '.obj' obj
1010

11-
bash_object.traverse-get object OBJECT '.obj'
12-
assert [ ${#REPLY} -eq 3 ]
11+
bash_object.traverse-get object 'OBJECT' '.obj'
12+
assert [ ${#REPLY[@]} -eq 3 ]
1313
assert [ "${REPLY[omicron]}" = pi ]
1414
assert [ "${REPLY[rho]}" = sigma ]
1515
assert [ "${REPLY[tau]}" = upsilon ]
1616

17-
bash_object.traverse-get string OBJECT '.obj.rho'
17+
bash_object.traverse-get string 'OBJECT' '.obj.rho'
1818
assert [ "$REPLY" = sigma ]
1919
}

tests/set-string.bats

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,21 @@ load './util/init.sh'
6363
declare -A OBJECT=([omicron]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
6464

6565
bash_object.traverse-set string 'OBJECT' '.omicron.pi.rho' 'sigma'
66-
6766
bash_object.traverse-get string 'OBJECT' '.omicron.pi.rho'
6867
assert [ "$REPLY" = 'sigma' ]
69-
70-
bash_object.traverse-get object 'OBJECT' '.omicron.pi'
71-
assert [ "${REPLY[rho]}" = 'sigma' ]
7268
}
7369

70+
# @test "correctly sets string in subobject 2" {
71+
# declare -A OBJECT=()
72+
73+
# bash_object.traverse-set object 'OBJECT' '.omicron'
74+
# bash_object.traverse-set object 'OBJECT' '.omicron.pi'
75+
76+
# bash_object.traverse-set string 'OBJECT' '.omicron.pi.rho' 'sigma'
77+
# bash_object.traverse-get string 'OBJECT' '.omicron.pi.rho'
78+
# assert [ "$REPLY" = 'sigma' ]
79+
# }
80+
7481
@test "correctly sets 2 strings in subobject" {
7582
declare -A SUB_SUB_OBJECT=()
7683
declare -A SUB_OBJECT=([pi]=$'\x1C\x1Dtype=object;&SUB_SUB_OBJECT')

0 commit comments

Comments
 (0)