[Nitro] [OT] Roll n' Rain

TRANS transfire at gmail.com
Tue Jun 27 11:44:30 EDT 2006


Hi NCT,

I want to tell you about two project I've been working on that are
starting to come to fruition. One is called RubyRoll,or just Roll(s),
and the other Rain.

Rolls adds object-oriented library management with versioning to Ruby
w/o being tied to a package manager (as opposed to Gems). It
essentially works like this. When distributing your project, organize
the lib/, ext/ and/or data/ directories with a version tier. Eg.

  myapp/
    lib/
      1.0.0/
        ...

Keep in mind you don't have to develop with the project in this layout
(though you could) you can leave the versioin tier out and only add it
in upon distribution. (Another alternative is to leave it in but label
it '0' and just rename it upon distribution.) With that addition of
RUBYOPT="-roll" you can then do things like:

  library('myapp', '>1' )  #=> #<Library myapp/1.0.0>
  library('myapp').require('somefile')

Of course it also works like normal:

  require 'myapp/somefile'

Rolls will insert the version tier as needed. Rolls also has the
ability to add meta information, like author, summary, etc. to the
Library object. One piece of info that is esspecially useful is
'scope'. By setting the scope you can tell Rolls to search multiple
subdirs. For example:

  myapp/
    lib/
      1.0.0/
        foo/
          ...
        bar/
          here.rb

  library('myapp').scope( '.', 'foo', 'bar' )

  require 'myapp/here'

Finally you can add an index.rb file to your project which will be
loaded automatically when a library is activated (perfect for setting
the scope and other meta-info).

I just released version 0.7.0, it still needs a little work (I know of
two issue I need to fix) but 's good enough to try out. The current
code is actually a complete rewrite of the precisou version --I shrunk
the code base in half! Much more elegant now.

The second project is Rain and it is a very unique package manager. It
actually takes a compressed source package called a "drop file" (.drp
right now, but maybe .drop or .rdr better?) Inside the package is also
a drop/ directory that holds a metainfo file and may have other
suplemental scripts if needed. Using this the rain command line
application can build and install a native OS package on the fly. Let
me repeat that: Rain generates and installs native OS packages on the
fly! Just ot be clear, let me give an examnple. Let's say you're using
Debian or Ubunutu. Typing 'rain install myapp' will create a .deb
package and install it. If you're using Arch, it will build a pacman
package and install it. If Fedora or Redhat, and .rpm. And so on.

Rain is quite as developed ad Roll, but it's coming along well --it
already works on my Ubuntu system. Of course the real trick will be
the Windows .msi adapter ;-)

While Rain can download drop packages from the internet (on the fly
too). I haven't added dependency handling. I'm not sure about that
yet. I sometimes think it would be nice to revive RPA to handle this
side of things.

Ansyway, So those are the two project that are almost ready for
initial releases. I wonder if I should merge them into one project?
While I don't want to tie Rolls to any package manager --Rain isn't
really any package manager, it's more like a meta-package manager.
Also I would like to teach Rolls to recognize a drop file and be able
to use it much like Java can use jar files. In other words you would
be able to do:

  require 'myapp.drp'

And Ruby/Rolls would uncompress the myapp drop package in a special
cache location and  then load it from there. Not sure what I would
call this combined project if I did so though.

So anyway, just wanted to get NCT's take.

Thanks,
T.

P.S. Sorry for the long post. And yes, this is my legendary Gems killer ;-)


More information about the Nitro-general mailing list