Module:File link: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(enable call-chaining and tweak the error messages to use "image:method" rather than just "method") |
(seperate treatment of private fields and read-only fields, and add a __pairs metamethod) |
||
Line 228: | Line 228: | ||
end |
end |
||
local |
local privateFields = { |
||
theName = true, |
theName = true, |
||
theFormat = true, |
theFormat = true, |
||
Line 243: | Line 243: | ||
theCaption = true |
theCaption = true |
||
} |
} |
||
local readOnlyFields = {} |
|||
for field in pairs(data) do |
for field in pairs(data) do |
||
readOnlyFields[field] = true |
readOnlyFields[field] = true |
||
Line 248: | Line 250: | ||
setmetatable(obj, { |
setmetatable(obj, { |
||
__index = |
__index = function (t, key) |
||
if privateFields[key] then |
|||
error(string.format( |
|||
"image object field '%s' is private", |
|||
tostring(key) |
|||
), 2) |
|||
else |
|||
return data[key] |
|||
end |
|||
end, |
|||
__newindex = function (t, key, value) |
__newindex = function (t, key, value) |
||
if |
if privateFields[key] then |
||
error(string.format( |
error(string.format( |
||
"field '%s' is |
"image object field '%s' is private", |
||
tostring(key) |
|||
), 2) |
|||
elseif readOnlyFields[key] then |
|||
error(string.format( |
|||
"image object field '%s' is read-only", |
|||
tostring(key) |
tostring(key) |
||
), 2) |
), 2) |
||
Line 261: | Line 277: | ||
__tostring = function (t) |
__tostring = function (t) |
||
return t:render() |
return t:render() |
||
end, |
|||
__pairs = function () |
|||
local temp = {} |
|||
for k, v in pairs(data) do |
|||
if not privateFields[k] then |
|||
temp[k] = v |
|||
end |
|||
end |
|||
return pairs(temp) |
|||
end |
end |
||
}) |
}) |