NAME
Ryu::Observable - plus ça change
SYNOPSIS
# Set initial value
my $observed = Ryu::Observable->new(123)
# and a callback for any changes
->subscribe(sub { print "New value, is now: $_\n" });
# Basic numeric increment/decrement should trigger a notification
++$observed;
# To assign a new value, use ->set_numeric or ->set_string
$observed->set_numeric(88);
DESCRIPTION
Simple monitorable variables.
METHODS
Public API, such as it is.
as_string
Returns the string representation of this value.
as_number
as_numeric
Returns the numeric representation of this value.
(this method is available as as_number
or as_numeric
, both operate the same way)
new
Instantiates with the given value.
my $observed = Ryu::Observable->new('whatever');
subscribe
Requests notifications when the value changes.
my $observed = Ryu::Observable->new('whatever')
->subscribe(sub { print "New value - $_\n" });
unsubscribe
Removes an existing callback.
my $code;
my $observed = Ryu::Observable->new('whatever')
->subscribe($code = sub { print "New value - $_\n" })
->set_string('test')
->unsubscribe($code);
set
Sets the value to the given scalar, then notifies all subscribers (regardless of whether the value has changed or not).
value
Returns the raw value.
set_numeric
set_number
Applies a new numeric value, and notifies subscribers if the value is numerically different to the previous one (or if we had no previous value).
Returns $self
.
(this method is available as set_number
or set_numeric
, both operate the same way)
set_string
Applies a new string value, and notifies subscribers if the value stringifies to a different value than the previous one (or if we had no previous value).
Returns $self
.
source
Returns a Ryu::Source, which will emit each new value until the observable is destroyed.
LVALUE METHODS
These require Sentinel to be installed.
lvalue_str
Returns a Sentinel lvalue accessor for the string value.
This can be used with refaliasing or foreach
loops to reduce typing:
for($observable->lvalue_str) {
chomp;
s/_/-/g;
}
Any attempt to retrieve or set the value will be redirected to "as_string" or "set_string" as appropriate.
lvalue_num
Returns a Sentinel lvalue accessor for the numeric value.
This can be used with refaliasing or foreach
loops to reduce typing:
for($observable->lvalue_num) {
++$_;
$_ *= 3;
}
Any attempt to retrieve or set the value will be redirected to "as_number" or "set_number" as appropriate.
finish
Mark this observable as finished.
No further events or notifications will be sent.
METHODS - Internal
Don't use these.
notify_all
Notifies all currently-subscribed callbacks with the current value.
AUTHOR
Tom Molesworth <TEAM@cpan.org>
.
LICENSE
Copyright Tom Molesworth 2011-2023. Licensed under the same terms as Perl itself.