Mountable Katello::Engine on Foreman vs. --full engine

For those working (or interested in working) on the Katello engine, can you checkout https://github.com/Katello/katello/pull/3315

This PR converts the current --full engine to a --mountable engine using the method 'isolate_namespace Katello' in engine.rb

The Katello::Engine can be mounted :at => '/katello' (or any path) without touching Foreman's routes.rb file, using the following initializer in engine.rb (the key is :after=> :build_middleware_stack)

initializer 'katello.mount_engine', :after=> :build_middleware_stack do |app|
  app.routes_reloader.paths << "#{Katello::Engine.root}/config/routes/mount_engine.rb"
end

Here are some of the differences of --full engines vs. --mountable (or isolated) engines and how it relates to the Katell::Engine branch.

Full engines not name-spaced by default. Try $ rails plugin new my_full_engine --full
Mountable engines are name-spaced by default. Try $ rails plugin new mountable_engine --mountable

Current Katello::Engine manually namespaces tables in engine.rb. Not necessary with mountable Katello::Engine, but in practice both do the same thing.
Current Katello::Engine wraps the routes.rb file with the following scope/namespace. Not necessary with mountable Katello::Engine
scope 'katello', :as => 'katello' do
scope :module => :katello do
Current Katello::Engine requires all routes to be modified from named_resource_path to katello_named_resource_path. Not necessary with mountable Katello::Engine.
Current Katello::Engine requires all models/modules to be namspaced with Katello::ModelName. Not necessary with mountable Katello::Engine (for the most part)

All helpers in Katello::Engine can be seen by Foreman and vice versa in both a --full and --mountable engine with a couple lines of couple. Isolated engines needs to prefix with .(dot) notation.

In short, imho non-isolated engines are best suited for simple plugins that add/extend a model, controller. For a sophisticated application like Katello with the full stack of models, controllers, routes, views, assets, and even engines within the engine (bastion is an isolated engine with katello engine :), it appears best to develop as a mountable/isolated engine. The code will be cleaner and more maintable which leads to quicker development time. A lot of my rebasing is undoing many changes (not all) that the team is doing which seems unfortunate.

Regards,

Joseph