view lib/IMPL/Config/Descriptor.pm @ 419:bbc4739c4d48 ref20150831

working on IMPL::Config::Container
author cin
date Sun, 29 Jan 2017 10:30:20 +0300
parents 3d24b10dd0d5
children df591e3afd10
line wrap: on
line source

package IMPL::Config::Descriptor;
use strict;
use IMPL::Exception();
use Scalar::Util qw(looks_like_number);

sub ACTIVATE_SINGLETON() { 1 }
sub ACTIVATE_CONTAINER() { 2 }
sub ACTIVATE_CONTEXT()   { 3 }
sub ACTIVATE_CALL()      { 4 }

my %activateNames = (
	singleton => ACTIVATE_SINGLETON,
	container => ACTIVATE_CONTAINER,
	context   => ACTIVATE_CONTEXT,
	call      => ACTIVATE_CALL
);

my %activateNamesLookup = map { $activateNames{$_}, $_ } keys %activateNames;

sub Activate {
	my ( $this, $context ) = @_;
	die IMPL::NotImplementedException->new();
}

sub ParseActivation {
	my $val = pop @_;

	return ACTIVATE_CALL unless $val;

	return grep $_ == $val,
	  ACTIVATE_SINGLETON,
	  ACTIVATE_CONTAINER,
	  ACTIVATE_CONTEXT, ACTIVATE_CALL ? $val : ACTIVATE_CALL
	  if looks_like_number($val);

	return $activateNames{ lc($val) } || ACTIVATE_CALL;
}

sub ActivationToString {
	my $val = pop @_;

	return ( $val && $activateNamesLookup{$val} ) || '';
}

1;

__END__

=pod

=head1 NAME

C<IMPL::Config::Descriptor> - the abstract base types for the service descriptors 

=head1 SYNOPSIS

=begin code

package MyDescriptor;

use IMPL::declare {
	base => {
		'IMPL::Config::Descriptor' => '@_'
	}
};

sub Activate {
	my ($this,$context) = @_;
	
	my $service = $context->GetService('service');
	my 
	 
}

=end code

=head1 MEMBERS

=head1 SEE ALSO

=over

=item * L<ReferenceDescriptor> - describes a reference to the service

=item * L<ServiceDescriptor> - descibes a service factory

=item * L<ValueDescriptor> - describes a value

=back

=cut