diff --git a/jsonquerylang/functions.py b/jsonquerylang/functions.py index 8cf1e34..7fdd193 100644 --- a/jsonquerylang/functions.py +++ b/jsonquerylang/functions.py @@ -267,19 +267,14 @@ def fn_if(condition, value_if_true, value_if_false): else _value_if_false(data) ) - def fn_in(path, in_values): - getter = compile(path) - _values = list(map(compile, in_values)) - - return lambda data: getter(data) in map(lambda _value: _value(data), _values) + def fn_in(value, values): + _value = compile(value) + _values = compile(values) - def fn_not_in(path, not_in_values): - getter = compile(path) - _values = list(map(compile, not_in_values)) + return lambda data: _value(data) in _values(data) - return lambda data: getter(data) not in map( - lambda _value: _value(data), _values - ) + def fn_not_in(value, values): + return lambda data: not fn_in(value, values)(data) def fn_regex(path, expression, options=None): compiled_regex = ( diff --git a/tests/test_compile.py b/tests/test_compile.py index 9db0d91..8bf8b72 100644 --- a/tests/test_compile.py +++ b/tests/test_compile.py @@ -13,6 +13,32 @@ class CompileTestCase(unittest.TestCase): + def test_in_function(self): + query = ["in", "Chris", ["array", "Chris", "Joe", "Emily"]] + evalute = compile(query) + + self.assertTrue(evalute(None)) + + def test_in_function_with_expression(self): + """Test execution of in function""" + query = ["in", "Chris", ["pipe", ["get", "friends"], ["map", ["get", "name"]]]] + evaluate = compile(query) + + self.assertTrue(evaluate({"friends": friends})) + + def test_not_in_function(self): + query = ["not in", "Amber", ["array", "Chris", "Joe", "Emily"]] + evalute = compile(query) + + self.assertTrue(evalute(None)) + + def test_not_in_function_with_expression(self): + """Test execution of in function""" + query = ["not in", "Amber", ["pipe", ["get", "friends"], ["map", ["get", "name"]]]] + evaluate = compile(query) + + self.assertTrue(evaluate({"friends": friends})) + def test_unknown_function(self): """Raise an exception in case of an unknown function""" self.assertRaisesRegex(