class Middleman::Configuration::ConfigurationManager
after defining all the settings they want to expose.
application. Extensions should probably finalize their instance
Can be used by extensions as well as the main Middleman
A class that manages a collection of documented settings.
def [](key)
-
(Object)
-
def [](key) setting_obj = setting(key) setting_obj ? setting_obj.value : nil end
def []=(key, val)
-
val
(Object
) -- -
key
(Symbol
) --
def []=(key, val) setting_obj = setting(key) || define_setting(key) setting_obj.value = val end
def all_settings
-
(Array
-)
def all_settings @settings.values.sort_by(&:key) end
def define_setting(key, default=nil, description=nil)
-
(ConfigSetting)
-
Parameters:
-
description
(String
) -- -
default
(Object
) -- -
key
(Symbol
) --
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
def defines_setting?(key)
-
(Boolean)
-
Parameters:
-
key
(Symbol
) --
def defines_setting?(key) @settings.key?(key) end
def dup
def dup ConfigurationManager.new.tap { |c| c.load_settings(all_settings) } end
def finalize!
Switch the configuration manager is finalized, it switches to read-only
def finalize! @finalized = true self end
def initialize
def initialize # A hash from setting key to ConfigSetting instance. @settings = {} @finalized = false end
def load_settings(other_settings)
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
def method_missing(method, *args)
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
def respond_to?(method, include_private=false)
def respond_to?(method, include_private=false) super || defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?($1)) end
def setting(key)
-
(ConfigSetting)
-
def setting(key) @settings[key] end
def to_h
def to_h hash = {} @settings.each do |key, setting| hash[key] = setting.value end hash end
def to_s
def to_s to_h.inspect end