On Nov 10, 2011, at 1:31 AM, Rahul Kumar wrote:
> I have a gem that has been growing for a while (e.g. mygem). There's a
> lot of experimental stuff being added. So I'd like to have a =
mygem-core
> which has the basic stuff that should be stable and fairly frozen. =
Then
> i can quickly respond with a fix, rather than wait for the other =
changes
> to stabilize.

I prefer to:

1) Keep the original gem name
2) Make a plugin system and move the fast-moving parts into plugins.  =
The core gem should automatically load plugin gems.

> The other stuff can go into mygem-extra or mygem-utils and
> mygem-experimental. Some of it may move from "experimental" to "util" =
or
> "extra" as the API stabilizes.

Give each experiment a reasonable name and release them as separate =
gems, especially if you're not interested in maintaining or exploring =
them forever.  This allows you to hand them off to more-interested =
maintainers or abandon them without breaking API.

> I am not clear what the best way is. Do i keep the original gem name =
and
> make it implicitly the "core" removing all other stuff from it. Or
> should i create new gems for these 3 or 4, meaning that the original =
gem
> (name) will no longer exist.
>=20
> Should i keep it in one git repo within the same directory structure
> (meaning multiple gemspec files). Or divide/clone it into separate
> github repos. However, I am hoping that even across these gems the =
root
> directory will still be my gem.

Use separate repositories for separate gems.  You can create an =
organization for your repositories on github.

> Will dividing the gem lead to other problems ?


Splitting up a gem won't lead to other problems by itself.

To save yourself a possible hassle, avoid having =3D dependencies =
between the pieces.  An =3D dependency forces you to release at least =
two gems at once if you want both pieces to be using the latest code.  =
Instead use ~> to specify a version range that is acceptable.

Use a good tool like Hoe to manage the releases of your many gems.  A =
good tool makes releasing easy, so an update that affects three of your =
gems will not be tedious and should take only a few minutes, not an hour =
or more.=