Ruby は分からないので PHP で。
最初に全体をIXCMに変換してから 4、5、9 を変換。
<?php
$d = $_POST['digits'] ;
if (!ctype_digit($d) || $d < 1 || $d > 3999) $result = 'アラビア数字で 1~3999 までの自然数を入力してください。' ;
else {
$rnumerals1 = array('I', 'X', 'C', 'M') ;
$rnumerals5 = array('V', 'L', 'D') ;
$l = strlen($d)-1 ;
$result = preg_replace('/(\d)/e', 'str_repeat($rnumerals1[$l--], $1)', $d) ;
$result = preg_replace('/((\w)(\2{8}|\2{4}|\2{3}))/e',
'(strlen("$1") != 5 ? "$2" : "").(strlen("$1") == 9 ? $rnumerals1[array_search("$2", $rnumerals1)+1] : $rnumerals5[array_search("$2", $rnumerals1)])',
$result) ;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
</head>
<body>
<form action="./<?php echo basename(__FILE__) ?>" method="post">
<div>
<div><?php echo $result ; ?></div>
<input type="text" name="digits" value="" /><input type="submit" value="変換" />
</div>
</form>
</bdoy>
</html>