Class: Mongrel2::Config
- Inherits:
-
Object
- Object
- Mongrel2::Config
- Extended by:
- Configurability, Loggability
- Includes:
- Constants
- Defined in:
- lib/mongrel2/config.rb
Overview
The base Mongrel2 database-backed configuration class. It’s a subclass of Sequel::Model, so you’ll first need to be familiar with Sequel (sequel.rubyforge.org/) and especially its Sequel::Model ORM.
You will also probably want to refer to the Sequel::Plugins documentation for the validation_helpers and subclasses plugins.
References
Defined Under Namespace
Modules: DSL Classes: Directory, Filter, Handler, Host, Log, Mimetype, Proxy, Route, Server, Setting, Statistic, XRequest
Constant Summary collapse
- CONFIG_DEFAULTS =
Configuration defaults
{ :configdb => Mongrel2::DEFAULT_CONFIG_URI, }
- DEFAULTS =
CONFIG_DEFAULTS
- CONFIG_SQL =
The Pathname of the SQL file used to create the config database
DATA_DIR + 'config.sql'
- MIMETYPES_SQL =
The Pathname of the SQL file used to add default mimetypes mappings to the config database
DATA_DIR + 'mimetypes.sql'
Constants included from Constants
Mongrel2::Constants::DATA_DIR, Mongrel2::Constants::DEFAULT_CONFIG_SCRIPT, Mongrel2::Constants::DEFAULT_CONFIG_URI, Mongrel2::Constants::DEFAULT_CONTROL_SOCKET, Mongrel2::Constants::MAX_BROADCAST_IDENTS
Class Method Summary collapse
-
.configure(config = nil) ⇒ Object
Configurability API – called when the configuration is loaded with the ‘mongrel2’ section of the config file if there is one.
-
.database_initialized? ⇒ Boolean
Returns
true
if the config database has been installed. -
.db=(newdb) ⇒ Object
Reset the database connection that all model objects will use to
newdb
, which should be a Sequel::Database. -
.dbname ⇒ Object
Return the name of the current config database, or nil if the current database is an in-memory one.
-
.in_memory_db ⇒ Object
Return a Sequel::Database for an in-memory database via the available SQLite library.
-
.init_database ⇒ Object
Initialize the currently-configured database (if it hasn’t been already).
-
.init_database! ⇒ Object
Initialize the currently-configured database, dropping any existing tables.
-
.load_config_schema ⇒ Object
Return the contents of the configuration schema SQL file.
-
.load_mimetypes_sql ⇒ Object
Return the contents of the mimetypes SQL file.
-
.log_action(what, why = nil, where = nil, how = nil) ⇒ Object
Log an entry to the commit log with the given
what
,why
,where
, andhow
values and return it after it’s saved. -
.mimetypes ⇒ Object
Return a Hash of current mimetypes from the config database keyed by extension.
-
.servers ⇒ Object
Return the Array of currently-configured servers in the config database as Mongrel2::Config::Server objects.
-
.settings ⇒ Object
Return a Hash of current settings from the config database.
-
.sqlite_adapter ⇒ Object
Return the name of the Sequel SQLite adapter to use.
Class Method Details
.configure(config = nil) ⇒ Object
Configurability API – called when the configuration is loaded with the ‘mongrel2’ section of the config file if there is one. This method can also be used without Configurability by passing an object that can be merged with Mongrel2::Config::CONFIG_DEFAULTS.
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/mongrel2/config.rb', line 117 def self::configure( config=nil ) return unless config config = CONFIG_DEFAULTS.merge( config ) if dbspec = config[ :configdb ] # Assume it's a path to a sqlite database if it doesn't have a schema dbspec = "%s://%s" % [ self.sqlite_adapter, dbspec ] unless dbspec.include?( ':' ) self.db = Sequel.connect( dbspec ) end end |
.database_initialized? ⇒ Boolean
Returns true
if the config database has been installed. This currently only checks to see if the ‘server’ table exists for the sake of speed.
193 194 195 196 197 |
# File 'lib/mongrel2/config.rb', line 193 def self::database_initialized? return self.without_sql_logging do self.db.table_exists?( :server ) end end |
.db=(newdb) ⇒ Object
Reset the database connection that all model objects will use to newdb
, which should be a Sequel::Database.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/mongrel2/config.rb', line 133 def self::db=( newdb ) @db = newdb if @dataset Loggability.for_logger( self ).with_level( :fatal ) do set_dataset( newdb.dataset.clone(@dataset.opts) ) end end if self == Mongrel2::Config newdb.logger = Loggability[ Mongrel2 ].proxy_for( newdb ) newdb.sql_log_level = :debug self.descendents.each do |subclass| self.log.debug "Resetting database connection for %p to: %p (%#16x)" % [ subclass, newdb, newdb.object_id * 2 ] subclass.db = newdb end end end |
.dbname ⇒ Object
Return the name of the current config database, or nil if the current database is an in-memory one.
225 226 227 228 229 230 231 232 233 |
# File 'lib/mongrel2/config.rb', line 225 def self::dbname if self.db.opts[:database] return self.db.opts[:database] elsif self.db.uri return URI( self.db.uri ) else return nil end end |
.in_memory_db ⇒ Object
Return a Sequel::Database for an in-memory database via the available SQLite library
108 109 110 |
# File 'lib/mongrel2/config.rb', line 108 def self::in_memory_db return Sequel.connect( adapter: self.sqlite_adapter ) end |
.init_database ⇒ Object
Initialize the currently-configured database (if it hasn’t been already)
201 202 203 204 |
# File 'lib/mongrel2/config.rb', line 201 def self::init_database return if self.database_initialized? return self.init_database! end |
.init_database! ⇒ Object
Initialize the currently-configured database, dropping any existing tables.
208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/mongrel2/config.rb', line 208 def self::init_database! sql = self.load_config_schema mimetypes_sql = self.load_mimetypes_sql self.log.warn "Installing config schema." self.db.execute_ddl( sql ) self.db.run( mimetypes_sql ) # Force the associations to reset self.db = db self.log_action( "Initialized the config database." ) end |
.load_config_schema ⇒ Object
Return the contents of the configuration schema SQL file.
180 181 182 |
# File 'lib/mongrel2/config.rb', line 180 def self::load_config_schema return CONFIG_SQL.read end |
.load_mimetypes_sql ⇒ Object
Return the contents of the mimetypes SQL file.
186 187 188 |
# File 'lib/mongrel2/config.rb', line 186 def self::load_mimetypes_sql return MIMETYPES_SQL.read end |
.log_action(what, why = nil, where = nil, how = nil) ⇒ Object
Log an entry to the commit log with the given what
, why
, where
, and how
values and return it after it’s saved.
238 239 240 |
# File 'lib/mongrel2/config.rb', line 238 def self::log_action( what, why=nil, where=nil, how=nil ) Mongrel2::Config::Log.log_action( what, why, where, how ) end |
.mimetypes ⇒ Object
Return a Hash of current mimetypes from the config database keyed by extension.
170 171 172 173 174 175 176 |
# File 'lib/mongrel2/config.rb', line 170 def self::mimetypes unless @mimetypes @mimetypes = Mongrel2::Config::Mimetype.to_hash( :extension, :mimetype ) @mimetypes.freeze end return @mimetypes end |
.servers ⇒ Object
Return the Array of currently-configured servers in the config database as Mongrel2::Config::Server objects.
156 157 158 |
# File 'lib/mongrel2/config.rb', line 156 def self::servers return Mongrel2::Config::Server.all end |
.settings ⇒ Object
Return a Hash of current settings from the config database. The keys are converted to Symbols.
163 164 165 166 |
# File 'lib/mongrel2/config.rb', line 163 def self::settings setting_hash = Mongrel2::Config::Setting.to_hash( :key, :value ) return Mongrel2::Table.new( setting_hash ) end |
.sqlite_adapter ⇒ Object
Return the name of the Sequel SQLite adapter to use. If the amalgalite library is available, this will return ‘amalgalite’, else it returns ‘sqlite’.
98 99 100 101 102 103 104 |
# File 'lib/mongrel2/config.rb', line 98 def self::sqlite_adapter if defined?( ::Amalgalite ) return 'amalgalite' else return 'sqlite' end end |