diff --git a/pkgs/devout/devout.fnl b/pkgs/devout/devout.fnl index 368feb8..ea257be 100644 --- a/pkgs/devout/devout.fnl +++ b/pkgs/devout/devout.fnl @@ -53,6 +53,9 @@ :add (fn [_ event-string] (record-event db subscribers event-string)) :at-path (fn [_ path] (. db path)) :subscribe (fn [_ id callback terms] + (let [past-events (find-in-database db terms)] + (each [_ e (pairs past-events)] + (callback e))) (tset subscribers id {: callback : terms })) :unsubscribe (fn [_ id] (tset subscribers id nil)) })) diff --git a/pkgs/devout/test.fnl b/pkgs/devout/test.fnl index 05f3bc3..5119170 100644 --- a/pkgs/devout/test.fnl +++ b/pkgs/devout/test.fnl @@ -126,6 +126,16 @@ MINOR=17") (db:add sdb1-remove) (expect= (# received) 2))) +(example + "Subscribers get notifications of prior events for present devices" + (var received []) + (let [db (database) + subscriber (fn [e] (table.insert received e))] + (db:add sdb1-insert) + (db:add sda-uevent) + (db:subscribe :me subscriber {:devname "/dev/sdb1"}) + (expect= (# received) 1))) + (example "I can unsubscribe after subscribing" (var received [])