Свершилось! Рельсоподобный MVC фреймворк для быстрого создания Gtk+ приложений с помощью Ruby уже здесь.
На данный момент фреймворк содержит 1806 строк кода. Для сравнения база кода Merb уже привысила 53000 строк, Rails еще менее обозрим.
Я бегло осмотрел устройство этого хозяйства и попробую поделиться своим пониманием с вами…
Нам понадобятся несколько инструментов и библиотек:
$ sudo aptitude install glade-3 ruby-gnome2 git-core rubygems
$ git clone git://github.com/intelitiva/rugui.git; cd rugui
$ gem build rugui.gemspec
$ sudo gem install *.gem
Теперь можно сгенерировать каркас нового приложения:
$ rugui my-test-app
Структура директорий будет очень понятна любому Rails/Merb разработчику и постепенно все более и более понятна всем остальным :)

Сие отличается от рельсовой структуры наличием директории app/resources с поддиректориями glade и styles. Первая содержит шаблоны glade, вторая – стили gtkrc.
Glade - это формат описания интерфейсов для Gtk+. Точно так-же называется замечательный инструмент для визуального создания интерфейсов.
Glade файлы используются в качестве шаблонов для View. В каждом шаблоне содержится набор виджетов, связанных с ними сигналов, обработчиков этих сигналов и прочей информации. Виджеты Gtk+ могут порождать множестро различных сигналов. Виджет Button, к примеру, поддерживает сигналы activate, clicked, enter, leave, pressed, released и наследует несколько десятков более экзотических сигналов от своих родителей.
Уникальное имя обработчика для каждого сигнала можно установить в дизайнере интерфейсов Glade. Каждое присвоенное имя обработчика будет связано с соответствующим методом в View. Каждый виджет тоже имеет уникальное имя. Каждое такое имя станет свойством view. Например к виджету c названием “go_button” можно будет обратиться внутри view следующим образом.
go_button.label = 'Go! Go! Go!'
Предположим в свойствах кнопки ‘go_button’ мы указали ‘on_go_button_clicked’ в качестве обработчика сигнала ‘clicked’. Попробуем создать обработчик сигнала clicked прямо в View.
def on_go_button_clicked
button_box.children.each do |child|
child.label = rand(100).to_s
end
end
Клик по кнопке ‘go_button’ выберет все вложенные в ‘button_box’ виджеты и и пропишет им в label случайное число.
Продолжаю исследования :) Всех желающих приглашаю поделиться своими экспериментами!
Скачать пример можно здесь.
Ну и? А где профит? Так и ручками все можно делать, без 2х тыщ строк кода.
Профит в разделении на M V и C. Автоприсоедениение сигналов.
Профит для комьюнити в том, что приложения будут написаны в едином стиле и разбираться в каждом новом оригинальном подходе не будет необходимости.
Я с ходу могу поправить любой Rails проект именно потому, что там есть конвенции которых все придерживаются.