Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.hubspot.jinjava.lib.filter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.hubspot.jinjava.doc.annotations.JinjavaDoc;
Expand Down Expand Up @@ -41,6 +42,8 @@ public Object filter(Object var, JinjavaInterpreter interpreter, String... args)
throw new InterpretException(getName() + " filter requires an attr to filter on", interpreter.getLineNumber());
}

String[] expArgs = new String[]{};

String attr = args[0];

ExpTest expTest = interpreter.getContext().getExpTest("truthy");
Expand All @@ -49,14 +52,18 @@ public Object filter(Object var, JinjavaInterpreter interpreter, String... args)
if (expTest == null) {
throw new InterpretException("No expression test defined with name '" + args[1] + "'", interpreter.getLineNumber());
}

if (args.length > 2) {
expArgs = Arrays.copyOfRange(args, 2, args.length);
}
}

ForLoop loop = ObjectIterator.getLoop(var);
while (loop.hasNext()) {
Object val = loop.next();
Object attrVal = interpreter.resolveProperty(val, attr);

if (expTest.evaluate(attrVal, interpreter)) {
if (expTest.evaluate(attrVal, interpreter, (Object[]) expArgs)) {
result.add(val);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ public void selectAttrWithExp() {
.isEqualTo("[2]");
}

@Test
public void selectAttrWithIsEqualToExp() {
assertThat(jinjava.render("{{ users|selectattr('email', 'equalto', 'bar@bar.com') }}", new HashMap<String, Object>()))
.isEqualTo("[1]");
}


public static class User {
private int num;
private boolean isActive;
Expand Down