Skip to content

Commit f7db673

Browse files
committed
feat: Remove '--as' and '--by' in favor of just writing --ref or --value
1 parent 652bc5c commit f7db673

19 files changed

+240
-242
lines changed

README.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# bash-object
22

3-
The _first_ Bash library for imperatively constructing heterogenously hierarchical data structures
3+
The _first_ Bash library for imperatively constructing heterogeneously hierarchical data structures
44

55
This is meant to be a low level API providing primitives for other libraries.
66

@@ -27,21 +27,21 @@ declare -A yankee_object=()
2727
declare -A xray_object=([whiskey]=victor)
2828
declare -a foxtrot_array=(omicron pi rho sigma)
2929

30-
bobject set-object --by-ref root_object '.zulu' zulu_object
31-
bobject set-object --by-ref root_object '.zulu.yankee' yankee_object
32-
bobject set-object --by-ref root_object '.zulu.yankee.xray' xray_object
33-
bobject set-array --by-ref root_object '.zulu.yankee.xray.foxtrot' foxtrot_array
30+
bobject set-object --ref root_object '.zulu' zulu_object
31+
bobject set-object --ref root_object '.zulu.yankee' yankee_object
32+
bobject set-object --ref root_object '.zulu.yankee.xray' xray_object
33+
bobject set-array --ref root_object '.zulu.yankee.xray.foxtrot' foxtrot_array
3434

35-
bobject get-object --as-value root_object '.zulu.yankee.xray'
35+
bobject get-object --value root_object '.zulu.yankee.xray'
3636
assert [ "${REPLY[whiskey]}" = victor ]
3737

38-
bobject get-string --as-value root_object '.zulu.yankee.xray.whiskey'
38+
bobject get-string --value root_object '.zulu.yankee.xray.whiskey'
3939
assert [ "$REPLY" = victor ]
4040

