@classmethod
def search(cls, ignore_case=False, **kw):
    """ Searches through the cache to find objects with field that match
            those given by the **kw.

            Note that this can return more than one object.

            :param bool ignore_case: Should search ignore case?
            :param dict **kw: Fields to search
            :rtype: list
            :returns: List of matching CachingBrineObjects
        """
    result = []
    cls._initialize_cache()
    for k, v in kw.items():
        for obj in cls.__cache:
            ob_value = getattr(obj, k, None)
            if ignore_case:
                if isinstance(v, str) and isinstance(ob_value, str):
                    r = v.lower() == ob_value.lower()
            else:
                r = v == ob_value
            if r:
                if obj in result:
                    continue
                else:
                    result.append(obj)
            else:
                continue
    return result
