docs: def percentAt(self, value):
          """
          Returns the percentage where the given value lies between this rulers
          minimum and maximum values.  If the value equals the minimum, then the
          percent is 0, if it equals the maximum, then the percent is 1 - any
          value between will be a floating point.  If the ruler is a custom type,
          then only if the value matches a notch will be successful.
          
          :param      value | <variant>
          
          :return     <float>
          """
          if value is None:
              return 0.0
          
          values = self.values()
          
          try:
              return float(values.index(value)) / (len(values) - 1)
          except ValueError:
              return 0.0
          except ZeroDivisionError:
              return 1.0