Context-Singleton

 view release on metacpan or  search on metacpan

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

package Sample::Context::Singleton::Frame::001::Unique::DB;
use parent 'Context::Singleton::Frame';

sub new {
	my ($class, @params) = @_;
	my $self = $class->SUPER::new (@params);

	unless (ref $class) {
		$self->{db} = $self->default_db_class->new;
		$self->contrive_builders if $self->can ('contrive_builders' );
	}

	return $self;
}

package Sample::Context::Singleton::Frame::002::Resolve::Dependencies;
our @ISA = 'Sample::Context::Singleton::Frame::001::Unique::DB';

sub contrive_builders {
	my ($self) = @_;

	$self->db->contrive (sum => (
		class => 'Calc',
		builder => 'sum',
		dep => [ 'a', 'b' ],
	));

	$self->db->contrive (diff => (
		class => 'Calc',
		builder => 'diff',
		dep => [ 'a', 'b' ],
	));

	$self->db->contrive (mul => (
		class => 'Calc',
		builder => 'mul',
		dep => [ 'a', 'b' ],
	));

	$self->db->contrive (xmul => (
		class => 'Calc',
		builder => 'mul',
		dep => [ 'sum', 'diff' ],
	));

	$self->db->contrive (without_dependencies => (
		value => 'value-42',
	));

	$self->db->contrive (with_default => (
		as => sub { join '/', @_ },
		default => { foo => 'value', bar => 42 },
		dep => [ 'foo', 'bar' ],
	));

	$self->db->contrive (with_deps => (
		as => sub { join '-', @_ },
		dep => [ 'foo', 'bar' ],
	));

	$self->db->contrive (cascaded => (
		as => sub { join ':', 'cascaded', @_ },
		default => { param => 'param' },
		dep => [ 'param', 'with_deps' ],
	));

	$self->db->trigger (with_trigger => sub {
		my $copy = 'copy_trigger';
		$self->proclaim ($copy, $_[0]) unless $self->is_deduced ($copy);
	});

	$self->proclaim ('Calc', 'Sample::Context::Singleton::Frame::003::Calc');
}

package Sample::Context::Singleton::Frame::003::Calc;

sub sum {
	my ($a, $b) = @_;

	return $a + $b;
}

sub diff {
	my ($a, $b) = @_;

	return $a - $b;
}
sub mul {
	my ($a, $b) = @_;

	return $a * $b;
}

package Sample::Context::Singleton::Frame::__::Basic;
our @ISA = 'Sample::Context::Singleton::Frame::001::Unique::DB';

sub contrive_builders {
	my ($self) = @_;

	$self->contrive (constant => (
		value => 'value-42',
	));

	$self->contrive (cascaded => (
		dep => [ 'constant' ],
		as => sub { "cascaded:$_[0]" },
	));

	$self->contrive (with_deps => (
		dep => [ 'unknown' ],
		as => sub { "with_deps:$_[0]" },
	));

	$self->contrive (with_multi_deps => (
		dep => [ 'unknown', 'constant' ],
		as => sub { "with_deps:$_[0]:$_[1]" },
	));

	$self->contrive (with_default => (
		dep => [ 'unknown', 'constant' ],
		default => { unknown => 'some' },
		as => sub { join ':', with_default => @_ },
	));

	$self->contrive (inherited => (
		dep => [ 'with_multi_deps' ],
		as => sub { join ':', inherited => @_ },
	));

	$self->contrive (with_default_ref => (
		dep => [ 'with_default' ],
		as => sub { my ($value) = @_; \ $value },
	));

	$self->db->trigger (with_trigger => sub {
		my $copy = 'copy_trigger';
		$self->proclaim ($copy, $_[0]) unless $self->is_deduced ($copy);
	});
}

1;



( run in 1.159 second using v1.01-cache-2.11-cpan-df04353d9ac )