Module: Settings::ClassLevel
- Defined in:
- lib/iron/settings/class_level.rb
Overview
Class-level settings can be either static (file/code-based) or dynamic (db-based) depending on your needs. Static settings will work well for gem configuration, command-line tools, etc. while dynamic settings might be useful for a CMS or other web-based tool that needs to support user editing of settings values on-the-fly.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#class_settings(options = {}, &block) ⇒ Object
Define the class-level settings for a given class.
Instance Method Details
#class_settings(options = {}, &block) ⇒ Object
Define the class-level settings for a given class. Supported options include:
:store => :static | :dynamic - how to load and (potentially) save settings values, defaults to :static
Static mode options:
:file => '/path/to/file' - provides a single file to load when using the static settings store
:files => ['/path1', '/path2'] - same as :file, but allows multiple files to be loaded in order
Reload timing (primarily intended for use with :db mode):
:reload => <when> - when and if to reload from file/db, with <when> as one of:
true - on every access to #settings
false - only do initial load, never reload
'/path/to/file' - file to test for modified timestamp changes, reload if file timestamp is after latest load
<num seconds> - after N seconds since last load
lambda { <true to reload> } - custom lambda to execute to check for reload, reloads on returned true value
Any options passed on subsequent calls to #class_settings will be ignored.
A passed block will be evaluated in the context of a Settings::Builder instance that can be used to define groups and entries.
Example:
class Site
class_settings(:file => File.join(RAILS_ROOT, 'config/site-settings.rb')) do
string('name')
group('security') do
bool('force-ssl', false)
string('secret-key')
end
end
end
The above would set up Site.settings.name, Site.settings.security.force_ssl, etc, with an optional settings file located at $RAILS_ROOT/config/site-settings.rb
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/iron/settings/class_level.rb', line 82 def class_settings( = {}, &block) unless @settings_class_root # Set up our root group and options @settings_class_root = Settings::Root.new() = { :store => :static }.merge() # Set our default reload timing if [:reload].nil? if [:store] == :static # Static settings generally don't need reloading [:reload] = false else # For dynamic, db-backed settings at the class level, we use # file modified reload timing by default [:reload] = Settings.(self.name) end end # Save off our options @settings_class_options = # Add this class to the settings registry Settings.classes << self # Add in support for settings for this class extend ClassMethods # Create our value store class_settings_reset! end # Create a builder and do the right thing based on passed args builder = Settings::Builder.new(@settings_class_root) builder.define(&block) if block builder end |