Class: TreeStore

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

Instance Method Summary collapse

Constructor Details

#initialize(backend = RedisBackend.new) ⇒ TreeStore

Returns a new instance of TreeStore.

Raises:

  • (RuntimeError)


6
7
8
9
10
# File 'lib/treestore.rb', line 6

def initialize(backend=RedisBackend.new)
  raise RuntimeError, "#{backend} is not an appropriate backend" if not backend.kind_of? Backend
  @backend = backend
  @namespace = "tree-store"
end

Instance Method Details

#add(item) ⇒ Object



12
13
14
15
16
# File 'lib/treestore.rb', line 12

def add(item)
  key = Digest::SHA1.hexdigest(item)
  @backend.addblob(make_object_key(key), item)
  key
end

#delete(key) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/treestore.rb', line 49

def delete(key)
  ref = ref(key)
  if ref.nil?
    @backend.delete(make_object_key(key))
  else
    @backend.delete(make_ref_key(key))
  end
end

#exists?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

def exists?(key)
  @backend.exists?(make_object_key(ref(key) || key))
end

#make_ref(name, key) ⇒ Object



43
44
45
46
47
# File 'lib/treestore.rb', line 43

def make_ref(name, key)
  realkey = ref(key) || key
  @backend.make_ref(make_ref_key(name), realkey)
  name
end

#make_tree(keys) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/treestore.rb', line 23

def make_tree(keys)
  realkeys = {}
  keys.each do |key|
    realkey = ref(key) || key
    unless exists?(realkey)
      raise RuntimeError, "Can't make tree, no item with key of #{key} or #{realkey} exists, make it first"
    end
    realkeys[realkey] = true
  end

  realkeys = realkeys.keys
  treekey = Digest::SHA1.hexdigest(realkeys.join)
  @backend.addtree(make_object_key(treekey), realkeys)
  treekey
end

#ref(name) ⇒ Object



39
40
41
# File 'lib/treestore.rb', line 39

def ref(name)
  @backend.ref(make_ref_key(name))
end

#retrieve(key) ⇒ Object



18
19
20
21
# File 'lib/treestore.rb', line 18

def retrieve(key)
  realkey = make_object_key(ref(key) || key)
  @backend.retrieve(realkey)
end

#type(key) ⇒ Object



58
59
60
# File 'lib/treestore.rb', line 58

def type(key)
  @backend.type(make_object_key(ref(key) || key))
end