Skip to content

Commit 00c81ec

Browse files
committed
- Allow flag.default and arg.default to be an array if repeatable is true
1 parent 8a00ca8 commit 00c81ec

File tree

7 files changed

+34
-8
lines changed

7 files changed

+34
-8
lines changed

lib/bashly/concerns/validation_helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def assert_string_or_array(key, value)
6161
return unless value
6262

6363
assert [Array, String].include?(value.class),
64-
"#{key} must be a string or an array"
64+
"#{key} must be a string or an array of strings"
6565

6666
assert_array key, value, of: :string if value.is_a? Array
6767
end

lib/bashly/config_validator.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def assert_arg(key, value)
9191
assert_hash key, value, keys: Script::Argument.option_keys
9292
assert_string "#{key}.name", value['name']
9393
assert_optional_string "#{key}.help", value['help']
94-
assert_optional_string "#{key}.default", value['default']
94+
assert_string_or_array "#{key}.default", value['default']
9595
assert_optional_string "#{key}.validate", value['validate']
9696
assert_boolean "#{key}.required", value['required']
9797
assert_boolean "#{key}.repeatable", value['repeatable']
@@ -106,6 +106,10 @@ def assert_arg(key, value)
106106
if value['unique']
107107
assert value['repeatable'], "#{key}.unique does not make sense without nub`repeatable`"
108108
end
109+
110+
if value['default'].is_a? Array
111+
assert value['repeatable'], "#{key}.default array does not make sense without nub`repeatable`"
112+
end
109113
end
110114

111115
def assert_flag(key, value)
@@ -118,7 +122,7 @@ def assert_flag(key, value)
118122
assert_optional_string "#{key}.short", value['short']
119123
assert_optional_string "#{key}.help", value['help']
120124
assert_optional_string "#{key}.arg", value['arg']
121-
assert_optional_string "#{key}.default", value['default']
125+
assert_string_or_array "#{key}.default", value['default']
122126
assert_optional_string "#{key}.validate", value['validate']
123127

124128
assert_boolean "#{key}.private", value['private']
@@ -150,6 +154,10 @@ def assert_flag(key, value)
150154
if value['unique']
151155
assert value['arg'] && value['repeatable'], "#{key}.unique does not make sense without nub`arg` and nub`repeatable`"
152156
end
157+
158+
if value['default'].is_a? Array
159+
assert value['repeatable'], "#{key}.default array does not make sense without nub`repeatable`"
160+
end
153161
end
154162

155163
def assert_env_var(key, value)

lib/bashly/script/argument.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'shellwords'
2+
13
module Bashly
24
module Script
35
class Argument < Base
@@ -9,6 +11,10 @@ def option_keys
911
end
1012
end
1113

14+
def default_string
15+
default.is_a?(Array) ? Shellwords.shelljoin(default) : default
16+
end
17+
1218
def usage_string
1319
required ? label : "[#{label}]"
1420
end

lib/bashly/script/flag.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ def aliases
2222
end
2323
end
2424

25+
def default_string
26+
default.is_a?(Array) ? Shellwords.shelljoin(default) : default
27+
end
28+
2529
def name
2630
long || short
2731
end

lib/bashly/views/argument/usage.gtx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ if allowed
88
end
99

1010
if default
11-
> printf " {{ strings[:default] % { value: default } }}\n"
11+
if default.is_a? Array
12+
> printf " {{ strings[:default] % { value: default.join(', ') } }}\n"
13+
else
14+
> printf " {{ strings[:default] % { value: default } }}\n"
15+
end
1216
end
1317

1418
> echo

lib/bashly/views/command/default_assignments.gtx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ if default_args.any? or default_flags.any?
22
= view_marker
33

44
default_args.each do |arg|
5-
> [[ -n ${args['{{ arg.name }}']:-} ]] || args['{{ arg.name }}']="{{ arg.default }}"
5+
> [[ -n ${args['{{ arg.name }}']:-} ]] || args['{{ arg.name }}']="{{ arg.default_string }}"
66
end
77

88
default_flags.each do |flag|
9-
> [[ -n ${args['{{ flag.name }}']:-} ]] || args['{{ flag.name }}']="{{ flag.default }}"
9+
> [[ -n ${args['{{ flag.name }}']:-} ]] || args['{{ flag.name }}']="{{ flag.default_string }}"
1010
end
1111

1212
>

lib/bashly/views/flag/usage.gtx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
> printf "{{ help.wrap(76).indent(4).sanitize_for_print }}\n"
55

66
if allowed
7-
> printf " {{ strings[:allowed] % { values: allowed.join(', ') } }}\n"
7+
> printf " {{ strings[:allowed] % { values: allowed.join(', ') } }}\n"
88
end
99

1010
if default
11-
> printf " {{ strings[:default] % { value: default } }}\n"
11+
if default.is_a? Array
12+
> printf " {{ strings[:default] % { value: default.join(', ') } }}\n"
13+
else
14+
> printf " {{ strings[:default] % { value: default } }}\n"
15+
end
1216
end
1317

1418
> echo

0 commit comments

Comments
 (0)