Cross-platform Home Directory?

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

Thanks,
T.

What do you mean by "cross-platform home directory"? How is this directory
accessed by the user, Samba, NTFS, some other means?

···

On 9/13/07, Trans <transfire@gmail.com> wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

Thanks,
T.

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

Trans wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

This is one way of guessing:

case RUBY_PLATFORM
when /win32/
   ENV['APPDATA'] ||
   ENV['USERPROFILE'] ||
   ENV['HOME']

else
   ENV['HOME'] ||
   File.expand_path('~')
end

Typical values:

ENV['APPDATA'] == "C:\Documents and Settings\username\Application Data"
ENV['USERPROFILE'] == "C:\Documents and Settings\username"

(This is from my 'preferences' lib.)

I have no idea what is right on OS X. I'm sure someone has thought this through in more detail...

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Hi,

At Fri, 14 Sep 2007 04:19:04 +0900,
Trans wrote in [ruby-talk:268970]:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

There is no static value.

FYI, in 1.9, if ENV["HOME"] isn't set, it will be set to
1) ENV["HOMEDRIVE"] + ENV["HOMEPATH"]
2) ENV["USERPROFILE"] or
3) "Personal" special folder
in the above order.

···

--
Nobu Nakada

Trans a écrit :

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

Thanks,
T.
  

This is how I do this :
home_directory = Dir.chdir {|path| path}

The doc for Dir.chdir says that without argument, this method looks for environnement variables HOME or LOGDIR. And with a block, the directory is changed only inside the block, and restored right after.

···

--
Olivier Renaud

Trans wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory

Everyone's helped you with ways to find the home directory, but on Windows
this is not normally the right place to store session data. That's what
Application Data is for. Make a directory under there for your application.
Configuration data (user-modifiable but less frequently-changing) may be
stored in the registry.

The Windows certification documents describe where you should put stuff.

Clifford Heath.

There's much more to this then I ever imagined. Thanks for all the
answers, certainly enough to here to go on. Thanks.

T.

P.S. Seems like Launchy could use this functionality --maybe merge the
Platform gem to make a strong single lib rather than two separate libs
-- just a thought.

I probably meant NFS rather than NTFS

···

On 9/13/07, Glen Holcomb <damnbigman@gmail.com> wrote:

On 9/13/07, Trans <transfire@gmail.com> wrote:
>
> I have a little app that needs to store session data. I assume the
> best place to store it is in one's home directory, but I need this app
> to be cross-platform. I glanced through all rbconfig.rb's
> Config::CONFIG settings but did not see anything for it. How does one
> access a cross-platform home directory?
>
> Thanks,
> T.
>
>
>
What do you mean by "cross-platform home directory"? How is this
directory accessed by the user, Samba, NTFS, some other means?

--
"Hey brother Christian with your high and mighty errand, Your actions
speak so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

<snip>

I think the appdata directory is where you want it for MS Windows. You
can use win32-dir, since the environment variable may not be defined:

when /mswin/
   require 'win32/dir'
   Dir::APPDATA

Regards,

Dan

···

On Sep 13, 1:37 pm, Joel VanderWerf <vj...@path.berkeley.edu> wrote:

Trans wrote:
> I have a little app that needs to store session data. I assume the
> best place to store it is in one's home directory, but I need this app
> to be cross-platform. I glanced through all rbconfig.rb's
> Config::CONFIG settings but did not see anything for it. How does one
> access a cross-platform home directory?

This is one way of guessing:

ENV[ 'HOME' ]

for example my "home" is :

/Users/yt

(never tried the File.expand_path('~') ) BUT on Mac OS X shell ~ expand
to home.

also i worry about the way win* representent pathes with \

does that means that, in ruby, there is no platform-independant way to
representant pathes, as, for example in Java ?

···

Joel VanderWerf <vjoel@path.berkeley.edu> wrote:

I have no idea what is right on OS X.

--
La politique est l'art d'empécher les gens
de se méler de ce qui les regarde.
Paul Valéry

case RUBY_PLATFORM
when /win32/
   ENV['APPDATA'] ||
   ENV['USERPROFILE'] ||
   ENV['HOME']

As HOME usually isn't set on windows, the existence of the variable
could indicate that the user would like to override the windows
default. I would thus check for HOME first.

Also, under cygwin ruby all three variables are set, but APPDATA and
USERPROFILE are "inherited" from the windows environment and are by
default set as Windows path while HOME usually is set as cygwin path.
In certain situations, this could cause certain difficulties, eg when
calling external programs.

It seems the trick with chdir doesn't work when neither HOME nor
LOGDIR is set -- as it is usually the case under Windows, I think.

From: Clifford Heath [mailto:no@spam.please.net]
Sent: Saturday, September 15, 2007 6:25 AM
To: ruby-talk ML
Subject: Re: Cross-platform Home Directory?

Everyone's helped you with ways to find the home directory, but on
Windows this is not normally the right place to store session data.
That's what Application Data is for. Make a directory under there for your
application. Configuration data (user-modifiable but less

frequently-changing)

may be stored in the registry.

ENV["APPDATA"] produces the Application Data directory. Best to use that:

ENV["APPDATA"]

=> "C:\\Users\\CynicalRyan\\AppData\\Roaming"

exit

Since it is in a different location from Windows XP in Vista (the above path
is a Vista path).

The Windows certification documents describe where you should put
stuff.

Are these available on MSDN?

···

