Вам либо придется написать переводчик C в Ruby, что возможно, но усилия могут быть неоправданными, либо вы можете разбить код C на более мелкие модули, для которых вы можете создать оболочки Ruby в качестве первого шага. После того, как все они обернуты в Ruby и основной поток управления выполнен в Ruby, вы можете написать тестовый комплект (как для проверки правильности вашего кода замены, так и для помощи в обратном инжиниринге) и начать замену модулей C на модули Ruby.
Подход «разделяй и властвуй» должен работать с обычным Ruby, если вы используете модули в качестве собственных расширений, но, очевидно, это вызовет дополнительные проблемы, если вы нацеливаетесь на что-то вроде JRuby в качестве среды выполнения. Если вы хотите сделать что-то подобное в JRuby согласно вашему комментарию, вы смотрите на обертывание модулей C в JNI и вызов через JVM таким образом. В любом случае ваш код C будет взаимодействовать с кодом Ruby, но эти два подхода не являются взаимозаменяемыми.
Ни один из подходов не будет быстрым, и оба будут лотом работы.