class Ccp::Storage

Constants

NotFound

Attributes

codec[R]
kvs[R]
path[R]
source[R]

Public Class Methods

load(path) click to toggle source
# File lib/ccp/storage.rb, line 5
def self.load(path)
  array = path.to_s.split(".")
  kvs   = Ccp::Kvs[array.pop]
  codec = Ccp::Serializers[array.pop]
  return new(path, kvs, codec)
end
new(source, kvs, codec) click to toggle source
# File lib/ccp/storage.rb, line 15
def initialize(source, kvs, codec)
  @source = source
  @codec  = codec
  @path   = Pathname(source)
  @kvs    = kvs.new(source).codec!(codec)
  @tables = {}
end

Public Instance Methods

close() click to toggle source
# File lib/ccp/storage.rb, line 56
def close
  @tables.each_pair do |_,kvs|
    kvs.close
  end
  @tables = {}
end
close_table(name) click to toggle source
# File lib/ccp/storage.rb, line 46
def close_table(name)
  t = @tables[name.to_s]
  if t && t.close
    @tables.delete(name.to_s)
    true
  else
    false
  end
end
read() click to toggle source

kvs

# File lib/ccp/storage.rb, line 66
def read
  if @path.directory?
    tables
    hash = {}
    @tables.each_pair do |k, kvs|
      hash[k] = kvs.read
    end
    return hash
  else
    return @kvs.read
  end
end
table(name, file = nil) click to toggle source
# File lib/ccp/storage.rb, line 39
def table(name, file = nil)
  @tables[name.to_s] ||= (
    file ||= "%s.%s.%s" % [name, @codec.ext, @kvs.ext]
    @kvs.class.new((@path + file).to_s).codec!(@codec)
  )
end
table_names() click to toggle source

meta kvs

# File lib/ccp/storage.rb, line 26
def table_names
  tables                    # force to update @tables
  @tables.keys
end
tables() click to toggle source
# File lib/ccp/storage.rb, line 31
def tables
  files = Dir.chdir(@path) { Dir["**/*.#{@kvs.ext}"] }
  files.map{|file|
    name = file.sub(/(\.#{@codec.ext})?(\.#{@kvs.ext})?$/, '')
    table(name, file)
  }
end