| Public | Protected | Private | |
|---|---|---|---|
| Origin | RubyForge, GitHub, RailApp, etc. |
Org Internal: shared by projects |
Org Internal: specific to one project |
| Examples | Rails Bcrypt Hoptoad |
Org rails base app Org business rules Org stylesheets |
Rails app "Foo" Gems for "Foo" Layouts for "Foo" |
| Gems |
|
|---|---|
| Plugins |
|
| Files |
|
The app will define its gems in config.rb, then we use rake gems.
The org's base app will not come with pre-installed plugins.
Instead, it should have a rake task (TBD) that installs plugins,
possibly by prompting the developer yes/no for each plugin.
e.g. "Do you want to use Hoptoad to report your exceptions?"
We want a rake task that creates git submodules for shared files,
possibly by prompting the developer yes/no for each submodule,
e.g. "Do you want to use Dave's gray CSS layout?"
Create a "shared" directory for models, views, controllers, etc.
e.g. models/shared/foo/, views/shared/goo/, controllers/shared/hoo
Make your shared code as small and as specific as possible,
because this is easier to test, deploy, document, and update.
We may want/need to create aggregator gems and git models
that bundle some of our small gems with related functionality.
We want a gem server where we can share org-protected gems,
ideally with password protection and also external availability.
When we create fixes to public gems and plugins,
we want to submit the fixes upstream to the authors
rather than managing our our forks/clones/copies,
e.g. we want annotate_models to omit line numbers.
We want to create ways for the org to contribute to open source.
A good first candidate is improvements to existing public gems.