Skip to content

Commit 2909dcc

Browse files
committed
improve validator readability
1 parent 03e08db commit 2909dcc

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

lib/bashly/config_validator.rb

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ def assert_string(key, value)
2424
assert value.is_a?(String), "#{key} must be a string"
2525
end
2626

27+
def assert_optional_string(key, value)
28+
assert_string key, value if value
29+
end
30+
2731
def assert_boolean(key, value)
2832
assert [true, false, nil].include?(value), "#{key} must be a boolean"
2933
end
@@ -43,6 +47,7 @@ def assert_hash(key, value)
4347
end
4448

4549
def assert_version(key, value)
50+
return unless value
4651
assert [String, Integer, Float].include?(value.class),
4752
"#{key} must be a string or a number"
4853
end
@@ -62,9 +67,9 @@ def assert_extensible(key, value)
6267
def assert_arg(key, value)
6368
assert_hash key, value
6469
assert_string "#{key}.name", value['name']
65-
assert_string "#{key}.help", value['help'] if value['help']
66-
assert_string "#{key}.default", value['default'] if value['default']
67-
assert_string "#{key}.validate", value['validate'] if value['validate']
70+
assert_optional_string "#{key}.help", value['help']
71+
assert_optional_string "#{key}.default", value['default']
72+
assert_optional_string "#{key}.validate", value['validate']
6873
assert_boolean "#{key}.required", value['required']
6974

7075
assert_array "#{key}.allowed", value['allowed'], of: :string
@@ -74,23 +79,22 @@ def assert_flag(key, value)
7479
assert_hash key, value
7580
assert value['short'] || value['long'], "#{key} must have at least one of long or short name"
7681

77-
assert_string "#{key}.long", value['long'] if value['long']
78-
assert_string "#{key}.short", value['short'] if value['short']
79-
assert_string "#{key}.help", value['help'] if value['help']
80-
assert_string "#{key}.arg", value['arg'] if value['arg']
81-
82-
assert_string "#{key}.default", value['default'] if value['default']
83-
assert_string "#{key}.validate", value['validate'] if value['validate']
84-
assert_boolean "#{key}.required", value['required']
82+
assert_optional_string "#{key}.long", value['long']
83+
assert_optional_string "#{key}.short", value['short']
84+
assert_optional_string "#{key}.help", value['help']
85+
assert_optional_string "#{key}.arg", value['arg']
86+
assert_optional_string "#{key}.default", value['default']
87+
assert_optional_string "#{key}.validate", value['validate']
8588

89+
assert_boolean "#{key}.required", value['required']
8690
assert_array "#{key}.allowed", value['allowed'], of: :string
8791
end
8892

8993
def assert_env_var(key, value)
9094
assert_hash key, value
9195
assert_string "#{key}.name", value['name']
92-
assert_string "#{key}.help", value['help'] if value['help']
93-
assert_string "#{key}.default", value['default'] if value['default']
96+
assert_optional_string "#{key}.help", value['help']
97+
assert_optional_string "#{key}.default", value['default']
9498
assert_boolean "#{key}.required", value['required']
9599
end
96100

@@ -101,13 +105,13 @@ def assert_command(key, value)
101105
refute value['commands'] && value['flags'], "#{key} cannot have both commands and flags"
102106

103107
assert_string "#{key}.name", value['name']
104-
assert_string "#{key}.short", value['short'] if value['short']
105-
assert_string "#{key}.help", value['help'] if value['help']
106-
assert_string "#{key}.footer", value['footer'] if value['footer']
107-
assert_string "#{key}.group", value['group'] if value['group']
108+
assert_optional_string "#{key}.short", value['short']
109+
assert_optional_string "#{key}.help", value['help']
110+
assert_optional_string "#{key}.footer", value['footer']
111+
assert_optional_string "#{key}.group", value['group']
112+
108113
assert_boolean "#{key}.default", value['default']
109-
110-
assert_version "#{key}.version", value['version'] if value['version']
114+
assert_version "#{key}.version", value['version']
111115
assert_catch_all "#{key}.catch_all", value['catch_all']
112116
assert_extensible "#{key}.extensible", value['extensible']
113117

0 commit comments

Comments
 (0)