Zev Blut
12/19/2006 6:35:00 AM
Hello,
This is mostly a repost of ruby-talk[229723] with some clarifications
and an appeal for ideas.
I have recently attempted to write a RubyGem for the Saikuro project.
Unfortunately, I have learned that there is a mismatch between how I
wrote Saikuro and how RubyGems expects executables to work.
I would like to know is are there any better or commonly followed ways
of writing executables that work with RubyGems and other installation
programs such as setup.rb ?
Below are the differences between how I wrote Saikuro and what
RubyGems does.
1)
Saikuro uses the "if __FILE__ =3D=3D $0" check before doing the
"application work". When RubyGems creates a new gemified saikuro
wrapper to call the real saikuro bin "$0" is the gemified saikuro and
not the real one. Thus, by default nothing happens.
For fun I cheated and commented out the "if __FILE__" check and
replaced it with "if true". Saikuro will work with this change, but I
then ran "saikuro -?" to get a usage message and found the next
problem:
2)
I was reading through the Programming Ruby book and found a part that
showed how to use rdoc to create usage messages. I figured this might
be better than my normal technique so I used it in Saikuro. This has
caused a number of problems actually.
* With the above cheat I get the gem message:
--
/usr/bin/saikuro: invalid option -- ?
This file was generated by RubyGems.
The application 'Saikuro' is installed as part of a gem, and this file
is here to facilitate running it.
--
Which is not the usage message I wanted.
My original goal was to keep Saikuro simple so that as a single file
nothing complicated was needed. But now I suppose that should change.
I am planning to move all logic above and "if __FILE__ =3D=3D $0" block
into a separate library file. Then add a require to this newly made
file and remove the "if __FILE__" check logic to make the insides of
the block automatically run.
Next I will stop using rdoc usage and simply put the usage message in
a method that outputs a String.
Does this sound like a good strategy?
Thanks,
Zev