Hello all,
Firstly, thanks again for all your support with the development of
this plugin; arguably one of the most complex extensions of Rails, it
would be much harder to keep it all together without your feedback.
I thought it might be a good idea to fulfil the purpose of this list
by sharing some of my plans for the next release of Rails (1.2).
Rather than being an incremental release, I’m starting with a fresh
codebase, a fresh & clean API and some possibly-significant changes in
functionality.
Engines are dead, long live engines
Probably the biggest change that I’d like to undertake (and have
already started developing) is the obliteration of the notion of ‘an
engine’. It seems clear now, a year in, that the biggest hurdle people
have when thinking about the extra functionality we’re aiming at with
engines is the notion of ‘installing an engine’. It feels big, it
feels clunky, and basically it paints the wrong picture. So engines
are to be no more.
Instead, I’d like to open up the functionality of the engines plugin
to every plugin the user has. If a plugin has an /app directory,
then it’ll get added to the appropriate load paths. If it has a
/public folder, it’ll get synced into the public space and the
action_view helpers will work with that. Now, you and I know that the
only thing that really makes, say, the ‘login engine’ different from
any other plugin is the fact that it needs to include an
‘init_engine.rb’ file. This will be one of the biggest changes that
I’m proposing: init_engine.rb will revert to being a vanilla-flavoured
init.rb.
And yes, Vanilla, not Neopolitan
Here’s the other significant change. The reason why init_engine.rb
exists is so that we could control the load order of enginized
plugins, and the reason behind this was twofold:
- So that the engines plugin would be loaded before any plugins
(engines) that needed it - So that engines could require code from other engines
Feature 1 should no longer be an issue, thanks to some extra work I
can do, but I’m proposing that feature 2 should be abandoned. What I
mean is - unless Rails Core deems to allow controlling of plugin load
order, I won’t be providing any guarantees that plugin_x is loaded
before plugin_y. In our experience with the only existing layering of
engines (login + user), it leads to more complication than anything
else. Shucks! Who knew.
Other stuff too
Some other stuff will be changing too, including some nifty tricks
with migrations and routing, but those two changes above are the most
significant and I thought it best to let folks know my plans before
1.2 really comes out.
Any thoughts, anyone? Bueller? Anyone?