Template = {} function Template:new() local template = { directories = {}, files = {}, options = {}, arguments = {} } setmetatable(template, self) self.__index = self return template end function Template:set_option(name, description, default, required) required = required == nil or required self.options[name] = { name = name, default = default, required = required, kind = 'property', description = description, } end function Template:option(name) if not self.options[name] then self:set_option(name) end return function() return self.arguments[name] end end function Template:add_directory(path, env) self.directories[#self.directories + 1] = { path = path, env = env, } end function Template:add_file(path, env) self.files[#self.files + 1] = { path = path, env = env, } end