observe-hook + thread: remove metadata when leaving a group

This commit is contained in:
Logan Allen 2020-11-30 16:20:26 -06:00
parent 1aa9337301
commit a6bf3ca924
2 changed files with 54 additions and 2 deletions

View File

@ -11,11 +11,13 @@
+$ versioned-state
$% state-0
state-1
state-2
==
::
+$ serial @uv
+$ state-0 [%0 observers=(map serial observer:sur)]
+$ state-1 [%1 observers=(map serial observer:sur)]
+$ state-1 [%2 observers=(map serial observer:sur)]
::
++ got-by-val
|= [a=(map serial observer:sur) b=observer:sur]
@ -27,7 +29,7 @@
--
::
%- agent:dbug
=| state-1
=| state-2
=* state -
::
^- agent:gall
@ -67,7 +69,14 @@
^- (quip card _this)
=/ old-state !<(versioned-state old-vase)
?- -.old-state
%1 `this(state old-state)
%2 `this(state old-state)
::
%1
=. state [%2 observers.old-state]
%+ on-poke
%observe-action
!> ^- action:sur
[%watch %group-store /groups %group-leave-metadata]
::
%0
=. state [%1 observers.old-state]

View File

@ -0,0 +1,43 @@
/- spider, grp=group-store, met=metadata-store, hook=metadata-hook
/+ strandio, res=resource
::
=* strand strand:spider
=* raw-poke raw-poke:strandio
=* scry scry:strandio
::
^- thread:spider
|= arg=vase
=/ m (strand ,vase)
^- form:m
=+ !<([=update:grp ~] arg)
?. ?=(%remove-group -.update)
(pure:m !>(~))
;< =bowl:spider bind:m get-bowl:strandio
;< ~ bind:m
%+ raw-poke
[our.bowl %metadata-hook]
:- %metadata-hook-action
!> ^- metadata-hook-action:hook
[%remove (en-path:res resource.update)]
::
:: get metadata associated with group and remove it
;< =associations:met bind:m
%+ scry associations:met
;: weld
/gx/metadata-store/group
(en-path:res resource.update)
/noun
==
=/ entries=(list [g=group-path:met m=md-resource:met])
~(tap in ~(key by associations))
|- ^- form:m
=* loop $
?~ entries
(pure:m !>(~))
;< ~ bind:m
%+ raw-poke
[our.bowl %metadata-store]
:- %metadata-action
!> ^- metadata-action:met
[%remove g.i.entries m.i.entries]
loop(entries t.entries)