Class: Termtter::Config
- Inherits:
-
Object
show all
- Defined in:
- lib/termtter/config.rb
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Config
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
40
41
42
|
# File 'lib/termtter/config.rb', line 40
def empty?
@store.empty?
end
|
#inspect ⇒ Object
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
|