class Squire::Settings
Constants
- RESERVED
Public Class Methods
from_hash(hash, parent = nil)
click to toggle source
Loads new settings from provided hash
.
# File lib/squire/settings.rb, line 135 def self.from_hash(hash, parent = nil) result = Settings.new(parent) hash.each_pair do |key, value| if value.is_a? ::Hash value = from_hash(value, key) end result.set_value(key.to_sym, value) end result end
new(path = nil, parent = nil)
click to toggle source
Creates new settings with path
and parent
. For top level settings (usually namespace), the is no parent
or path
specified.
# File lib/squire/settings.rb, line 8 def initialize(path = nil, parent = nil) @path = path @table = ::Hash.new @parent = parent @children = ::Array.new end
Public Instance Methods
[](key)
click to toggle source
Access key
from table directly
# File lib/squire/settings.rb, line 129 def [](key) get_value(key) end
get_value(key, &block)
click to toggle source
Returns a value for key
from settings table. Yields value
of key
if block
provided.
Examples:¶ ↑
.key do |key| ... end # or .key do ... end
# File lib/squire/settings.rb, line 85 def get_value(key, &block) key = key.to_sym value = @table[key] if block_given? block.arity == 0 ? value.instance_eval(&block) : block.call(value) end value end
method_missing(method, *args, &block)
click to toggle source
Handles settting of values.
Examples¶ ↑
Setting a value:
.value = 2 .value 2
Getting a value:
.value # => 2
Checking a value:
.value? # => true
If block provided, it yields key
as parent.
.value do |value| ... end .value do ... end
# File lib/squire/settings.rb, line 38 def method_missing(method, *args, &block) _, key, type = *method.to_s.match(/(?<key>\w+)(?<type>[?=]{0,1})/) key = key.to_sym if block_given? if @table[key] settings = @table[key] else settings = Settings.new(@path ? "#{@path}.#{key}" : key, self) set_value(key, settings) @children << settings end get_value(key, &block) elsif args.count == 1 set_value(key, args.pop) elsif type == '?' !!get_value(key) else value = get_value(key) if value.nil? raise MissingSettingError.new("Missing setting '#{key}' in '#{@path}'.") end value end end
set_value(key, value)
click to toggle source
Sets a value
for key
# File lib/squire/settings.rb, line 98 def set_value(key, value) @table[key] = value define_key_accessor(key) end
to_hash()
click to toggle source
Dumps settings as hash.
# File lib/squire/settings.rb, line 106 def to_hash result = ::Hash.new @table.each do |key, value| if value.is_a? Settings value = value.to_hash end result[key] = value end result end
Also aliased as: to_h
to_s()
click to toggle source
Shows string representation of settings
# File lib/squire/settings.rb, line 123 def to_s "#<#{self.class.name} #{@table.map { |key, value| "#{key}=#{value}"}.join(', ')}>" end
Private Instance Methods
define_key_accessor(key)
click to toggle source
Defines key accessor for key
for faster accessing of keys.
# File lib/squire/settings.rb, line 153 def define_key_accessor(key) define_singleton_method(key) do |&block| get_value(key, &block) end end