audit_spy 1.0.0
audit_spy: ^1.0.0 copied to clipboard
Visionary Software Solutions Audit Spy => Add some Audit Logging to iSpy
example/audit_spy_example.dart
import 'dart:math';
import 'package:audit_spy/audit_spy.dart';
import 'package:i_spy/i_spy.dart';
import 'package:logging/logging.dart';
final class Ping implements Event {}
final class Pong implements Event {}
final MutableAuditingMediator<Pong> pongMediator =
auditedSimpleEventMediator<Pong>();
final MutableAuditingMediator<Ping> pingMediator =
auditedSimpleEventMediator<Ping>();
final fate = Random();
final class Pinger
with BasicObservable<Ping>
implements Observable<Ping>, Observer<Pong> {
final Set<Subscription<Ping>> stored = {};
Pinger() {
pongMediator.add(this);
add(pingMediator);
}
void ping() => notifyObservers(Ping());
@override
void update(final Pong e) {
if (fate.nextBool()) {
ping();
}
}
@override
Set<Subscription<Ping>> get subscriptions => stored;
}
final class Ponger
with BasicObservable<Pong>
implements Observable<Pong>, Observer<Ping> {
final Set<Subscription<Pong>> stored = {};
Ponger() {
pingMediator.add(this);
add(pongMediator);
}
@override
void update(final Ping e) {
if (fate.nextBool()) {
pong();
}
}
void pong() => notifyObservers(Pong());
@override
Set<Subscription<Pong>> get subscriptions => stored;
}
/// Demonstrates that [Logging] goes to console.
void main() {
final caught = [];
final Pinger ping = Pinger();
final Ponger pong = Ponger();
Logger.root.onRecord.listen((record) {
print(record);
caught.add(record);
});
ping.ping();
pong.pong();
assert(caught.isNotEmpty);
}