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 93
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 113
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 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
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 101
def all_settings
  @settings.values.sort_by(&:key)
end
define_setting(key, default=nil, description=nil) 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.

@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
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 146
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 173
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 167
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 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
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 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
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 139
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 107
def setting(key)
  @settings[key]
end
to_h() click to toggle source
# File lib/middleman-core/configuration.rb, line 185
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 193
def to_s
  to_h.inspect
end