Skip to content

Commit

Permalink
fix(pipelinetemplate): Resolve EL expressions in module param argumen…
Browse files Browse the repository at this point in the history
…ts (#1249)
  • Loading branch information
robzienert committed Mar 29, 2017
1 parent 7bb7b6c commit 5469885
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
Expand Up @@ -38,6 +38,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;

public class ModuleTag implements Tag {
Expand Down Expand Up @@ -88,7 +89,7 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
moduleContext.setLocation("module:" + moduleId);

// Assign parameters into the context
Map<String, Object> paramPairs = new HashMap<>();
Map<String, String> paramPairs = new HashMap<>();
helper.subList(1, helper.size()).forEach(p -> {
String[] parts = p.split("=");
if (parts.length != 2) {
Expand All @@ -100,11 +101,13 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
List<String> missing = new ArrayList<>();
for (NamedHashMap var : module.getVariables()) {
// First try to assign the variable from the context directly
Object val = context.get(var.getName());
Object val = interpreter.resolveELExpression(var.getName(), tagNode.getLineNumber());
if (val == null) {
// Try to assign from a parameter (using the param value as a context key first, then as a literal)
if (paramPairs.containsKey(var.getName())) {
val = context.get(paramPairs.get(var.getName()), paramPairs.get(var.getName()));
val = Optional.ofNullable(
interpreter.resolveELExpression(paramPairs.get(var.getName()), tagNode.getLineNumber())
).orElse(paramPairs.get(var.getName()));
}

// If the val is still null, try to assign from a default value
Expand Down
Expand Up @@ -44,19 +44,20 @@ class ModuleTagSpec extends Specification {
variables: [
[name: 'myStringVar', defaultValue: 'hello'] as NamedHashMap,
[name: 'myOtherVar'] as NamedHashMap,
[name: 'subject'] as NamedHashMap
[name: 'subject'] as NamedHashMap,
[name: 'job'] as NamedHashMap
],
definition: '{{myStringVar}} {{myOtherVar}}, {{subject}}')
definition: '{{myStringVar}} {{myOtherVar}}, {{subject}}. You triggered {{job}}')
]
)
RenderContext context = new DefaultRenderContext('myApp', pipelineTemplate, [job: 'job', buildNumber: 1234])
RenderContext context = new DefaultRenderContext('myApp', pipelineTemplate, [job: 'myJob', buildNumber: 1234])
context.variables.put("testerName", "Mr. Tester Testington")

when:
def result = renderer.render('{% module myModule myOtherVar=world, subject=testerName %}', context)
def result = renderer.render('{% module myModule myOtherVar=world, subject=testerName, job=trigger.job %}', context)

then:
// The ModuleTag outputs JSON
result == '"hello world, Mr. Tester Testington"'
result == '"hello world, Mr. Tester Testington. You triggered myJob"'
}
}

0 comments on commit 5469885

Please sign in to comment.