Class: Middleman::Configuration::ConfigurationManager
- Inherits:
-
Object
- Object
- Middleman::Configuration::ConfigurationManager
- Defined in:
- middleman-core/lib/middleman-core/configuration.rb
Overview
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.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Get the value of a setting by key.
-
#[]=(key, val) ⇒ Object
Set the value of a setting by key.
-
#all_settings ⇒ Array<ConfigSetting>
Get all settings, sorted by key, as ConfigSetting objects.
-
#define_setting(key, default = nil, description = nil, options_hash = ::Middleman::EMPTY_HASH) ⇒ ConfigSetting
Define a new setting, with optional default and user-friendly description.
-
#defines_setting?(key) ⇒ Boolean
Does this configuration manager know about the setting identified by key?.
-
#dup ⇒ Object
Deep duplicate of the configuration manager.
-
#finalize! ⇒ Object
Switch the configuration manager is finalized, it switches to read-only mode and no new settings may be defined.
-
#initialize ⇒ ConfigurationManager
constructor
A new instance of ConfigurationManager.
-
#load_settings(other_settings) ⇒ Object
Load in a list of settings.
-
#method_missing(method, *args) ⇒ Object
Allow configuration settings to be read and written via methods.
-
#respond_to_missing?(method, include_private = false) ⇒ Boolean
Needed so that method_missing makes sense.
-
#setting(key) ⇒ ConfigSetting
Get a full ConfigSetting object for the setting with the give key.
- #to_h ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize ⇒ ConfigurationManager
Returns a new instance of ConfigurationManager.
12 13 14 15 16 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 12 def initialize # A hash from setting key to ConfigSetting instance. @settings = {} @finalized = false end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
Allow configuration settings to be read and written via methods
46 47 48 49 50 51 52 53 54 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 46 def method_missing(method, *args) if defines_setting?(method) && args.empty? self[method] elsif method.to_s =~ /^(\w+)=$/ && args.size == 1 self[Regexp.last_match(1).to_sym] = args[0] else super end end |
Instance Method Details
#[](key) ⇒ Object
Get the value of a setting by key. Returns nil if there is no such setting.
32 33 34 35 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 32 def [](key) setting_obj = setting(key) setting_obj ? setting_obj.value : nil end |
#[]=(key, val) ⇒ Object
Set the value of a setting by key. Creates the setting if it doesn't exist.
40 41 42 43 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 40 def []=(key, val) setting_obj = setting(key) || define_setting(key) setting_obj.value = val end |
#all_settings ⇒ Array<ConfigSetting>
Get all settings, sorted by key, as ConfigSetting objects.
20 21 22 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 20 def all_settings @settings.values.sort_by(&:key) end |
#define_setting(key, default = nil, description = nil, options_hash = ::Middleman::EMPTY_HASH) ⇒ ConfigSetting
Define a new setting, with optional default and user-friendly description. Once the configuration manager is finalized, no new settings may be defined.
78 79 80 81 82 83 84 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 78 def define_setting(key, default = nil, description = nil, = ::Middleman::EMPTY_HASH) 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) ⇒ Boolean
Does this configuration manager know about the setting identified by key?
64 65 66 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 64 def defines_setting?(key) @settings.key?(key) end |
#dup ⇒ Object
Deep duplicate of the configuration manager
94 95 96 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 94 def dup ConfigurationManager.new.tap { |c| c.load_settings(all_settings) } end |
#finalize! ⇒ Object
Switch the configuration manager is finalized, it switches to read-only mode and no new settings may be defined.
88 89 90 91 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 88 def finalize! @finalized = true self end |
#load_settings(other_settings) ⇒ Object
Load in a list of settings
99 100 101 102 103 104 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 99 def load_settings(other_settings) other_settings.each do |setting| new_setting = define_setting(setting.key, setting.default, setting.description, setting.) new_setting.value = setting.value if setting.value_set? end end |
#respond_to_missing?(method, include_private = false) ⇒ Boolean
Needed so that method_missing makes sense
57 58 59 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 57 def respond_to_missing?(method, include_private = false) defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?(Regexp.last_match(1))) || super end |
#setting(key) ⇒ ConfigSetting
Get a full ConfigSetting object for the setting with the give key.
26 27 28 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 26 def setting(key) @settings[key] end |
#to_h ⇒ Object
106 107 108 109 110 111 112 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 106 def to_h hash = {} @settings.each do |key, setting| hash[key] = setting.value end hash end |
#to_s ⇒ Object
114 115 116 |
# File 'middleman-core/lib/middleman-core/configuration.rb', line 114 def to_s to_h.inspect end |