def number_at(value)
      case value
        when Date, Time then (v = at(value)) ? v.number : 1
        when Numeric then value.floor
        when String, Symbol then (v = at(value)) ? v.number : nil
        when Version then value.number
      end
    end
def number_at(value)
      case value
        when Date, Time then (v = at(value)) ? v.number : 1
        when Numeric then value.floor
        when String, Symbol then (v = at(value)) ? v.number : nil
        when Version then value.number
      end
    end
Returns the version number associated with the given value. In many cases, this involves
 simply passing the value to the +at+ method and then returning the subsequent version number.
 Hoever, for Numeric values, the version number can be returned directly and for Date/Time
 values, a default value of 1 is given to ensure that times prior to the first version
 still return a valid version number (useful for reversion).