class ComplexConfig::Settings
Attributes
name_prefix[RW]
table[R]
Public Class Methods
[](*a)
click to toggle source
# File lib/complex_config/settings.rb, line 10 def [](*a) from_hash(*a) end
build(name, hash)
click to toggle source
# File lib/complex_config/settings.rb, line 29 def build(name, hash) name.nil? or self.name_prefix = name.to_sym hash.respond_to?(:to_hash) or raise TypeError, 'require hash to build' from_hash(hash) ensure self.name_prefix = nil end
from_hash(object)
click to toggle source
# File lib/complex_config/settings.rb, line 14 def from_hash(object) case when object.respond_to?(:to_hash) result = new object.to_hash.each do |key, value| result[key] = from_hash(value) end result when object.respond_to?(:to_ary) object.to_ary.map { |a| from_hash(a) } else object end end
new(hash = nil)
click to toggle source
# File lib/complex_config/settings.rb, line 44 def initialize(hash = nil) self.name_prefix = self.class.name_prefix @table = {} if hash hash.each_pair do |k, v| k = k.to_sym @table[k] = v end end end
Public Instance Methods
==(other)
click to toggle source
# File lib/complex_config/settings.rb, line 118 def ==(other) other.respond_to?(:to_h) && to_h == other.to_h end
[]=(name, value)
click to toggle source
# File lib/complex_config/settings.rb, line 224 def []=(name, value) @table[name.to_sym] = value end
attribute_get(name)
click to toggle source
# File lib/complex_config/settings.rb, line 204 def attribute_get(name) if !attribute_set?(name) and value = ::ComplexConfig::Provider.apply_plugins(self, name) then value else @table[name.to_sym] end end
Also aliased as: []
attribute_get!(name)
click to toggle source
# File lib/complex_config/settings.rb, line 216 def attribute_get!(name) if attribute_set?(name) attribute_get(name) else raise ::ComplexConfig::AttributeMissing, "no attribute named #{name.inspect}" end end
attribute_names()
click to toggle source
# File lib/complex_config/settings.rb, line 65 def attribute_names @table.keys end
attribute_set?(name)
click to toggle source
# File lib/complex_config/settings.rb, line 61 def attribute_set?(name) @table.key?(name.to_sym) end
attribute_values()
click to toggle source
# File lib/complex_config/settings.rb, line 69 def attribute_values @table.values end
attributes_list(pair_sep: ' = ', path_sep: ?.)
click to toggle source
# File lib/complex_config/settings.rb, line 142 def attributes_list(pair_sep: ' = ', path_sep: ?.) empty? and return self.class.name pathes(path_sep: path_sep).inject('') do |result, (path, value)| result + "#{path}#{pair_sep}#{value.inspect}\n" end end
attributes_update(other)
click to toggle source
# File lib/complex_config/settings.rb, line 73 def attributes_update(other) unless other.is_a? self.class other = self.class.from_hash(other) end @table.update(other.table) end
attributes_update_if_nil(other)
click to toggle source
# File lib/complex_config/settings.rb, line 80 def attributes_update_if_nil(other) unless other.is_a? self.class other = self.class.from_hash(other) end @table.update(other.table) do |key, oldval, newval| @table.key?(key) ? oldval : newval end end
deep_freeze()
click to toggle source
# File lib/complex_config/settings.rb, line 197 def deep_freeze table_enumerator.each do |_, v| v.ask_and_send(:deep_freeze) || (v.freeze rescue v) end freeze end
each(&block)
click to toggle source
# File lib/complex_config/settings.rb, line 228 def each(&block) table_enumerator.each(&block) end
empty?()
click to toggle source
# File lib/complex_config/settings.rb, line 138 def empty? size == 0 end
freeze()
click to toggle source
Calls superclass method
# File lib/complex_config/settings.rb, line 192 def freeze @table.freeze super end
initialize_copy(orig)
click to toggle source
Calls superclass method
# File lib/complex_config/settings.rb, line 55 def initialize_copy(orig) super @table = @table.dup self end
pathes(hash = table, path_sep: ?., prefix: name_prefix.to_s, result: {})
click to toggle source
# File lib/complex_config/settings.rb, line 154 def pathes(hash = table, path_sep: ?., prefix: name_prefix.to_s, result: {}) hash.each do |key, value| path = prefix.empty? ? key.to_s : "#{prefix}#{path_sep}#{key}" case value when ::ComplexConfig::Settings pathes( value, path_sep: path_sep, prefix: path, result: result ) when ::Array value.each_with_index do |v, i| sub_path = path + "[#{i}]" if ::ComplexConfig::Settings === v pathes( v, path_sep: path_sep, prefix: sub_path, result: result ) else result[sub_path] = v end end else result[path] = value end end result end
pretty_print(q)
click to toggle source
# File lib/complex_config/settings.rb, line 188 def pretty_print(q) q.text inspect end
replace_attributes(hash)
click to toggle source
# File lib/complex_config/settings.rb, line 89 def replace_attributes(hash) @table = self.class.from_hash(hash).table self end
size()
click to toggle source
# File lib/complex_config/settings.rb, line 134 def size each.count end
to_h()
click to toggle source
def write_config(encrypt: false, store_key: false)
::ComplexConfig::Provider.write_config( name_prefix, self, encrypt: encrypt, store_key: store_key ) self
end
# File lib/complex_config/settings.rb, line 101 def to_h table_enumerator.each_with_object({}) do |(k, v), h| h[k] = if ::Array === v v.to_ary.map { |x| (x.ask_and_send(:to_h) rescue x) || x } elsif v.respond_to?(:to_h) if v.nil? nil else v.ask_and_send(:to_h) rescue v end else v end end end
to_json(*a)
click to toggle source
# File lib/complex_config/settings.rb, line 126 def to_json(*a) to_h.to_json(*a) end
to_s(*)
click to toggle source
# File lib/complex_config/settings.rb, line 149 def to_s(*) empty? and return self.class.name to_tree.to_s end
Also aliased as: inspect
to_tree()
click to toggle source
# File lib/complex_config/settings.rb, line 130 def to_tree ::ComplexConfig::Tree.convert(name_prefix, self) end
to_yaml()
click to toggle source
# File lib/complex_config/settings.rb, line 122 def to_yaml to_h.to_yaml end
Private Instance Methods
method_missing(id, *a, &b)
click to toggle source
# File lib/complex_config/settings.rb, line 250 def method_missing(id, *a, &b) case when id =~ /\?\z/ begin public_send $`.to_sym, *a, &b rescue ::ComplexConfig::AttributeMissing nil end when id =~ /=\z/ @table[$`.to_sym] = a.first when value = ::ComplexConfig::Provider.apply_plugins(self, id) value else if attribute_set?(id) @table[id] else raise ::ComplexConfig::AttributeMissing, "no attribute named #{id.inspect}" end end end
respond_to_missing?(id, include_private = false)
click to toggle source
# File lib/complex_config/settings.rb, line 242 def respond_to_missing?(id, include_private = false) id =~ /\?\z/ || attribute_set?(id) end
skip()
click to toggle source
# File lib/complex_config/settings.rb, line 246 def skip throw :skip end
table_enumerator()
click to toggle source
# File lib/complex_config/settings.rb, line 238 def table_enumerator @table.enum_for(:each) end