Я разрабатываю механизм 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 нашел его?