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
Source
# 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
Source
# File lib/middleman-core/configuration.rb, line 28 def [](key) setting_obj = setting(key) setting_obj ? setting_obj.value : nil end
Get the value of a setting by key. Returns nil if there is no such setting. @return [Object]
Source
# File lib/middleman-core/configuration.rb, line 36 def []=(key, val) setting_obj = setting(key) || define_setting(key) setting_obj.value = val end
Set the value of a setting by key. Creates the setting if it doesn’t exist. @param [Symbol] key @param [Object] val
Source
# File lib/middleman-core/configuration.rb, line 16 def all_settings @settings.values.sort_by(&:key) end
Get all settings, sorted by key, as ConfigSetting
objects. @return [Array<ConfigSetting>]
Source
# 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
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]
Source
# File lib/middleman-core/configuration.rb, line 60 def defines_setting?(key) @settings.key?(key) end
Does this configuration manager know about the setting identified by key? @param [Symbol] key @return [Boolean]
Source
# File lib/middleman-core/configuration.rb, line 90 def dup ConfigurationManager.new.tap { |c| c.load_settings(all_settings) } end
Deep duplicate of the configuration manager
Source
# File lib/middleman-core/configuration.rb, line 84 def finalize! @finalized = true self end
Switch the configuration manager is finalized, it switches to read-only mode and no new settings may be defined.
Source
# 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
Load in a list of settings
Source
# 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
Allow configuration settings to be read and written via methods
Source
# 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
Needed so that method_missing
makes sense
Source
# File lib/middleman-core/configuration.rb, line 22 def setting(key) @settings[key] end
Get a full ConfigSetting
object for the setting with the give key. @return [ConfigSetting]
Source
# File lib/middleman-core/configuration.rb, line 102 def to_h hash = {} @settings.each do |key, setting| hash[key] = setting.value end hash end