Skip to content

Commit 4953e08

Browse files
Merge pull request #2 from mateusmoutinho/copilot/fix-684f7487-53c2-400e-abd3-d99f96c00158
Remove code repetition in heregitage.lua with factory functions
2 parents b3342f7 + 5ad0e4b commit 4953e08

File tree

1 file changed

+31
-45
lines changed

1 file changed

+31
-45
lines changed

heregitage.lua

Lines changed: 31 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,59 +14,45 @@ return (function ()
1414
selfobject.private = props.private or {}
1515
selfobject.meta_table = props.meta_table or {}
1616

17-
selfobject.set_meta_method = function (method_name,callback)
18-
selfobject.meta_table[method_name] = function (...)
19-
return callback(selfobject.public,selfobject.private, ...)
20-
end
21-
herigitage.setmetatable (selfobject.public, selfobject.meta_table)
22-
end
23-
selfobject.meta_extends = function (props)
24-
for k,v in herigitage.pairs(props) do
25-
local item = selfobject.meta_table[k]
26-
if herigitage.type(item) == "function" then
27-
selfobject.set_meta_method(k, v)
28-
else
29-
selfobject.meta_table[k] = v
17+
-- Factory function to create method setters
18+
local function createMethodSetter(target, extraAction)
19+
return function(method_name, callback)
20+
target[method_name] = function (...)
21+
return callback(selfobject.public, selfobject.private, ...)
3022
end
31-
end
32-
33-
end
34-
35-
selfobject.set_public_method = function (method_name, callback)
36-
selfobject.public[method_name] = function (...)
37-
return callback(selfobject.public,selfobject.private, ...)
38-
end
39-
end
40-
41-
selfobject.public_extends = function (props)
42-
for k,v in herigitage.pairs(props) do
43-
local item = selfobject.public[k]
44-
if herigitage.type(item) == "function" then
45-
selfobject.set_public_method(k, v)
46-
else
47-
selfobject.public[k] = v
23+
if extraAction then
24+
extraAction()
4825
end
4926
end
50-
51-
end
52-
53-
selfobject.set_private_method = function (method_name, callback)
54-
selfobject.private[method_name] = function (...)
55-
return callback(selfobject.public,selfobject.private, ...)
56-
end
5727
end
58-
selfobject.private_extends = function (props)
59-
for k,v in herigitage.pairs(props) do
60-
local item = selfobject.private[k]
61-
if herigitage.type(item) == "function" then
62-
selfobject.set_private_method(k, v)
63-
else
64-
selfobject.private[k] = v
28+
29+
-- Factory function to create extends functions
30+
local function createExtends(target, setter)
31+
return function(props)
32+
for k,v in herigitage.pairs(props) do
33+
if herigitage.type(v) == "function" then
34+
setter(k, v)
35+
else
36+
target[k] = v
37+
end
6538
end
6639
end
67-
6840
end
6941

42+
selfobject.set_meta_method = createMethodSetter(selfobject.meta_table, function()
43+
herigitage.setmetatable(selfobject.public, selfobject.meta_table)
44+
end)
45+
46+
selfobject.set_public_method = createMethodSetter(selfobject.public)
47+
48+
selfobject.set_private_method = createMethodSetter(selfobject.private)
49+
50+
selfobject.meta_extends = createExtends(selfobject.meta_table, selfobject.set_meta_method)
51+
52+
selfobject.public_extends = createExtends(selfobject.public, selfobject.set_public_method)
53+
54+
selfobject.private_extends = createExtends(selfobject.private, selfobject.set_private_method)
55+
7056
return selfobject
7157
end
7258

0 commit comments

Comments
 (0)