Tim Pease
2/4/2007 4:24:00 PM
On 2/3/07, Trans <transfire@gmail.com> wrote:
>
>
> On Feb 3, 4:38 pm, "Tim Pease" <tim.pe...@gmail.com> wrote:
> > I'm working on Ruby program that will have a resource directory for
> > storing configuration, logging information, etc. I've used the
> > __END__ and DATA trick in my main ruby program to store some sane
> > defaults for the resources directory if this is the first time the
> > program has been run by a user.
> >
> > #!/usr/bin/env ruby
> >
> > require 'mylib'
> >
> > unless File.exist?(ENV['HOME'] + '.myrc')
> > File.open(ENV['HOME'] + '.myrc/defaults', 'w') do |fd|
> > fd.write DATA.readlines
> > end
> > end
> >
> > # use defaults here
> >
> > __END__
> > hash_key_1 : 1
> > hash_key_2 : 2
> > etc : and some more
> >
> > This works very well when my application is run directly. But when
> > installed via gems a new ruby script is created that loads my
> > executable script :( This causes the __END__ keyword in my ruby
> > script to stop working, and the DATA constant is not set.
> >
> > Is there a way to tell the gem installer "Hey, quit being so smart and
> > just install my executable file without wrappering it with your own
> > ruby script".
>
> Something like:
>
> File.read(__FILE__).split("__END__").last
>
> But why not store it in a separate config file?
>
I'm trying to be clever in the way I bootstrap this config file into
existence. Using __END__ and DATA seemed very Rubyish and clever.
Alas that gems are smarter than I am.
I just dumped it into a here doc in the file. Just as effective.
There is a way to tell gem not to create a wrapper, but the user has
to do it when they install the gem ...
gem install --no-wrapper mygem
However, gem is not honoring the executable bit in the file permission
:/ So the symbolic link to my executable still does not work because
the executable is no longer executable <sigh>.
TwP