This sort of functionality comes with Rails Engines. Check it out, it's pretty similar.
-jeff On 4/3/06, Pete Yandell <[EMAIL PROTECTED]> wrote: > A lot of the built-in Rails classes have configuration options that > can be set in environment.rb, but there doesn't seem to be any > standard way of doing the same thing for your own classes. The > following are my initial thoughts on solving this, some simple code, > and a few related questions. > > Let's say I have a model called MyModel. In MyModel, I'd like to be > able to do something like this: > > class MyModel > include Configurable > > config_attr :example_attribute, "Here's a default value" > > def my_method > p config.example_attribute > end > end > > Then, in environment.rb: > > MyModel.configure do > self.example_attribute = "Here's the configured value" > end > > There's code at the end of the e-mail to implement a simple version > of this. > > > The questions: > > 1) How do I work around reloadable classes? > > The old Rails approach to adding configuration was: > > class MyModel > @@example_attribute = "Here's a default value" > cattr_accessor :example_attribute > end > > and in environment.rb: > > MyModel.example_attribute = "Here's the configured value" > > This dies for model classes because MyModel is trashed and reloaded > on each request, overwriting the value set in environment.rb with the > default one after the first request. My code below suffers from the > same problem. > > Anyone got any ideas on neat ways to work around this? I can think of > a couple of approaches, but they're all really ugly. > > > 2) Would something along these lines be a possibility for inclusion > in a future version of Rails? I know it's far from being rocket > science, but with the proliferation of plugins, engines, etc. it > would be nice to have a standard way that this is done, if only so > that you know where to look for configuration when using third-party > code. > > > 3) What do people think of the API approach I've suggested? I'm > trying to make it as simple as possible, not force you to manually > define a separate class or module just to hold configuration, but > still do strict config checking in environment.rb. > > > Cheers, > > Pete Yandell > > > module Configurable > def self.included(base) > base.class_eval do > @@config = Class.new unless defined?(@@config) > cattr_reader :config > end > > base.extend(ClassMethods) > end > > module ClassMethods > def config_attr(name, value) > config.cattr_accessor name > config.send("#{name.to_s}=".to_sym, value) > end > > def configure(&block) > block.bind(config).call > end > end > end > > _______________________________________________ > Rails-core mailing list > Rails-core@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails-core > -- Jeff Lindsay http://blogrium.com/ _______________________________________________ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core