class Middleman::Configuration::ConfigurationManager
A class that manages a collection of documented settings. Can be used by extensions as well as the main Middleman
application. Extensions
should probably finalize their instance after defining all the settings they want to expose.
Public Class Methods
# File lib/middleman-core/configuration.rb, line 8 def initialize # A hash from setting key to ConfigSetting instance. @settings = {} @finalized = false end
Public Instance Methods
Get the value of a setting by key. Returns nil if there is no such setting. @return [Object]
# File lib/middleman-core/configuration.rb, line 28 def [](key) setting_obj = setting(key) setting_obj ? setting_obj.value : nil end
Set the value of a setting by key. Creates the setting if it doesn't exist. @param [Symbol] key @param [Object] val
# File lib/middleman-core/configuration.rb, line 36 def []=(key, val) setting_obj = setting(key) || define_setting(key) setting_obj.value = val end
Get all settings, sorted by key, as ConfigSetting
objects. @return [Array<ConfigSetting>]
# File lib/middleman-core/configuration.rb, line 16 def all_settings @settings.values.sort_by(&:key) end
Define a new setting, with optional default and user-friendly description. Once the configuration manager is finalized, no new settings may be defined.
@example
config.define_setting :compress, false, 'Whether to compress the output'
@param [Symbol] key The name of the option @param [Object] default The default value for the option @param [String] description A human-readable description of what the option does @param [Hash] options Additional options. @return [ConfigSetting]
# File lib/middleman-core/configuration.rb, line 74 def define_setting(key, default=nil, description=nil, options={}) raise "Setting #{key} doesn't exist" if @finalized raise "Setting #{key} already defined" if @settings.key?(key) raise 'Setting key must be a Symbol' unless key.is_a? Symbol @settings[key] = ConfigSetting.new(key, default, description, options) end
Does this configuration manager know about the setting identified by key? @param [Symbol] key @return [Boolean]
# File lib/middleman-core/configuration.rb, line 60 def defines_setting?(key) @settings.key?(key) end
Deep duplicate of the configuration manager
# File lib/middleman-core/configuration.rb, line 90 def dup ConfigurationManager.new.tap { |c| c.load_settings(all_settings) } end
Switch the configuration manager is finalized, it switches to read-only mode and no new settings may be defined.
# File lib/middleman-core/configuration.rb, line 84 def finalize! @finalized = true self end
Load in a list of settings
# File lib/middleman-core/configuration.rb, line 95 def load_settings(other_settings) other_settings.each do |setting| new_setting = define_setting(setting.key, setting.default, setting.description, setting.options) new_setting.value = setting.value if setting.value_set? end end
Allow configuration settings to be read and written via methods
# File lib/middleman-core/configuration.rb, line 42 def method_missing(method, *args) if defines_setting?(method) && args.empty? self[method] elsif method.to_s =~ /^(\w+)=$/ && args.size == 1 self[$1.to_sym] = args[0] else super end end
Needed so that method_missing
makes sense
# File lib/middleman-core/configuration.rb, line 53 def respond_to?(method, include_private=false) super || defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?($1)) end
Get a full ConfigSetting
object for the setting with the give key. @return [ConfigSetting]
# File lib/middleman-core/configuration.rb, line 22 def setting(key) @settings[key] end
# File lib/middleman-core/configuration.rb, line 102 def to_h hash = {} @settings.each do |key, setting| hash[key] = setting.value end hash end
# File lib/middleman-core/configuration.rb, line 110 def to_s to_h.inspect end