--[[ Copyright (c) 2012 Kaarle Ritvanen See LICENSE file for license details --]] module(..., package.seeall) local pth = require('acf.path') local util = require('acf.persistence.util') require 'lfs' backend = require('acf.object').class() -- TODO cache expiration function backend:init() self.cache = {} end function backend:get(path) local name = pth.join('/', unpack(path)) if not self.cache[name] then local attrs = lfs.attributes(name) if not attrs then return end if attrs.mode == 'file' then self.cache[name] = util.read_file(name) elseif attrs.mode == 'directory' then local res = {} for fname in lfs.dir(name) do if not ({['.']=true, ['..']=true})[fname] then table.insert(res, fname) end end return res else error('Unsupported file type: '..name) end -- TODO present symlinks as references end return self.cache[name] end function backend:set(mods) for _, mod in pairs(mods) do local path, t, value = unpack(mod) local name = pth.join('/', unpack(path)) -- TODO save references (t == 'reference') as symlinks if not t then -- TODO del files & dirs print('DEL', name) elseif t == 'table' then lfs.mkdir(name) else local file = util.open_file(name, 'w') file:write(value) file:close() self.cache[name] = value end end end