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 93 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 113 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 rubocop:disable UselessSetterCall
# File lib/middleman-core/configuration.rb, line 122 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 101 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.
@param [Symbol] key @param [Object] default @param [String] description @return [ConfigSetting]
# File lib/middleman-core/configuration.rb, line 157 def define_setting(key, default=nil, description=nil) 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) end
Does this configuration manager know about the setting identified by key? @param [Symbol] key @return [Boolean]
# File lib/middleman-core/configuration.rb, line 146 def defines_setting?(key) @settings.key?(key) end
Deep duplicate of the configuration manager
# File lib/middleman-core/configuration.rb, line 173 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 167 def finalize! @finalized = true self end
Load in a list of settings
# File lib/middleman-core/configuration.rb, line 178 def load_settings(other_settings) other_settings.each do |setting| new_setting = define_setting(setting.key, setting.default, setting.description) 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 128 def method_missing(method, *args) if defines_setting?(method) && args.size == 0 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 139 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 107 def setting(key) @settings[key] end
# File lib/middleman-core/configuration.rb, line 185 def to_h hash = {} @settings.each do |key, setting| hash[key] = setting.value end hash end
# File lib/middleman-core/configuration.rb, line 193 def to_s to_h.inspect end