Class: Termtter::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/termtter/config.rb

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



7
8
9
10
11
# File 'lib/termtter/config.rb', line 7

def initialize
  @store = Hash.new(:undefined)
  @freezes = Set.new
  @assign_hook = {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/termtter/config.rb', line 44

def method_missing(name, *args)
  case name.to_s
  when /(.*)=$/
    __assign__($1.to_sym, args.first)
  else
    __refer__(name.to_sym)
  end
end

Instance Method Details

#__assign__(name, value) ⇒ Object

call-seq:

__assign__ :: Symbol -> a -> IO ()


63
64
65
66
67
68
# File 'lib/termtter/config.rb', line 63

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) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/termtter/config.rb', line 80

def __clear__(name = nil)
  return if name && @freezes.include?(name)
  if name
    @store[name] = :undefined
  else
    @store.clear
  end
end

#__freeze__(name) ⇒ Object



53
54
55
# File 'lib/termtter/config.rb', line 53

def __freeze__(name)
  @freezes << name.to_sym
end

#__refer__(name) ⇒ Object

call-seq:

__refer__ :: Symbol -> IO a


72
73
74
# File 'lib/termtter/config.rb', line 72

def __refer__(name)
  @store[name] == :undefined ? @store[name] = Termtter::Config.new : @store[name]
end

#__unfreeze__(name) ⇒ Object



57
58
59
# File 'lib/termtter/config.rb', line 57

def __unfreeze__(name)
  @freezes.delete(name.to_sym)
end

#__values__Object



76
77
78
# File 'lib/termtter/config.rb', line 76

def __values__
  @store.dup
end

#empty?Boolean

call-seq:

empty? :: Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/termtter/config.rb', line 40

def empty?
  @store.empty?
end

#inspectObject



13
14
15
# File 'lib/termtter/config.rb', line 13

def inspect
  @store.inspect
end

#set_assign_hook(name, &block) ⇒ Object



34
35
36
# File 'lib/termtter/config.rb', line 34

def set_assign_hook(name, &block)
  @assign_hook[name.to_sym] = block
end

#set_default(name, value) ⇒ Object

call-seq:

set_default :: (Symbol | String) -> a -> IO ()


19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/termtter/config.rb', line 19

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