Class: Mongrel2::Config

Inherits:
Object
  • Object
show all
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

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

.dbnameObject

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_dbObject

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_databaseObject

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_schemaObject

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_sqlObject

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

.mimetypesObject

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

.serversObject

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

.settingsObject

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_adapterObject

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