Я разрабатываю движок Rails, поэтому я немного рассмотрел существующие. Я заметил, что у многих из них есть файлы в app
, но также в lib
и vendor
.
Мне ясно, что я должен поместить любой код, который должен быть заменен хост-приложением, в папку app
(например, при наличии модели app/user.rb
хост-приложение может легко иметь свой собственный app/user.rb
файл и использовать его вместо файла движка) .
Но я не уверен, когда мне нужно добавить материал в lib
, а когда в vendor
? Я думал, что в vendor
я должен помещать только «внешний» код от других разработчиков или проектов, который я хочу использовать в своем проекте, а в lib
я помещал свои собственные дополнительные библиотеки, над которыми я фактически работаю в проекте. Но почему, например, WiceGrid помещает данные в свои wice_grid / vendor / assets каталог? Мне это не кажется внешним кодом, а кодом, который разработан только для WiceGrid и, следовательно, должен находиться в каталоге lib
?
Обновить
Немного поэкспериментировав, я заметил, что весь код в папке lib
не перезагружается во время разработки движка (я полагаю, то же самое относится и к каталогу vendor
), поэтому я должен поместить их в папку внутри app
, но где именно?
Например, у меня есть файл lib/iq_list_controller.rb
, содержащий некоторые методы класса и экземпляра для ApplicationController
, которые я смешиваю с ним в engine.rb
следующим образом:
initializer "wice_grid_railtie.configure_rails_initialization" do |app|
ActiveSupport.on_load(:action_controller) do
extend IqList::Controller::ClassMethods
include IqList::Controller::InstanceMethods
end
end
Куда мне поместить этот файл, чтобы Ruby правильно его нашел?