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)

Returns:
  • (Object) -
def [](key)
  setting = @settings[key]
  setting ? setting.value : nil
end

def []=(key, val)

Parameters:
  • val (Object) --
  • key (Symbol) --
def []=(key, val)
  setting = @settings[key] || define_setting(key)
  setting.value = val
end

def all_settings

Returns:
  • (Array) -
def all_settings
  @settings.values.sort_by(&:key)
end

def define_setting(key, default=nil, description=nil)

Returns:
  • (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.has_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)

Returns:
  • (Boolean) -

Parameters:
  • key (Symbol) --
def defines_setting?(key)
  @settings.has_key?(key)
end

def dup

Deep duplicate of the configuration manager
def dup
  ConfigurationManager.new.tap {|c| c.load_settings(self.all_settings) }
end

def finalize!

mode and no new settings may be defined.
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)

Load in a list of 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)

Allow configuration settings to be read and written via methods
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)

Needed so that method_missing makes sense
def respond_to?(method, include_private = false)
  super || defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?($1))
end

def setting(key)

Returns:
  • (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