class Termtter::Config

Public Class Methods

new() click to toggle source
# File lib/termtter/config.rb, line 6
def initialize
  @store = Hash.new(:undefined)
  @freezes = Set.new
  @assign_hook = {}
end

Public Instance Methods

__assign__ :: Symbol -> a → IO () click to toggle source
# File lib/termtter/config.rb, line 62
def __assign__(name, value)
  return if @freezes.include?(name)
  @store[name] = value
  @assign_hook[name].call(value) if @assign_hook[name]
  value
end
__clear__(name = nil) click to toggle source
# File lib/termtter/config.rb, line 79
def __clear__(name = nil)
  return if name && @freezes.include?(name)
  if name
    @store[name] = :undefined
  else
    @store.clear
  end
end
__freeze__(name) click to toggle source
# File lib/termtter/config.rb, line 52
def __freeze__(name)
  @freezes << name.to_sym
end
__refer__ :: Symbol → IO a click to toggle source
# File lib/termtter/config.rb, line 71
def __refer__(name)
  @store[name] == :undefined ? @store[name] = Termtter::Config.new : @store[name]
end
__unfreeze__(name) click to toggle source
# File lib/termtter/config.rb, line 56
def __unfreeze__(name)
  @freezes.delete(name.to_sym)
end
__values__() click to toggle source
# File lib/termtter/config.rb, line 75
def __values__
  @store.dup
end
empty? :: Boolean click to toggle source
# File lib/termtter/config.rb, line 39
def empty?
  @store.empty?
end
inspect() click to toggle source
# File lib/termtter/config.rb, line 12
def inspect
  @store.inspect
end
method_missing(name, *args) click to toggle source
# File lib/termtter/config.rb, line 43
def method_missing(name, *args)
  case name.to_s
  when /(.*)=$/
    __assign__($1.to_sym, args.first)
  else
    __refer__(name.to_sym)
  end
end
set_assign_hook(name, &block) click to toggle source
# File lib/termtter/config.rb, line 33
def set_assign_hook(name, &block)
  @assign_hook[name.to_sym] = block
end
set_default :: (Symbol | String) -> a → IO () click to toggle source
# File lib/termtter/config.rb, line 18
def set_default(name, value)
  match_p, init, last = *name.to_s.match(/^(.+)\.([^\.]+)$/)
  if match_p
    tmp = eval(init)
    if tmp.__refer__(last.to_sym).empty?
      tmp.__assign__(last.to_sym, value)
    end
  else
    current_value = __refer__(name.to_sym)
    if current_value.kind_of?(self.class) && current_value.empty?
      __assign__(name.to_sym, value)
    end
  end
end