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

new() click to toggle 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

[](key) click to toggle source

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
[]=(key, val) click to toggle source

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
all_settings() click to toggle source

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_setting(key, default=nil, description=nil, options={}) click to toggle source

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
defines_setting?(key) click to toggle source

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
dup() click to toggle source

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
finalize!() click to toggle source

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_settings(other_settings) click to toggle source

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
method_missing(method, *args) click to toggle source

Allow configuration settings to be read and written via methods

Calls superclass method
# 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
respond_to?(method, include_private=false) click to toggle source

Needed so that method_missing makes sense

Calls superclass method
# 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
setting(key) click to toggle source

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
to_h() click to toggle 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
to_s() click to toggle source
# File lib/middleman-core/configuration.rb, line 110
def to_s
  to_h.inspect
end