How to maintain App config data?

I'm writing an app in Rails, but some modules need to work outside of Rails. In these classes, I'd like to have a common way to access configuration data. Two approaches I though of:

1. Use a Singleton class ala the Logger concept, and have
    a "conf" object floating around that can provide the
    "conf.root_dir" or whatever

2. Mixin a module that provides a conf() routine, so that
    classes would call conf('root_dir') / etc

Opinions? In the Perl world, I would use Config::Fast and attach a $self->{conf} hashref to my classes, which all point to a shared object.

Thanks,
Nate

Nate Wiger wrote:

I'm writing an app in Rails, but some modules need to work outside of
Rails. In these classes, I'd like to have a common way to access
configuration data. Two approaches I though of:

1. Use a Singleton class ala the Logger concept, and have
    a "conf" object floating around that can provide the
    "conf.root_dir" or whatever

2. Mixin a module that provides a conf() routine, so that
    classes would call conf('root_dir') / etc

The first option is most like the Perl solution. It's pretty
straightforward. Something along these lines might work for you,
though it's not a singleton class by design:

http://groups.google.com/group/comp.lang.ruby/msg/aba4124d4d16d6b0

Nate Wiger wrote:

I'm writing an app in Rails, but some modules need to work outside of Rails. In these classes, I'd like to have a common way to access configuration data. Two approaches I though of:

1. Use a Singleton class ala the Logger concept, and have
   a "conf" object floating around that can provide the
   "conf.root_dir" or whatever

2. Mixin a module that provides a conf() routine, so that
   classes would call conf('root_dir') / etc

Opinions? In the Perl world, I would use Config::Fast and attach a $self->{conf} hashref to my classes, which all point to a shared object.

This was developed for GUI (specifically FXRuby) apps, but would probably work with any kind of app:

http://raa.ruby-lang.org/project/preferences/

···

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

In IOWA apps, there is a method, Iowa.config, that has a reference to the config object for the application.

This lets that config object be accessed by any code anywhere, similar to your option #1.

Kirk Haines

···

On Wed, 25 Oct 2006, Nate Wiger wrote:

I'm writing an app in Rails, but some modules need to work outside of Rails. In these classes, I'd like to have a common way to access configuration data. Two approaches I though of:

1. Use a Singleton class ala the Logger concept, and have
  a "conf" object floating around that can provide the
  "conf.root_dir" or whatever

2. Mixin a module that provides a conf() routine, so that
  classes would call conf('root_dir') / etc

poopdeville@gmail.com wrote:

Nate Wiger wrote:

I'm writing an app in Rails, but some modules need to work outside of
Rails. In these classes, I'd like to have a common way to access
configuration data. Two approaches I though of:

1. Use a Singleton class ala the Logger concept, and have
    a "conf" object floating around that can provide the
    "conf.root_dir" or whatever

The first option is most like the Perl solution. It's pretty
straightforward. Something along these lines might work for you,
though it's not a singleton class by design:

http://groups.google.com/group/comp.lang.ruby/msg/aba4124d4d16d6b0

Awesome, that looks great. I think I'll tweak it into a Singleton w/o the global vars (just method accessors). I'll post a follow-up if I come up with something semi-portable.

-Nate

Nate Wiger wrote:

···

poopdeville@gmail.com wrote:
> Nate Wiger wrote:
>> I'm writing an app in Rails, but some modules need to work outside of
>> Rails. In these classes, I'd like to have a common way to access
>> configuration data. Two approaches I though of:
>>
>> 1. Use a Singleton class ala the Logger concept, and have
>> a "conf" object floating around that can provide the
>> "conf.root_dir" or whatever
>
> The first option is most like the Perl solution. It's pretty
> straightforward. Something along these lines might work for you,
> though it's not a singleton class by design:
>
> http://groups.google.com/group/comp.lang.ruby/msg/aba4124d4d16d6b0

Awesome, that looks great. I think I'll tweak it into a Singleton w/o
the global vars (just method accessors). I'll post a follow-up if I come
up with something semi-portable.

Like the comments in there say, we're deprecating the global vars
usage. It's only in there for backwards compatibility until we weed
them all out and start using the config object everywhere.

'cid 'ooh