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