Revision 296 (by ahitrov, 2013/03/26 17:59:01) Promosite (anthill) project source
package promosuite::State;

# ----------------------------------------------------------------------------
# Состояние проекта promosuite.
# В этом пакете обязательно должны быть методы new(), info().
#
# При создании объекта Contenido::State будет создан также объект
#    класса promosuite::State. Он будет доступен (этот метод вернет объект)
#    через метод, имеющий имя равное результату выполнения следующего 
#    фрагмента perl-кода: lc('promosuite').
# ----------------------------------------------------------------------------

use strict;
use vars qw($VERSION $AUTOLOAD);
$VERSION = '1.0';

sub new {
	my ($proto) = @_;
	my $class = ref($proto) || $proto;
	my $self = {};
	bless($self, $class);

##	Далее настройки проекта на основе переменных из config.mk в виде:
##	$self->{variable_name} = 'VARIABLE_NAME_SURROUNDED_BY_@@';

	$self->{contenido_notab} = 1;

	$self->_init_();

	return $self;	
}

# Вывод информации об объекте...
sub info
{
	my $self = shift;
	return undef		unless ref($self);

	warn "Contenido: Объект promosuite::State заполнен следующими параметрами:\n";
	foreach my $attribute (sort (keys( %{ $self->{attributes} } )))
	{
		my $la = length($attribute);
		warn "\t".$attribute.("\t" x (2-int($la/8))).": ".$self->{$attribute}."\n";
	}
}


# Инициализация.
#  - Создает внутри объекта хэш с типами полей - это нужно для быстрой
#    работы метода AUTOLOAD...
sub _init_
{
	my $self = shift;

## Здесь список параметров, указанных в new()
	foreach my $attribute ( qw(
				contenido_notab
			 ) )
	{
		$self->{attributes}->{ $attribute } = 'SCALAR';
	}
}


# ----------------------------------------------------------------------------
# Это умный AUTOLOAD. Ловит методов для установки/чтения полей...
# Версия 0.2
# ----------------------------------------------------------------------------
sub AUTOLOAD
{
	my $self = shift;
	my $attribute = $AUTOLOAD;

	$attribute =~ s/.*:://;
	return undef	unless	$attribute =~ /[^A-Z]/;		# Отключаем методы типа DESTROY

	if (! exists($self->{attributes}->{$attribute}))
	{
		warn "Contenido Error (promosuite::State): Вызов метода, для которого не существует обрабатываемого свойства: ->$attribute()\n";
		return	undef;
	}

	$self->{ $attribute } = shift @_	if (scalar(@_) > 0);
	return $self->{ $attribute };
}


1;