--- numeric.c 2010-07-21 02:19:10.132975081 -0400 +++ numeric.c 2010-07-19 01:58:27.473031631 -0400 @@ -453,6 +453,23 @@ /* * call-seq: + * num.divsor?(other) -> true or false + * + * Returns true if other is a multiple of num. + * + * 1.divisor?(2) #=> false + * 2.divisor?(2) #=> true + * 126.divisor?(9) #=> true + */ + +static VALUE +num_divisor_p(VALUE num, VALUE other) +{ + return rb_equal(rb_funcall(num, '%', 1, other), DBL2NUM(0)); +} + +/* + * call-seq: * num.abs -> numeric * num.magnitude -> numeric * @@ -3351,6 +3368,7 @@ rb_define_method(rb_cNumeric, "integer?", num_int_p, 0); rb_define_method(rb_cNumeric, "zero?", num_zero_p, 0); rb_define_method(rb_cNumeric, "nonzero?", num_nonzero_p, 0); + rb_define_method(rb_cNumeric, "divisor?", num_divisor_p, 1); rb_define_method(rb_cNumeric, "floor", num_floor, 0); rb_define_method(rb_cNumeric, "ceil", num_ceil, 0);