#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Validators
"""
from functools import partial

from rebulk.validators import chars_before, chars_after, chars_surround
from . import seps

seps_before = partial(chars_before, seps)
seps_after = partial(chars_after, seps)
seps_surround = partial(chars_surround, seps)


def int_coercable(string):
    """
    Check if string can be coerced to int
    :param string:
    :type string:
    :return:
    :rtype:
    """
    try:
        int(string)
        return True
    except ValueError:
        return False


def and_(*validators):
    """
    Compose validators functions
    :param validators:
    :type validators:
    :return:
    :rtype:
    """
    def composed(string):
        """
        Composed validators function
        :param string:
        :type string:
        :return:
        :rtype:
        """
        for validator in validators:
            if not validator(string):
                return False
        return True
    return composed


def or_(*validators):
    """
    Compose validators functions
    :param validators:
    :type validators:
    :return:
    :rtype:
    """
    def composed(string):
        """
        Composed validators function
        :param string:
        :type string:
        :return:
        :rtype:
        """
        for validator in validators:
            if validator(string):
                return True
        return False
    return composed
