Mercurial > pub > Impl
diff Lib/IMPL/Object/Factory.pm @ 181:47dac58691ee
New templating system, small fixes
author | sourcer |
---|---|
date | Thu, 26 Jan 2012 01:15:57 +0400 |
parents | d1676be8afcc |
children | 6c0fee769b0c |
line wrap: on
line diff
--- a/Lib/IMPL/Object/Factory.pm Fri Dec 30 23:40:00 2011 +0300 +++ b/Lib/IMPL/Object/Factory.pm Thu Jan 26 01:15:57 2012 +0400 @@ -3,12 +3,12 @@ use parent qw(IMPL::Object IMPL::Object::Serializable); -use IMPL::Class::Property; +use IMPL::lang qw(:declare :constants); BEGIN { - public property factory => prop_get | owner_set; - public property parameters => prop_get | owner_set; - public property method => prop_get | owner_set; + public property factory => PROP_GET | PROP_OWNERSET; + public property parameters => PROP_GET | PROP_OWNERSET; + public property method => PROP_GET | PROP_OWNERSET; } # custom factory, overrides default @@ -33,7 +33,7 @@ my %args = @$data; if ($surrogate) { - $surrogate->callCTOR($args{factory},$args{parameters},$args{method}); + $surrogate->self::CTOR($args{factory},$args{parameters},$args{method}); return $surrogate; } else { return $class->new($args{factory},$args{parameters},$args{method}); @@ -44,12 +44,19 @@ my $this = shift; if (my $method = $this->method) { - $this->factory->$method($this->parameters ? (_as_list($this->parameters),@_) : @_); + $this->factory->$method($this->MergeParameters(@_)); } else { - $this->factory->new($this->parameters ? (_as_list($this->parameters),@_) : @_); + $this->factory->new($this->MergeParemeters(@_)); } } +sub MergeParameters { + my $this = shift; + + $this->parameters ? (_as_list($this->parameters),@_) : @_; +} + + sub _as_list { ref $_[0] ? (ref $_[0] eq 'HASH' ? @@ -169,6 +176,13 @@ развернуты в список и переданы оператору C< new > фабрике из свойства C< factory >, за ними будут следовать параметры непосредственно текущей фабрики. +=item C<MergeParameters(@params)> + +Метод смешивающий фиксированные параметры с параметрами переданными методу C<new(@params)>. По умолчанию +добавляет пареметры фабрики в конец к фиксированным параметрам. Для изменения этого поведения требуется +переопределить данный метод. Также этот метод можно переопределить для передачи параметров, значения +которых вычисляются. + =item C<new(@params)> Создает новый объект, используя свйство C<factory> как фабрику и передавая туда параметры