def search(self, query: Optional[dict] = None,
               offset: int = 0,
               limit: Optional[int] = None,
               order_by: Optional[tuple] = None,
               secure: bool = False) -> List[IModel]:
        """Search for models

        Filtering is done through ``rulez`` based JSON/dict query, which
        defines boolean statements in JSON/dict structure.

        : param query: Rulez based query
        : param offset: Result offset
        : param limit: Maximum number of result
        : param order_by: Tuple of ``(field, order)`` where ``order`` is
                         ``'asc'`` or ``'desc'``
        : param secure: When set to True, this will filter out any object which
                       current logged in user is not allowed to see

        : todo: ``order_by`` need to allow multiple field ordering
        """
        raise NotImplementedError
Search for models

        Filtering is done through ``rulez`` based JSON/dict query, which
        defines boolean statements in JSON/dict structure.

        : param query: Rulez based query
        : param offset: Result offset
        : param limit: Maximum number of result
        : param order_by: Tuple of ``(field, order)`` where ``order`` is
                         ``'asc'`` or ``'desc'``
        : param secure: When set to True, this will filter out any object which
                       current logged in user is not allowed to see

        : todo: ``order_by`` need to allow multiple field ordering