Ruby позволяет разработчику "обновлять" любой объект в любое время.
Это означает, что после загрузки Model
в RefineryCMS вы можете просто снова открыть класс и обновить его:
class Model
def new_method(value)
...
end
def existing_method(*args)
...
super # refer to the ovewriten method
end
end
В вашем случае RafineryCMS - это приложение RoR, что означает, что при загрузке сервера код ruby загружается сначала для платформы rails, затем для плагина / плагина RafineryCMS и, в конце концов, для ваших пользовательских библиотек (например, папки lib).
Важным моментом здесь является порядок загрузки кода, модификация должна быть загружена после подлинного кода класса.
То есть в вашей библиотеке или инициализаторах (не очень хорошее место, но это работает) вы должны поместить ваши привычные методы для класса Model.
РЕДАКТИРОВАТЬ: Я снова читал ваш вопрос, и я должен отметить, что вы не правы, вы на самом деле можете изменить класс из гема или плагина.ruby загружает каждый объект в той же области видимости, и все объекты доступны для перезаписи.
В среде разработки RoR перезагружает все классы (кроме случаев, когда cache_classes = false) при каждом запросе.Возможно, что после первого запроса драгоценный камень перезагрузится, и ваши изменения будут потеряны.Позаботьтесь о перезагрузке ваших библиотек после каждого запроса (только в env разработки)
PS: include & class_eval тоже будет работать, важно перезаписать ранее загруженный класс