summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--acf2/model/model.lua13
-rw-r--r--acf2/model/node.lua24
-rw-r--r--acf2/model/set.lua2
3 files changed, 25 insertions, 14 deletions
diff --git a/acf2/model/model.lua b/acf2/model/model.lua
index 0867fe6..b4f4603 100644
--- a/acf2/model/model.lua
+++ b/acf2/model/model.lua
@@ -183,12 +183,17 @@ function M.Model:init(context)
return map(function(m) return m:meta() end, _members(tpe))
end
- mt.meta.type = 'model'
- mt.meta.fields = tmeta(Field)
- mt.meta.actions = tmeta(M.Action)
+ mt._meta.type = 'model'
+ function mt.meta()
+ if not mt._meta.fields then
+ mt._meta.fields = tmeta(Field)
+ mt._meta.actions = tmeta(M.Action)
+ end
+ return mt._meta
+ end
function mt.members()
- return map(function(f) return f.name end, mt.meta.fields)
+ return map(function(f) return f.name end, mt.meta().fields)
end
function mt.validate()
diff --git a/acf2/model/node.lua b/acf2/model/node.lua
index f10cfce..45167af 100644
--- a/acf2/model/node.lua
+++ b/acf2/model/node.lua
@@ -61,13 +61,13 @@ function M.TreeNode:init(context)
mt.__eq = equal_tns
mt.dereference = true
- mt.meta = {}
+ mt._meta = {}
function mt.get(k, create) return mt.load(k, {create=create}) end
if not mt.txn then return end
if mt.parent then
- mt.meta['ui-name'] = getmetatable(mt.parent).mmeta(
+ mt._meta['ui-name'] = getmetatable(mt.parent).mmeta(
pth.name(mt.path)
)['ui-name']
end
@@ -170,15 +170,21 @@ function M.Collection:init(context, params)
if not mt.txn then return end
- mt.meta.type = 'collection'
- mt.meta.members = field:meta()
- mt.meta['ui-member'] = params.ui_member or mt.meta['ui-name']:gsub('s$', '')
- mt.meta.widget = params.layout
+ mt._meta.type = 'collection'
+ mt._meta['ui-member'] = params.ui_member or mt._meta['ui-name']:gsub(
+ 's$', ''
+ )
+ mt._meta.widget = params.layout
+
+ function mt.meta()
+ if not mt._meta.members then mt._meta.members = field:meta() end
+ return mt._meta
+ end
function mt.mmeta(name)
- local res = util.copy(mt.meta.members)
+ local res = util.copy(mt.meta().members)
if name ~= pth.wildcard then
- res['ui-name'] = mt.meta['ui-member']..' '..name
+ res['ui-name'] = mt._meta['ui-member']..' '..name
end
return res
end
@@ -206,7 +212,7 @@ function M.List:init(context, params)
super(self, M.List):init(context, params)
local mt = getmetatable(self)
- mt.meta.type = 'list'
+ mt._meta.type = 'list'
local save = mt.save
function mt.save(k, v)
diff --git a/acf2/model/set.lua b/acf2/model/set.lua
index 9cd3b4a..0e73b38 100644
--- a/acf2/model/set.lua
+++ b/acf2/model/set.lua
@@ -25,7 +25,7 @@ function M.Set:init(context, params)
local mt = getmetatable(self)
mt.dereference = false
- mt.meta.type = 'set'
+ mt._meta.type = 'set'
function mt.get(k, create)
local i = find(k)