@Override protected void registerDefaults() { register(new ELFunctionDefinition("", "datetimeformat", Functions.class, "dateTimeFormat", Object.class, String[].class)); register(new ELFunctionDefinition("", "unixtimestamp", Functions.class, "unixtimestamp", Object.class)); register(new ELFunctionDefinition("", "truncate", Functions.class, "truncate", Object.class, Object[].class)); register(new ELFunctionDefinition("", "range", Functions.class, "range", Object.class, Object[].class)); register(new ELFunctionDefinition("", "type", TypeFunction.class, "type", Object.class)); register(new ELFunctionDefinition("", "today", Functions.class, "today", String[].class)); register(new ELFunctionDefinition("", "strtotime", Functions.class, Functions.STRING_TO_TIME_FUNCTION, String.class, String.class)); register(new ELFunctionDefinition("", "super", Functions.class, "renderSuperBlock")); register(new ELFunctionDefinition("fn", "list", Lists.class, "newArrayList", Object[].class)); register(new ELFunctionDefinition("fn", "immutable_list", Functions.class, "immutableListOf", Object[].class)); }
public ELFunctionDefinition(String namespace, String localName, Class<?> methodClass, String methodName, Class<?>... parameterTypes) { this.namespace = namespace; this.localName = localName; this.method = resolveMethod(methodClass, methodName, parameterTypes); }
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { if (args.length > 0) { return Functions.dateTimeFormat(var, args); } else { return Functions.dateTimeFormat(var); } }
@Test public void testDefineProxy() throws Exception { Method m = MyClass.class.getDeclaredMethod("concatState", String.class); MyClass instance = new MyClass("bar"); ELFunctionDefinition proxy = InjectedContextFunctionProxy.defineProxy("ns", "fooproxy", m, instance); assertThat(proxy.getName()).isEqualTo("ns:fooproxy"); assertThat(proxy.getMethod().getDeclaringClass().getSimpleName()).isEqualTo( InjectedContextFunctionProxy.class.getSimpleName() + "$$ns$$fooproxy"); assertThat(proxy.getMethod().invoke(null, "foo")).isEqualTo("foobar"); }
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { if (!(var instanceof String)) { throw new InterpretException(String.format("%s filter requires a string as input", getName())); } if (args.length < 1) { throw new InterpretException(String.format("%s filter requires a datetime format parameter", getName())); } return Functions.stringToTime((String) var, args[0]); }
@Override public Object filter(Object var, JinjavaInterpreter interpreter, String... args) { return Functions.unixtimestamp(var); }
public void addGlobalMacro(MacroFunction macro) { getGlobalMacros().put(macro.getName(), macro); }
@Override public Object doEvaluate(Map<String, Object> argMap, Map<String, Object> kwargMap, List<Object> varArgs) { invocationCount++; return super.doEvaluate(argMap, kwargMap, varArgs); }
@Test(expected = InvalidDateFormatException.class) public void itThrowsExceptionOnInvalidTimezone() { ZonedDateTime zonedDateTime = Functions.today("Not a timezone"); } }
@Override public Object filter(Object object, JinjavaInterpreter interpreter, String... arg) { return Functions.truncate(object, (Object[]) arg); }
public void addFunction(ELFunctionDefinition fn) { register(fn); }
public void registerFunction(ELFunctionDefinition f) { functionLibrary.addFunction(f); }
public ELFunctionDefinition getFunction(String name) { return fetch(name); }
private ZonedDateTime getZonedDateTime(Object var) { if (var instanceof ZonedDateTime) { return (ZonedDateTime) var; } else if (var instanceof PyishDate) { return ((PyishDate) var).toDateTime(); } else { return Functions.getDateTimeArg(var, ZoneOffset.UTC); } }
public ELFunctionDefinition getFunction(String name) { ELFunctionDefinition f = functionLibrary.getFunction(name); if (f != null) { return f; } if (parent != null) { return parent.getFunction(name); } return null; }
@Test public void testDefineProxy() throws Exception { Method m = MyClass.class.getDeclaredMethod("concatState", String.class); MyClass instance = new MyClass("bar"); ELFunctionDefinition proxy = InjectedContextFunctionProxy.defineProxy("ns", "fooproxy", m, instance); assertThat(proxy.getName()).isEqualTo("ns:fooproxy"); assertThat(proxy.getMethod().getDeclaringClass().getSimpleName()).isEqualTo( InjectedContextFunctionProxy.class.getSimpleName() + "$$ns$$fooproxy"); assertThat(proxy.getMethod().invoke(null, "foo")).isEqualTo("foobar"); }
public void itReturnsNullOnNullInput() { String datetime = null; String format = "yyyy-MM-dd'T'HH:mm:ssZ"; assertThat(Functions.stringToTime(datetime, format)).isEqualTo(null); }
@Override public Object doEvaluate(Map<String, Object> argMap, Map<String, Object> kwargMap, List<Object> varArgs) { invocationCount++; return super.doEvaluate(argMap, kwargMap, varArgs); }
@Test(expected = InvalidDateFormatException.class) public void itThrowsExceptionOnInvalidTimezone() { ZonedDateTime zonedDateTime = Functions.today("Not a timezone"); } }
public void itReturnsNullOnNullInput() { String datetime = null; String format = "yyyy-MM-dd'T'HH:mm:ssZ"; assertThat(Functions.stringToTime(datetime, format)).isEqualTo(null); }