Morning All, I've been thinking about extensions on and off for the past few months. I really think installing extensions is too hard, here are three ideas to ease the process. These assume that the work Jim has done to gem-ify extensions is good and that all extensions should be distributed as gems.
Sneaky Asset Management ===== I want to get rid of radiant:extensions:xyz:update and the Rails router does most of the hard work. Let's establish that assets for extensions are held in a place like "/public/extensions/xyz/assets/". We'd need a route and controller that listened for that route, then just pull the assets from within the gem (stored in some similarly structured folder within the library). Of course a few users will want to customize the assets. So we need a radiant:extensions:xyz:unpack_assets (basically the same as the old "update") that copies the assets to the same place in /public/extensions/xyz/assets. The Rails router will pickup these static files with a higher precedence than the asset-finding-in-gems route, so there is nothing complicated. Why do this? Reducing the steps and complexity for the installation. Drop the gem in, require it, and you might be ready to go. It'd be almost exactly like installing a normal gem for use in a Rails app. Explicit Migrations ====== Migrations, I think, need to go the other way. Rather than being hidden away they should be in plain view. I think there should be a generator that create the migration files and puts them in a normal place, like /db/migrate/9318938_radiant_xyz_add_my_secret_table. Migrations, I find, are the area most in need of debugging when issues arise with extensions. If we're moving towards the idea of Rails 3 embeddable apps, I would want to have all my migrations in one place, clearly organized, where I can understand what's going on. Interactive Install Manager ===== Here's the install process I'd like to see: >> gem install radiant-xyz-extension >> rake radiant:setup_extensions Welcome to the RadiantCMS Extension Management System. The following extensions are available in the system: 1. XYZ [inactive] 2. YAJ [inactive] 3. LDU [inactive] 4 OLD [active] Which extension would you like to activate / deactivate? (q to quit) >> 2 To activate extension YAJ I need to require the gem in your /config/environment.rb, is that ok? (Y or N) >> Y Gem "YAJ" is now required. The extension also needs to make changes to your database with migrations, would you like to generate those now? (Y or N) >> Y Generating migrations for extension "YAJ"... /db/migrate/91830_radiant_yaj_create_table_for_yaj /db/migrate/91830_radiant_yaj_modify_pages_for_yaj Migrations generated. Would you like to RUN the migrations now? (Y or N) >> Y (blah blah migration output) Extension YAJ has been setup. The following extensions are available in the system: 1. XYZ [inactive] 2. YAJ [active] 3. LDU [inactive] 4 OLD [active] Which extension would you like to activate / deactivate? (q to quit) ============== That's my brainstorm for this morning. FYI, in my head I modeled this install process after the EXCELLENT experience of installing Phusion Passenger. - Jeff --- Jeff Casimir Jumpstart Lab by Casimir Creative, LLC http://jumpstartlab.com @jumpstartlab on twitter _______________________________________________ Radiant mailing list Post: Radiant@radiantcms.org Search: http://radiantcms.org/mailing-list/search/ List Site: http://lists.radiantcms.org/mailman/listinfo/radiant Radiant: http://radiantcms.org Extensions: http://ext.radiantcms.org