def at(value)
      case value
        when Date, Time then where("#{table_name}.created_at <= ?", value.to_time).last
        when Numeric then find_by_number(value.floor)
        when String then find_by_tag(value)
        when Symbol then respond_to?(value) ? send(value) : nil
        when Version then value
      end
    end
def at(value)
      case value
        when Date, Time then where("#{table_name}.created_at <= ?", value.to_time).last
        when Numeric then find_by_number(value.floor)
        when String then find_by_tag(value)
        when Symbol then respond_to?(value) ? send(value) : nil
        when Version then value
      end
    end
Returns a single version associated with the given value. The following formats are valid:
 * A Date or Time object: When given, +to_time+ is called on the value and the last version
   record in the history created before (or at) that time is returned.
 * A Numeric object: Typically a positive integer, these values correspond to version numbers
   and the associated version record is found by a version number equal to the given value
   rounded down to the nearest integer.
 * A String: A string value represents a version tag and the associated version is searched
   for by a matching tag value. *Note:* Be careful with string representations of numbers.
 * A Symbol: Symbols represent association class methods on the +has_many+ versions
   association. While all of the built-in association methods require arguments, additional
   extension modules can be defined using the <tt>:extend</tt> option on the +versioned+
   method. See the +versioned+ documentation for more information.
 * A Version object: If a version object is passed to the +at+ method, it is simply returned
   untouched.