value=casevaluewhentruethen1whenfalsethen0when::Stringthenvalue.presenceelsevalueendsuper(value)enddefchanged?(old_value,_new_value,new_value_before_type_cast)# :nodoc:super||number_to_non_number?(old_value,new_value_before_type_cast)endprivatedefnumber_to_non_number?(old_value,new_value_before_type_cast)old_value!=nil&&non_numeric_string?(new_value_before_type_cast)enddefnon_numeric_string?(value)# 'wibble'.to_i will give zero, we want to make sure# that we aren't marking int zero to string zero as# changed.value.to_s!~/\A-?\d+\.?\d*\z/endendendendend