Skip to content

Commit b2bb497

Browse files
committed
simplify code
1 parent 9a56fce commit b2bb497

1 file changed

Lines changed: 13 additions & 29 deletions

File tree

src/main/scala/io/viash/languages/Bash.scala

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ object Bash extends Language {
4141

4242
useJq match {
4343
case Some(true) =>
44-
generateJqInjectionMods(argsMetaAndDeps)
44+
val parseCode = s"""|${viashParseJsonCode}
45+
|
46+
|# Parse JSON parameters using jq
47+
|_viash_json_content=$$(cat "$$VIASH_WORK_PARAMS")
48+
|ViashParseJsonBash <<< "$$_viash_json_content"
49+
|""".stripMargin
50+
ScriptInjectionMods(params = parseCode)
4551
case Some(false) =>
4652
generateCompatInjectionMods(argsMetaAndDeps)
4753
case None =>
@@ -88,21 +94,6 @@ ViashParseJsonBash <<< "$$_viash_json_content"
8894
ScriptInjectionMods(params = fullCode)
8995
}
9096

91-
/**
92-
* Generate injection mods for jq mode:
93-
* Uses jq to parse JSON and populate bash variables directly.
94-
* Multiple-value arguments are stored as bash arrays.
95-
*/
96-
private def generateJqInjectionMods(argsMetaAndDeps: Map[String, List[Argument[_]]]): ScriptInjectionMods = {
97-
val parseCode = s"""${viashParseJsonCode}
98-
99-
# Parse JSON parameters using jq
100-
_viash_json_content=$$(cat "$$VIASH_WORK_PARAMS")
101-
ViashParseJsonBash <<< "$$_viash_json_content"
102-
"""
103-
ScriptInjectionMods(params = parseCode)
104-
}
105-
10697
def generateConfigInjectMods(argsMetaAndDeps: Map[String, List[Argument[_]]], config: Config): ScriptInjectionMods = {
10798
// Determine use_jq setting from the BashScript resource
10899
val useJq = config.resources.collectFirst {
@@ -113,18 +104,11 @@ ViashParseJsonBash <<< "$$_viash_json_content"
113104
val parSet = argsMetaAndDeps.flatMap { case (_, params) =>
114105
params.map { par =>
115106
val value = getExampleValue(par, useArrays)
116-
if (par.multiple) {
117-
if (useArrays) {
118-
// jq mode: bash array
119-
val values = value match {
120-
case v if v.isEmpty => ""
121-
case v => v
122-
}
123-
s"""${par.par}=($values)"""
124-
} else {
125-
// compat mode: IFS-separated string
126-
s"""${par.par}='$value'"""
127-
}
107+
if (value.isEmpty) {
108+
return ""
109+
} else if (par.multiple && par.direction != ArgumentDirection.Output && useArrays) {
110+
// jq mode with arrays
111+
s"""${par.par}=($value)"""
128112
} else {
129113
s"""${par.par}='$value'"""
130114
}
@@ -138,7 +122,7 @@ ViashParseJsonBash <<< "$$_viash_json_content"
138122
private def getExampleValue(arg: Argument[_], useArrays: Boolean = true): String = {
139123
val values = getArgumentValues(arg)
140124

141-
if (arg.multiple) {
125+
if (arg.multiple && arg.direction != ArgumentDirection.Output) {
142126
if (useArrays) {
143127
values.map(v => s"'$v'").mkString(" ")
144128
} else {

0 commit comments

Comments
 (0)