41-
bobject get-array --as-value root_object '.zulu.yankee.xray.foxtrot'
41+
bobject get-array --value root_object '.zulu.yankee.xray.foxtrot'
4242
assert [ ${#REPLY[@]} -eq 4 ]
4343

44-
bobject get-string --as-value root_object '.["zulu"].["yankee"].["xray"].["foxtrot"].[2]'
44+
bobject get-string --value root_object '.["zulu"].["yankee"].["xray"].["foxtrot"].[2]'
4545
assert [ "$REPLY" = rho ]
4646
```
4747

@@ -55,7 +55,5 @@ bpm install
5555
```
5656

5757
## TODO
58-
- error on invalid references (`type=object` in virtual object metadata, when it is referencing an array)
5958
- ensure error (for set primarily) if the virtual object references a variable that does not exist
60-
- use ${param@A} on newer bash instead of declare -p
6159
- error if set in array out of bounds?

docs/unmarshaling.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ declare -A OBJECT=([xray]=$'\x1C\x1Dtype=object;&unique_global_variable_xray')
6666
You can retrieve the data with
6767

6868
```sh
69-
bobject get-object --as-value 'OBJECT' 'xray'
69+
bobject get-object --value 'OBJECT' 'xray'
7070
assert [ "${REPLY[yankee]}" = zulu ]
7171
```
7272

pkg/lib/traverse-get.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ bash_object.traverse-get() {
1212
local -a args=()
1313

1414
for arg; do case "$arg" in
15-
--as-ref)
15+
--ref)
1616
if [ -n "$flag_as_what" ]; then
17-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--as-ref' and '--as-value' are mutually exclusive"
17+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--ref' and '--value' are mutually exclusive"
1818
return
1919
fi
2020
flag_as_what='as-ref'
2121
;;
22-
--as-value)
22+
--value)
2323
if [ -n "$flag_as_what" ]; then
24-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--as-ref' and '--as-value' are mutually exclusive"
24+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--ref' and '--value' are mutually exclusive"
2525
return
2626
fi
2727
flag_as_what='as-value'
@@ -35,12 +35,12 @@ bash_object.traverse-get() {
3535
esac done
3636

3737
if [ -z "$flag_as_what" ]; then
38-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass either the '--as-ref' or '--as-value' flag"
38+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass either the '--ref' or '--value' flag"
3939
return
4040
fi
4141

4242
if [ "$flag_as_what" = 'as-ref' ]; then
43-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "--as-ref not implemented"
43+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "--ref not implemented"
4444
fi
4545

4646
# Ensure correct number of arguments have been passed

pkg/lib/traverse-set.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ bash_object.traverse-set() {
1010
local -a args=()
1111

1212
for arg; do case "$arg" in
13-
--by-ref)
13+
--ref)
1414
if [ -n "$flag_pass_by_what" ]; then
15-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--by-ref' and '--by-value' are mutually exclusive"
15+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--ref' and '--value' are mutually exclusive"
1616
return
1717
fi
1818
flag_pass_by_what='by-ref'
1919
;;
20-
--by-value)
20+
--value)
2121
if [ -n "$flag_pass_by_what" ]; then
22-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--by-ref' and '--by-value' are mutually exclusive"
22+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Flags '--ref' and '--value' are mutually exclusive"
2323
return
2424
fi
2525
flag_pass_by_what='by-value'
@@ -33,12 +33,12 @@ bash_object.traverse-set() {
3333
esac done
3434

3535
if [ -z "$flag_pass_by_what" ]; then
36-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass either the '--by-ref' or '--by-value' flag"
36+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass either the '--ref' or '--value' flag"
3737
return
3838
fi
3939

4040
if [ "$flag_pass_by_what" = 'by-value' ]; then
41-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "--by-value not implemented"
41+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "--value not implemented"
4242
fi
4343

4444
local final_value_type root_object_name filter final_value

pkg/lib/util/util.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ bash_object.util.generate_vobject_name() {
6262
# stack. This is used when generating objects to prevent
6363
# conflicts
6464
bash_object.util.generate_filter_stack_string() {
65-
unset REPLY
65+
unset REPLY; REPLY=
6666

6767
local oldIFS="$IFS"
6868
IFS='_'

tests/e2e.bats

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ load './util/init.sh'
88
for subcmd in "${subcmds[@]}"; do
99
declare -A OBJECT=()
1010

11-
run bobject "$subcmd" --as-value 'OBJECT' '.zulu.yankee' 'invalid'
11+
run bobject "$subcmd" --value 'OBJECT' '.zulu.yankee' 'invalid'
1212

1313
assert_failure
1414
assert_line -p "Expected '3' arguments, but received '4'"
@@ -21,7 +21,7 @@ load './util/init.sh'
2121
for subcmd in "${subcmds[@]}"; do
2222
declare -A OBJECT=()
2323

24-
run bobject "$subcmd" --as-value 'invalid'
24+
run bobject "$subcmd" --value 'invalid'
2525

2626
assert_failure
2727
assert_failure
@@ -35,7 +35,7 @@ load './util/init.sh'
3535
for subcmd in "${subcmds[@]}"; do
3636
declare -A OBJECT=()
3737

38-
run bobject "$subcmd" --by-ref 'OBJECT' '.zulu.yankee' 'xray' 'invalid'
38+
run bobject "$subcmd" --ref 'OBJECT' '.zulu.yankee' 'xray' 'invalid'
3939

4040
assert_failure
4141
assert_line -p "Expected '4' arguments, but received '5'"
@@ -48,7 +48,7 @@ load './util/init.sh'
4848
for subcmd in "${subcmds[@]}"; do
4949
declare -A OBJECT=()
5050

51-
run bobject "$subcmd" --by-ref 'OBJECT' '.zulu'
51+
run bobject "$subcmd" --ref 'OBJECT' '.zulu'
5252

5353
assert_failure
5454
assert_line -p "Expected '4' arguments, but received '3'"
@@ -60,9 +60,9 @@ load './util/init.sh'
6060
declare -A subobj=()
6161
str='MEOW'
6262

63-
bobject set-object --by-ref 'OBJECT' '.zulu' subobj
64-
bobject set-string --by-ref 'OBJECT' '.zulu.yankee' str
65-
bobject get-string --as-value 'OBJECT' '.zulu.yankee'
63+
bobject set-object --ref 'OBJECT' '.zulu' subobj
64+
bobject set-string --ref 'OBJECT' '.zulu.yankee' str
65+
bobject get-string --value 'OBJECT' '.zulu.yankee'
6666

6767
assert [ "$REPLY" = 'MEOW' ]
6868
}
@@ -72,9 +72,9 @@ load './util/init.sh'
7272
declare -A subobj=()
7373
str='MEOW'
7474

75-
bobject set-object --by-ref 'OBJECT' '.zulu' subobj
76-
bobject set-string --by-ref 'OBJECT' '.["zulu"].["yankee"]' str
77-
bobject get-string --as-value 'OBJECT' '.["zulu"].["yankee"]'
75+
bobject set-object --ref 'OBJECT' '.zulu' subobj
76+
bobject set-string --ref 'OBJECT' '.["zulu"].["yankee"]' str
77+
bobject get-string --value 'OBJECT' '.["zulu"].["yankee"]'
7878

7979
assert [ "$REPLY" = 'MEOW' ]
8080
}
@@ -86,20 +86,20 @@ load './util/init.sh'
8686
declare -A xray_object=([whiskey]=victor)
8787
declare -a foxtrot_array=(omicron pi rho sigma)
8888

89-
bobject set-object --by-ref root_object '.zulu' zulu_object
90-
bobject set-object --by-ref root_object '.zulu.yankee' yankee_object
91-
bobject set-object --by-ref root_object '.zulu.yankee.xray' xray_object
92-
bobject set-array --by-ref root_object '.zulu.yankee.xray.foxtrot' foxtrot_array
89+
bobject set-object --ref root_object '.zulu' zulu_object
90+
bobject set-object --ref root_object '.zulu.yankee' yankee_object
91+
bobject set-object --ref root_object '.zulu.yankee.xray' xray_object
92+
bobject set-array --ref root_object '.zulu.yankee.xray.foxtrot' foxtrot_array
9393

94-
bobject get-object --as-value root_object '.zulu.yankee.xray'
94+
bobject get-object --value root_object '.zulu.yankee.xray'
9595
assert [ "${REPLY[whiskey]}" = victor ]
9696

97-
bobject get-string --as-value root_object '.zulu.yankee.xray.whiskey'
97+
bobject get-string --value root_object '.zulu.yankee.xray.whiskey'
9898
assert [ "$REPLY" = victor ]
9999

100-
bobject get-array --as-value root_object '.zulu.yankee.xray.foxtrot'
100+
bobject get-array --value root_object '.zulu.yankee.xray.foxtrot'
101101
assert [ ${#REPLY[@]} -eq 4 ]
102102

103-
bobject get-string --as-value root_object '.["zulu"].["yankee"].["xray"].["foxtrot"].[2]'
103+
bobject get-string --value root_object '.["zulu"].["yankee"].["xray"].["foxtrot"].[2]'
104104
assert [ "$REPLY" = rho ]
105105
}

tests/errors-circular-reference.bats

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ load './util/init.sh'
77
declare -A SUB_OBJECT=([nested]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
88
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
99

10-
run bobject get-object --as-value OBJECT '.my_key.nested'
10+
run bobject get-object --value OBJECT '.my_key.nested'
1111

1212
assert_failure
1313
assert_line -p "ERROR_SELF_REFERENCE"
@@ -18,7 +18,7 @@ load './util/init.sh'
1818
declare -A SUB_OBJECT=([nested]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
1919
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
2020

21-
run bobject get-object --as-value OBJECT '.my_key.nested.nested'
21+
run bobject get-object --value OBJECT '.my_key.nested.nested'
2222

2323
assert_failure
2424
assert_line -p "ERROR_SELF_REFERENCE"
@@ -29,7 +29,7 @@ load './util/init.sh'
2929
declare -a SUB_ARRAY=([nested]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
3030
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
3131

32-
run bobject get-array --as-value OBJECT '.my_key.nested'
32+
run bobject get-array --value OBJECT '.my_key.nested'
3333

3434
assert_failure
3535
assert_line -p "ERROR_SELF_REFERENCE"
@@ -40,7 +40,7 @@ load './util/init.sh'
4040
declare -a SUB_ARRAY=([nested]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
4141
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
4242

43-
run bobject get-array --as-value OBJECT '.my_key.nested.nested'
43+
run bobject get-array --value OBJECT '.my_key.nested.nested'
4444

4545
assert_failure
4646
assert_line -p "ERROR_SELF_REFERENCE"
@@ -53,7 +53,7 @@ load './util/init.sh'
5353
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
5454
declare -A obj=()
5555

56-
run bobject set-object OBJECT --by-ref '.my_key.nested' obj
56+
run bobject set-object OBJECT --ref '.my_key.nested' obj
5757

5858
assert_failure
5959
assert_line -p "ERROR_SELF_REFERENCE"
@@ -65,7 +65,7 @@ load './util/init.sh'
6565
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=object;&SUB_OBJECT')
6666
declare -A obj=()
6767

68-
run bobject set-object OBJECT --by-ref '.my_key.nested.gone' obj
68+
run bobject set-object OBJECT --ref '.my_key.nested.gone' obj
6969

7070
assert_failure
7171
assert_line -p "ERROR_SELF_REFERENCE"
@@ -77,7 +77,7 @@ load './util/init.sh'
7777
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
7878
declare -a arr=()
7979

80-
run bobject set-array OBJECT --by-ref '.my_key.nested' arr
80+
run bobject set-array OBJECT --ref '.my_key.nested' arr
8181

8282
assert_failure
8383
assert_line -p "ERROR_SELF_REFERENCE"
@@ -89,7 +89,7 @@ load './util/init.sh'
8989
declare -A OBJECT=([my_key]=$'\x1C\x1Dtype=array;&SUB_ARRAY')
9090
declare -a arr=()
9191

92-
run bobject set-array OBJECT --by-ref '.my_key.nested.gone' arr
92+
run bobject set-array OBJECT --ref '.my_key.nested.gone' arr
9393

9494
assert_failure
9595
assert_line -p "ERROR_SELF_REFERENCE"

tests/errors-required-flags.bats

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ load './util/init.sh'
88

99
assert_failure
1010
assert_line -p 'ERROR_ARGUMENTS_INVALID'
11-
assert_line -p "Must pass either the '--as-ref' or '--as-value' flag"
11+
assert_line -p "Must pass either the '--ref' or '--value' flag"
1212
}
1313

1414
@test "get errors on combining mutually exclusive flags" {
15-
run bobject get-string --as-value --as-ref
15+
run bobject get-string --value --ref
1616

1717
assert_failure
1818
assert_line -p 'ERROR_ARGUMENTS_INVALID'
19-
assert_line -p "Flags '--as-ref' and '--as-value' are mutually exclusive"
19+
assert_line -p "Flags '--ref' and '--value' are mutually exclusive"
2020
}
2121

22-
@test "error on unimplemented --as-ref" {
23-
run bobject get-string --as-ref
22+
@test "error on unimplemented --ref" {
23+
run bobject get-string --ref
2424

2525
assert_failure
2626
assert_line -p 'ERROR_ARGUMENTS_INVALID'
27-
assert_line -p "--as-ref not implemented"
27+
assert_line -p "--ref not implemented"
2828
}
2929

3030
# set
@@ -33,21 +33,21 @@ load './util/init.sh'
3333

3434
assert_failure
3535
assert_line -p 'ERROR_ARGUMENTS_INVALID'
36-
assert_line -p "Must pass either the '--by-ref' or '--by-value' flag"
36+
assert_line -p "Must pass either the '--ref' or '--value' flag"
3737
}
3838

3939
@test "set errors on combining mutually exclusive flags" {
40-
run bobject set-string --by-value --by-ref
40+
run bobject set-string --value --ref
4141

4242
assert_failure
4343
assert_line -p 'ERROR_ARGUMENTS_INVALID'
44-
assert_line -p "Flags '--by-ref' and '--by-value' are mutually exclusive"
44+
assert_line -p "Flags '--ref' and '--value' are mutually exclusive"
4545
}
4646

47-
@test "error on unimplemented --by-value" {
48-
run bobject set-string --by-value
47+
@test "error on unimplemented --value" {
48+
run bobject set-string --value
4949

5050
assert_failure
5151
assert_line -p 'ERROR_ARGUMENTS_INVALID'
52-
assert_line -p "--by-value not implemented"
52+
assert_line -p "--value not implemented"
5353
}

0 commit comments

Comments
 (0)