Class: Ccp::Data::KVS

Inherits:
Object
  • Object
show all
Defined in:
lib/ccp/data.rb

Defined Under Namespace

Classes: Default, LazyValue

Instance Method Summary collapse

Constructor Details

#initializeKVS



31
32
33
34
# File 'lib/ccp/data.rb', line 31

def initialize
  @hash    = {}
  @default = Default.new(self)
end

Instance Method Details

#[](key) ⇒ Object

Accessor



50
51
52
53
54
55
56
57
# File 'lib/ccp/data.rb', line 50

def [](key)
  if exist?(key)
    return load(key)
  else
    from = caller.is_a?(Array) ? caller.first : self.class
    raise NotDefined, "'#{key}' is not initialized\n#{from}"
  end
end

#check(key, type) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/ccp/data.rb', line 70

def check(key, type)
  self[key].must.struct(type) {
    summary = self[key].inspect
    summary = summary[0,200] + "..." if summary.size > 200
    raise TypeError, "'#{key}' expects '#{type.inspect}', but got #{summary}"
  }
end

#default(key = nil, &block) ⇒ Object

Default values



39
40
41
42
43
44
45
# File 'lib/ccp/data.rb', line 39

def default(key = nil, &block)
  if key
    @default.regsiter_lazy(key, block)
  else
    @default
  end
end

#exist?(key) ⇒ Boolean

Testing



62
63
64
# File 'lib/ccp/data.rb', line 62

def exist?(key)
  @hash.has_key?(key)
end

#inspectObject



85
86
87
88
# File 'lib/ccp/data.rb', line 85

def inspect
  keys = @hash.keys.map(&:to_s).sort.join(',')
  "{#{keys}}"
end

#path(key) ⇒ Object

Utils



81
82
83
# File 'lib/ccp/data.rb', line 81

def path(key)
  self[key].must.coerced(Pathname, String=>proc{|i| Pathname(i)})
end

#set?(key) ⇒ Boolean



66
67
68
# File 'lib/ccp/data.rb', line 66

def set?(key)
  !! (exist?(key) && self[key])
end