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.
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.
# File lib/mongrel2/config.rb, line 110
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
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.
# File lib/mongrel2/config.rb, line 171
def self::database_initialized?
return self.without_sql_logging do
self.db.table_exists?( :server )
end
end
Reset the database connection that all model objects will use to
newdb, which should be a Sequel::Database.
# File lib/mongrel2/config.rb, line 126
def self::db=( newdb )
self.without_sql_logging( newdb ) do
super
end
if self == Mongrel2::Config
self.log.debug "Resetting database connection for %d config classes to: %p" %
[ self.descendents.length, newdb ]
newdb.logger = Loggability[ Mongrel2 ].proxy_for( newdb )
newdb.sql_log_level = :debug
self.descendents.each {|subclass| subclass.db = newdb }
end
end
Return the name of the current config database, or nil if the current database is an in-memory one.
# File lib/mongrel2/config.rb, line 203
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
Return a Sequel::Database for an in-memory database via the available SQLite library
# File lib/mongrel2/config.rb, line 101
def self::in_memory_db
return Sequel.connect( adapter: self.sqlite_adapter )
end
Initialize the currently-configured database (if it hasn’t been already)
# File lib/mongrel2/config.rb, line 179
def self::init_database
return if self.database_initialized?
return self.init_database!
end
Initialize the currently-configured database, dropping any existing tables.
# File lib/mongrel2/config.rb, line 186
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
Return the contents of the configuration schema SQL file.
# File lib/mongrel2/config.rb, line 158
def self::load_config_schema
return CONFIG_SQL.read
end
Return the contents of the mimetypes SQL file.
# File lib/mongrel2/config.rb, line 164
def self::load_mimetypes_sql
return MIMETYPES_SQL.read
end
Log an entry to the commit log with the given
what, why, where, and
how values and return it after it's saved.
# File lib/mongrel2/config.rb, line 216
def self::log_action( what, why=nil, where=nil, how=nil )
Mongrel2::Config::Log.log_action( what, why, where, how )
end
Return the Array of currently-configured servers in the config database as Mongrel2::Config::Server objects.
# File lib/mongrel2/config.rb, line 144
def self::servers
return Mongrel2::Config::Server.all
end
Return a Hash of current settings from the config database. The keys are converted to Symbols.
# File lib/mongrel2/config.rb, line 151
def self::settings
setting_hash = Mongrel2::Config::Setting.to_hash( :key, :value )
return Mongrel2::Table.new( setting_hash )
end
Return the name of the Sequel SQLite adapter to use. If the amalgalite library is available, this will return ‘amalgalite’, else it returns ‘sqlite’.
# File lib/mongrel2/config.rb, line 91
def self::sqlite_adapter
if defined?( ::Amalgalite )
return 'amalgalite'
else
return 'sqlite'
end
end
Execute a block after removing all loggers from the current database handle, then restore them before returning.
# File lib/mongrel2/config.rb, line 228
def self::without_sql_logging( logged_db=nil )
logged_db ||= self.db
loggers_to_restore = logged_db.loggers.dup
logged_db.loggers.clear
yield
ensure
logged_db.loggers.replace( loggers_to_restore )
end