def make_iter_method(method_name, *model_names):
    """Make a page-concatenating iterator method from a find method

    :param method_name: The name of the find method to decorate
    :param model_names: The names of the possible models as they appear in the JSON response. The first found is used.
    """
    def iter_method(self, *args, **kwargs):
        result = getattr(self, method_name)(*args, **kwargs)
        # Filter the list of model names for those that are a key in the response, then take the first.
        # Useful for backwards compatability if response keys might change
        model_name = next((model_name for model_name in model_names if model_name in result), None)
        # If there are no model names, return None to avoid raising StopIteration
        if not model_name:
            return

        for model in result[model_name]:
            yield model

        while True:
            if 'next' not in result.get('links', {}):
                return

            result = self._get(result['links']['next'])
            for model in result[model_name]:
                yield model

    return iter_method