[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Dir.bitbucket?

Daniel Berger

8/20/2006 4:34:00 AM

Hi all,

Occasionally I have to do something like this:

bitbucket = RUBY_PLATFORM.match('mswin') ? 'NUL' : '/dev/null'

How about a Dir.bitbucket method? Or Dir.null, or whatever you want to
call it.

I think the code, using pure Ruby, would look like this:

case RUBY_PLATFORM
when /mswin/i
'NUL'
when /amiga/i
'NIL:'
when /openvms/i
'NL:'
else
'/dev/null'
end

I based this on http://en.wikipedia.org/wiki...

Useful? If so, we could easily patch dir.c, though I'm not sure what
the best way to approach it would be, i.e. should we do platform checks
within the code or rely on constants set during the build phase?

Regards,

Dan







1 Answer

Luke A. Kanies

8/20/2006 5:11:00 AM

0

On Aug 19, 2006, at 11:34 PM, Daniel Berger wrote:

> Hi all,
>
> Occasionally I have to do something like this:
>
> bitbucket = RUBY_PLATFORM.match('mswin') ? 'NUL' : '/dev/null'
>
> How about a Dir.bitbucket method? Or Dir.null, or whatever you want
> to call it.

it's not quite the same thing, since it's not a part of the Ruby
core, but I've got a library, Facter[1], specifically meant to help
handle this kind of platform variety. This kind of simple code would
look like this:

Facter.add :bitbucket do
setcode do
case Facter.operatingsystem
when /mswin/i: 'NUL'
when /amiga/i: 'NIL'
when /openvms/i: 'NL:'
else
'/dev/null'
end
end
end

The reason the code is set separately is that, for more complicated
facts, you could have a separate resolution mechanism for every
platform:

Facter.add :bitbucket do
confine :operatingsystem => :mswin
setcode { "NUL" } # strings get executed as shell code, so you have
to use a block
end

Facter.add :bitbucket do
confine :operatingsystem => :amiga
setcode { "NIL" }
end
...

Any fact can be be confined based on other facts, so you could
confine a fact to work only on a given release of a specific platform
(e.g., Mac OS X seems to change the config file that stores the IP
configuration on every release).

The interface could probably be slimmed down some, but the basic idea
is there: Make it simple to get a fact on different platforms. It's
especially useful for things like domain names, which can often be
resolved multiple ways (/etc/resolv.conf, /bin/domainname, dns, /etc/
hosts, etc.)


1 - http://reducti.../proje...

--
Luke Kanies
http://m... | http://reducti... | 615-594-8199