-----Original Message-----

--
Phillip Gawlowski

Olivier Renaud wrote:

Trans a écrit :

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

Thanks,
T.

This is how I do this :
home_directory = Dir.chdir {|path| path}

The doc for Dir.chdir says that without argument, this method looks for
environnement variables HOME or LOGDIR. And with a block, the directory
is changed only inside the block, and restored right after.

--
Olivier Renaud

At first I would just check ENV to see if HOME or USERPROFILE was set. Then
some one told me about the Platform gem :slight_smile:

You know, the OOP thing gives me a nice idea of how to use that hehe.

TerryP.

···

--
    
Email and shopping with the feelgood factor!
55% of income to good causes. http://www.ippimail.com

Joel VanderWerf wrote:

Trans wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

This is one way of guessing:

case RUBY_PLATFORM
when /win32/
   ENV['APPDATA'] ||
   ENV['USERPROFILE'] ||
   ENV['HOME']

else
   ENV['HOME'] ||
   File.expand_path('~')
end

Typical values:

ENV['APPDATA'] == "C:\Documents and Settings\username\Application Data"
ENV['USERPROFILE'] == "C:\Documents and Settings\username"

(This is from my 'preferences' lib.)

I have no idea what is right on OS X. I'm sure someone has thought this
through in more detail...

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

I think Mac OS X should have the traditional unix variables set, like ${HOME}
and ${EDITOR} but I don't own a mac to find out :'(.

···

--
    
Email and shopping with the feelgood factor!
55% of income to good causes. http://www.ippimail.com

Joel VanderWerf wrote:

Trans wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

This is one way of guessing:

case RUBY_PLATFORM
when /win32/
   ENV['APPDATA'] ||
   ENV['USERPROFILE'] ||
   ENV['HOME']

else
   ENV['HOME'] ||
   File.expand_path('~')
end

Typical values:

ENV['APPDATA'] == "C:\Documents and Settings\username\Application Data"
ENV['USERPROFILE'] == "C:\Documents and Settings\username"

(This is from my 'preferences' lib.)

I have no idea what is right on OS X. I'm sure someone has thought this
through in more detail...

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

I think Mac OS X should have the traditional unix variables set, like ${HOME}
and ${EDITOR} but I don't own a mac to find out :'(.

···

--
    
Email and shopping with the feelgood factor!
55% of income to good causes. http://www.ippimail.com

Joel VanderWerf wrote:

Trans wrote:

I have a little app that needs to store session data. I assume the
best place to store it is in one's home directory, but I need this app
to be cross-platform. I glanced through all rbconfig.rb's
Config::CONFIG settings but did not see anything for it. How does one
access a cross-platform home directory?

This is one way of guessing:

case RUBY_PLATFORM
when /win32/
   ENV['APPDATA'] ||
   ENV['USERPROFILE'] ||
   ENV['HOME']

else
   ENV['HOME'] ||
   File.expand_path('~')
end

Typical values:

ENV['APPDATA'] == "C:\Documents and Settings\username\Application Data"
ENV['USERPROFILE'] == "C:\Documents and Settings\username"

(This is from my 'preferences' lib.)

I have no idea what is right on OS X. I'm sure someone has thought this
through in more detail...

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

I think Mac OS X should have the traditional unix variables set, like ${HOME}
and ${EDITOR} but I don't own a mac to find out :'(.

···

--
    
Email and shopping with the feelgood factor!
55% of income to good causes. http://www.ippimail.com

>
> >
> > I have a little app that needs to store session data. I assume the
> > best place to store it is in one's home directory, but I need this app
> > to be cross-platform. I glanced through all rbconfig.rb's
> > Config::CONFIG settings but did not see anything for it. How does one
> > access a cross-platform home directory?
> >
> > Thanks,
> > T.

Rubygems has a method for finding this:

C:\>irb -rubygems

Gem.user_home

=> "C:\\Documents and Settings\\gthiesfeld"

···

On 9/13/07, Glen Holcomb <damnbigman@gmail.com> wrote:

On 9/13/07, Glen Holcomb <damnbigman@gmail.com> wrote:
> On 9/13/07, Trans <transfire@gmail.com> wrote:

From: "Une Bév" "ue" [mailto:unbewusst.sein@wortanschahung.com.invalid]
Sent: Friday, September 14, 2007 7:20 AM
To: ruby-talk ML
Subject: Re: Cross-platform Home Directory?

does that means that, in ruby, there is no platform-independant way to
representant pathes, as, for example in Java ?

8:31:09.25 C:\Users\CynicalRyan

ls gems.txt

gems.txt

8:31:14.01 C:\Users\CynicalRyan

irb --simple-prompt

File.open("c:/Users/CynicalRyan/gems.txt")

=> #<File:c:/Users/CynicalRyan/gems.txt>

ruby -v

ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

ver

Microsoft Windows [Version 6.0.6000]

···

-----Original Message-----

--
Phillip Gawlowski

It does. You don't even have to own one to find out. You can find it out in Unix in a Nutshell.
Those variables are set in any one of the several possible files that configure the shell. OS X uses Bash as the default shell.
(older versions used Tcsh as the default shell, but it's similar enough.)
It's as Unix as any *nix

···

On Sep 15, 2007, at 2:47 AM, Terry Poulin wrote:

I think Mac OS X should have the traditional unix variables set, like ${HOME}
and ${EDITOR} but I don't own a mac to find out :'(.