From 90da4c70bb7cc80b524d3913e9e2d04408b591cd Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Mon, 19 Apr 2021 10:11:22 -0400 Subject: [PATCH 1/8] standardizing org template --- modpol/orgs/orgs.lua | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/modpol/orgs/orgs.lua b/modpol/orgs/orgs.lua index d8db2ad..fbc6668 100644 --- a/modpol/orgs/orgs.lua +++ b/modpol/orgs/orgs.lua @@ -7,6 +7,18 @@ modpol.orgs = -- sets modpol.orgs as its own fallback modpol.orgs.__index = modpol.orgs +function temp_org() + return { + id = nil, + name = nil, + policies = {}, + processes = {}, + members = {}, + parent = nil, + children = {} + } +end + -- ================================================== -- returns org when given its id or name function modpol.orgs.get_org(arg) @@ -74,17 +86,10 @@ function modpol.orgs.init_instance() return false, error_msg end - local instance = { - id = 1, - name = "instance", - policies = {}, - members = {}, - ledger = {}, - parent = nil, - children = {}, - properties = {}, - old_names = {} - } + local instance = temp_org() + instance.id = 1 + instance.name = "instance" + setmetatable(instance, modpol.orgs) -- adding instance to org list @@ -146,14 +151,11 @@ function modpol.orgs:add_org(name) -- creating the child sub org modpol.orgs.count = modpol.orgs.count + 1 - local child_org = { - id = modpol.orgs.count, - name = name, - policies = {}, - members = {}, - parent = self.id, - children = {}, - } + local child_org = temp_org() + child_org.id = modpol.orgs.count + child_org.name = name + child_org.parent = self.id + setmetatable(child_org, modpol.orgs) -- adding child id to list of children From 44e40d96e65bb090dd20550f22d646f57732fdf4 Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Wed, 21 Apr 2021 16:17:41 -0400 Subject: [PATCH 2/8] added support for making requests to an org (first step of processes) --- modpol/orgs/orgs.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/modpol/orgs/orgs.lua b/modpol/orgs/orgs.lua index fbc6668..52a8dee 100644 --- a/modpol/orgs/orgs.lua +++ b/modpol/orgs/orgs.lua @@ -13,12 +13,20 @@ function temp_org() name = nil, policies = {}, processes = {}, + requests = {}, members = {}, parent = nil, children = {} } end +modpol.orgs.request_params = { + add_org = 1, + delete = 0, + add_member = 1, + remove_member = 1 +} + -- ================================================== -- returns org when given its id or name function modpol.orgs.get_org(arg) @@ -249,3 +257,43 @@ function modpol.orgs:list_member() end return str end + +-- =========================== +-- compares to requests to see if they are identical +function modpol.orgs.comp_req(req1, req2) + if req1.type ~= req2.type then + return false + else + for k, v in ipairs(req1.params) do + if v ~= req2.params[k] then + return false + end + end + end + return true +end + +-- ================================ +-- tries to make a request to the org +function modpol.orgs:make_request(request) + -- makes sure the request has the valid number of parameters + local num_params = modpol.orgs.request_params[request.type] + + if num_params == nil then return false end + + for k, v in ipairs(request.params) do + num_params = num_params - 1 + end + if num_params ~= 0 then return false end + + -- checking to see if identical request already exists + for k, v in ipairs(self.requests) do + if self.comp_req(request, v) == true then + return false + end + end + + table.insert(self.requests, request) + return true + +end \ No newline at end of file From 4eb12d77c9b45acf1af94e16cd5c15840203590d Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Wed, 21 Apr 2021 22:35:30 -0400 Subject: [PATCH 3/8] have a basic form of processes working! see demo.lua for an example --- modpol/api.lua | 4 +++- modpol/demo.lua | 33 +++++++++++++++++++++++++++++++ modpol/modpol.lua | 2 ++ modpol/modules/dictator.lua | 39 +++++++++++++++++++++++++++++++++++++ modpol/orgs/orgs.lua | 11 +++++++++-- 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 modpol/demo.lua create mode 100644 modpol/modules/dictator.lua diff --git a/modpol/api.lua b/modpol/api.lua index d2be724..392c85c 100644 --- a/modpol/api.lua +++ b/modpol/api.lua @@ -12,4 +12,6 @@ dofile (localdir .. "/orgs/orgs.lua") dofile (localdir .. "/interactions/interactions.lua") -- messaging functions -dofile (localdir .. "/processes/processes.lua") \ No newline at end of file +dofile (localdir .. "/processes/processes.lua") + +dofile (localdir .. "/modules/dictator.lua") \ No newline at end of file diff --git a/modpol/demo.lua b/modpol/demo.lua new file mode 100644 index 0000000..0947599 --- /dev/null +++ b/modpol/demo.lua @@ -0,0 +1,33 @@ +test_org = modpol.instance:add_org('test') + +req_id = test_org:make_request({ + type = 'add_member', + user = 'luke', + params = {'luke'} +}) + +process = dictator.init(test_org.id, req_id) +process:decide(true) + +req_id = test_org:make_request({ + type = 'delete', + user = 'luke', + params = {} +}) + +process = dictator.init(test_org.id, req_id) +process:decide(true) + +-- test_org:add_member('luke') +-- test_org:add_member('nathan') +-- test_org:add_member('bruh') +-- print(test_org:list_member()) +-- test_org:remove_member('nathan') +-- print('================') +-- print(test_org:list_member()) +-- test_org:add_member('testing') +-- test_org:add_member('test 2') +-- print('==================') +-- print(test_org:list_member()) +-- print(modpol.orgs.list_all()) +-- test_org:delete() diff --git a/modpol/modpol.lua b/modpol/modpol.lua index d0100a8..d4e0de0 100644 --- a/modpol/modpol.lua +++ b/modpol/modpol.lua @@ -86,3 +86,5 @@ modpol.ocutil.log ("modpol loaded") -- =================================================================== -- End of file. + +dofile(topdir .. '/demo.lua') \ No newline at end of file diff --git a/modpol/modules/dictator.lua b/modpol/modules/dictator.lua new file mode 100644 index 0000000..bd7dedd --- /dev/null +++ b/modpol/modules/dictator.lua @@ -0,0 +1,39 @@ +dictator = {} +dictator.__index = dictator + +function dictator.init(org_id, request_id) + local object = { + request_id = request_id, + org_id = org_id, + resolved = false + } + + setmetatable(object, dictator) + + return object + +end + +function dictator:decide(ruling) + local org = modpol.orgs.get_org(self.org_id) + print(org.name) + if ruling then + local req = org.requests[self.request_id] + print(self.request_id) + for k, v in ipairs(org.requests) do print(k, v) end + print(req) + print(req.type) + if req.type == 'add_org' then + org:add_org(req.params[1]) + elseif req.type == 'delete' then + org:delete() + elseif req.type == 'add_member' then + org:add_member(req.params[1]) + elseif req.type == 'remove_member' then + org:remove_member(req.params[1]) + end + + end + + org.requests[self.request_id] = nil +end \ No newline at end of file diff --git a/modpol/orgs/orgs.lua b/modpol/orgs/orgs.lua index 52a8dee..f7e2e82 100644 --- a/modpol/orgs/orgs.lua +++ b/modpol/orgs/orgs.lua @@ -14,6 +14,7 @@ function temp_org() policies = {}, processes = {}, requests = {}, + request_count = 0, members = {}, parent = nil, children = {} @@ -261,9 +262,12 @@ end -- =========================== -- compares to requests to see if they are identical function modpol.orgs.comp_req(req1, req2) + -- compares request type if req1.type ~= req2.type then return false else + -- comparing parameters + -- we can assume the number of params is the same as this is checked in the make_request func for k, v in ipairs(req1.params) do if v ~= req2.params[k] then return false @@ -293,7 +297,10 @@ function modpol.orgs:make_request(request) end end - table.insert(self.requests, request) - return true + -- use lazy deletion here, not very clean + -- table.insert(self.requests, request) + self.request_count = self.request_count + 1 + self.requests[self.request_count] = request + return self.request_count end \ No newline at end of file From 23d4a54a8e9e5402f1473a02fda17cfce810393b Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Fri, 23 Apr 2021 22:26:04 -0400 Subject: [PATCH 4/8] reverting metatable loading code --- modpol/demo.lua | 2 ++ modpol/modpol.lua | 5 +++-- modpol/storage/storage-local.lua | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/modpol/demo.lua b/modpol/demo.lua index 0947599..eef7ec2 100644 --- a/modpol/demo.lua +++ b/modpol/demo.lua @@ -18,6 +18,8 @@ req_id = test_org:make_request({ process = dictator.init(test_org.id, req_id) process:decide(true) +for k, v in ipairs(modpol.orgs.array) do print(k, v.name) end + -- test_org:add_member('luke') -- test_org:add_member('nathan') -- test_org:add_member('bruh') diff --git a/modpol/modpol.lua b/modpol/modpol.lua index b1b5a66..25c2f00 100644 --- a/modpol/modpol.lua +++ b/modpol/modpol.lua @@ -71,9 +71,10 @@ dofile (topdir .. "/api.lua") -- =================================================================== -- Final checks - for id, org in ipairs(modpol.orgs.array) do - setmetatable(org, modpol.orgs) + if type(org) == 'table' then + setmetatable(org, modpol.orgs) + end end -- create instance if not present diff --git a/modpol/storage/storage-local.lua b/modpol/storage/storage-local.lua index ce61a95..d94214e 100644 --- a/modpol/storage/storage-local.lua +++ b/modpol/storage/storage-local.lua @@ -117,9 +117,9 @@ local load_orgs = function() modpol.orgs = func() -- this block resets the metatable after being loaded in so that the class functions work - for id, org in ipairs(modpol.orgs.array) do - setmetatable(org, modpol.orgs) - end + -- for id, org in ipairs(modpol.orgs.array) do + -- setmetatable(org, modpol.orgs) + -- end local nn = modpol.ocutil.table_length (modpol.orgs.array) local str = "entries" From 6d5d93b4b7beaf8377f91e9ebe66a7f23d9d4242 Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Fri, 23 Apr 2021 22:41:40 -0400 Subject: [PATCH 5/8] bug fixes --- modpol/orgs/orgs.lua | 48 ++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/modpol/orgs/orgs.lua b/modpol/orgs/orgs.lua index e1d84f4..43ba3cc 100644 --- a/modpol/orgs/orgs.lua +++ b/modpol/orgs/orgs.lua @@ -92,9 +92,8 @@ end function modpol.orgs.init_instance() local error_msg if modpol.orgs.array[1] then - error_msg = 'Error: instance has already been initialized' - modpol.ocutil.log(error_msg) - return false, error_msg + modpol.ocutil.log('Error: instance has already been initialized') + return false end local instance = temp_org() @@ -128,14 +127,15 @@ function modpol.orgs:record(msg, entry_type) if type(msg) == 'string' and not(modpol.ocutil.str_empty(msg)) then entry.action_msg = msg else - print('Error: msg must be a non empty string') + modpol.ocutil.log('Error: msg must be a non empty string') return false end if type(entry_type) == 'string' and not(modpol.ocutil.str_empty(entry_type)) then entry.entry_type = entry_type else - print('Error: entry_type must be a non empty string') + modpol.ocutil.log('Error: entry_type must be a non empty string') + print(msg, entry_type) return false end @@ -152,21 +152,18 @@ end -- ex: instance:add_org('town hall') function modpol.orgs:add_org(name) if self.id == nil then - error_msg = 'Error: add_org can only be called by another org' - modpol.ocutil.log(error_msg) - return false, error_msg + modpol.ocutil.log('Error: add_org can only be called by another org') + return false end if modpol.ocutil.str_empty(name) then - error_msg = 'Error: org name is required' - modpol.ocutil.log(error_msg) - return false, error_msg + modpol.ocutil.log('Error: org name is required') + return false end if modpol.orgs.get_org(name) then - error_msg = 'Error: org name is already being used' - modpol.ocutil.log(error_msg) - return false, error_msg + modpol.ocutil.log('Error: org name is already being used') + return false end -- creating the child sub org @@ -185,6 +182,7 @@ function modpol.orgs:add_org(name) modpol.orgs.array[child_org.id] = child_org self:record('created sub org ' .. name, 'add_org') + modpol.ocutil.log('Created sub org ' .. name) return child_org end @@ -195,7 +193,8 @@ end -- note: "reason" param was removed, can be added back function modpol.orgs:delete() if self.id == 1 then - return false, 'Error: cannot delete instance' + modpol.ocutil.log('Error: cannot delete instance') + return false end if #self.children > 0 then @@ -207,7 +206,7 @@ function modpol.orgs:delete() end modpol.orgs.array[self.id] = 'removed' - print('Removed ' .. self.name .. ': ' .. self.id) + modpol.ocutil.log('Removed ' .. self.name .. ': ' .. self.id) self:record('Deleted ' .. self.name .. ' and all child orgs', 'del_org') @@ -235,7 +234,8 @@ function modpol.orgs:add_member(user) -- adds to end if no empty spots table.insert(self.members, user) end - self.record('Added member ' .. user, 'add_member') + self:record('Added member ' .. user, 'add_member') + end -- ======================================= @@ -247,7 +247,7 @@ function modpol.orgs:remove_member(user) if user_index then self.members[user_index] = '' end - self.record('Removed member ' .. user, 'del_member') + self:record('Removed member ' .. user, 'del_member') end -- =========================================== @@ -299,16 +299,24 @@ function modpol.orgs:make_request(request) -- makes sure the request has the valid number of parameters local num_params = modpol.orgs.request_params[request.type] - if num_params == nil then return false end + if num_params == nil then + modpol.ocutil.log("Error: request type is invalid") + return false + end for k, v in ipairs(request.params) do num_params = num_params - 1 end - if num_params ~= 0 then return false end + + if num_params ~= 0 then + modpol.ocutil.log("Error: request has invalid number of parameters") + return false + end -- checking to see if identical request already exists for k, v in ipairs(self.requests) do if self.comp_req(request, v) == true then + modpol.ocutil.log("Error: request has already been made") return false end end From 6d070133b79015859fa659421bf0c20f706795a8 Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Fri, 23 Apr 2021 22:44:55 -0400 Subject: [PATCH 6/8] cleaning up --- modpol/api.lua | 4 +--- modpol/modpol.lua | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/modpol/api.lua b/modpol/api.lua index 392c85c..d2be724 100644 --- a/modpol/api.lua +++ b/modpol/api.lua @@ -12,6 +12,4 @@ dofile (localdir .. "/orgs/orgs.lua") dofile (localdir .. "/interactions/interactions.lua") -- messaging functions -dofile (localdir .. "/processes/processes.lua") - -dofile (localdir .. "/modules/dictator.lua") \ No newline at end of file +dofile (localdir .. "/processes/processes.lua") \ No newline at end of file diff --git a/modpol/modpol.lua b/modpol/modpol.lua index 25c2f00..d220ed5 100644 --- a/modpol/modpol.lua +++ b/modpol/modpol.lua @@ -84,6 +84,4 @@ modpol.instance = modpol.orgs.array[1] or modpol.orgs.init_instance() modpol.ocutil.log ("modpol loaded") -- =================================================================== --- End of file. - -dofile(topdir .. '/demo.lua') \ No newline at end of file +-- End of file. \ No newline at end of file From a67dab55fe757480012add401d8034febc0c32f5 Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Mon, 26 Apr 2021 00:23:02 -0400 Subject: [PATCH 7/8] removing dictator for master merge --- modpol/modules/dictator.lua | 39 ------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 modpol/modules/dictator.lua diff --git a/modpol/modules/dictator.lua b/modpol/modules/dictator.lua deleted file mode 100644 index bd7dedd..0000000 --- a/modpol/modules/dictator.lua +++ /dev/null @@ -1,39 +0,0 @@ -dictator = {} -dictator.__index = dictator - -function dictator.init(org_id, request_id) - local object = { - request_id = request_id, - org_id = org_id, - resolved = false - } - - setmetatable(object, dictator) - - return object - -end - -function dictator:decide(ruling) - local org = modpol.orgs.get_org(self.org_id) - print(org.name) - if ruling then - local req = org.requests[self.request_id] - print(self.request_id) - for k, v in ipairs(org.requests) do print(k, v) end - print(req) - print(req.type) - if req.type == 'add_org' then - org:add_org(req.params[1]) - elseif req.type == 'delete' then - org:delete() - elseif req.type == 'add_member' then - org:add_member(req.params[1]) - elseif req.type == 'remove_member' then - org:remove_member(req.params[1]) - end - - end - - org.requests[self.request_id] = nil -end \ No newline at end of file From 411f4bd0a9c247d5934e504a6b7a0aea908e2f6a Mon Sep 17 00:00:00 2001 From: Luke Miller <millerluke1364@gmail.com> Date: Mon, 26 Apr 2021 00:23:45 -0400 Subject: [PATCH 8/8] removed test file --- modpol/demo.lua | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 modpol/demo.lua diff --git a/modpol/demo.lua b/modpol/demo.lua deleted file mode 100644 index eef7ec2..0000000 --- a/modpol/demo.lua +++ /dev/null @@ -1,35 +0,0 @@ -test_org = modpol.instance:add_org('test') - -req_id = test_org:make_request({ - type = 'add_member', - user = 'luke', - params = {'luke'} -}) - -process = dictator.init(test_org.id, req_id) -process:decide(true) - -req_id = test_org:make_request({ - type = 'delete', - user = 'luke', - params = {} -}) - -process = dictator.init(test_org.id, req_id) -process:decide(true) - -for k, v in ipairs(modpol.orgs.array) do print(k, v.name) end - --- test_org:add_member('luke') --- test_org:add_member('nathan') --- test_org:add_member('bruh') --- print(test_org:list_member()) --- test_org:remove_member('nathan') --- print('================') --- print(test_org:list_member()) --- test_org:add_member('testing') --- test_org:add_member('test 2') --- print('==================') --- print(test_org:list_member()) --- print(modpol.orgs.list_all()) --- test_org:delete()