Context-Singleton

 view release on metacpan or  search on metacpan

lib/Context/Singleton/Frame.pm  view on Meta::CPAN

		$self->{root}   = $class->{root};
		$self->{parent} = $class;
		$self->{db}     = $class->{db};
		$self->{depth}  = $class->{depth} + 1;

		$class = ref $class;
	}

	unless ($self->{root}) {
		$self->{root} = $self;
		Scalar::Util::weaken $self->{root};
	}

	$self = bless $self, $class;

	$self->proclaim (%proclaim);

	return $self;
}

sub depth {

lib/Context/Singleton/Frame/Promise.pm  view on Meta::CPAN


use v5.10;
use strict;
use warnings;

package Context::Singleton::Frame::Promise;

our $VERSION = v1.0.5;

use Scalar::Util qw[ weaken ];

use namespace::clean;

sub new {
	my ($class, %params) = @_;

	bless {
		depth           => $params{depth},
		is_resolvable   => 0,
		dependencies    => [],

lib/Context/Singleton/Frame/Promise.pm  view on Meta::CPAN

}

sub _listeners {
	$_[0]->{listeners};
}

sub add_listeners {
	my ($self, @new_listeners) = @_;

	# - Listener life time is a frame it is created for
	#   weaken helps tracking them (children do listen parents here)
	# - Listener is another promise
	# - Listeners are stored in linked list

	my $head = $self->_listeners;
	for my $listener (@new_listeners) {
		my $entry = $head->{next} = {
			prev     => $head,
			next     => $head->{next},
			listener => $listener,
		};

		$entry->{next}{prev} = $head->{next}
			if $entry->{next};

		Scalar::Util::weaken $entry->{listener};

		$self->_notify_listener ($entry->{listener})
			if $self->is_deducible;
	}

	$self;
}

sub listen {
	my ($self, @promises) = @_;

lib/Context/Singleton/Frame/Promise.pm  view on Meta::CPAN

	$_[0]->{dependencies};
}

sub add_dependencies {
	my ($self, @new_dependencies) = @_;

	@new_dependencies = grep defined, @new_dependencies;

	for my $dependency (@new_dependencies) {
		push @{ $self->_dependencies }, $dependency;
		#Scalar::Util::weaken ($self->_dependencies->[-1]);
	}

	$_->add_listeners ($self) for @new_dependencies;

	$self;
}

sub dependencies {
	@{ $_[0]->_dependencies };
}

lib/Context/Singleton/Frame/Result.pm  view on Meta::CPAN

sub new {
	my ($class, $resolver, $value) = @_;
	my $self = bless {
		resolver => $resolver,
		value    => $value,
	};

	die "Oops"
		unless $resolver->isa ('Context::Singleton::Frame');

	Scalar::Util::weaken ($self->{resolver});

	return $self;
}

sub resolver {
	$_[0]->{resolver};
}

sub value {
	$_[0]->{value};



( run in 0.634 second using v1.01-cache-2.11-cpan-65fba6d93b7 )