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> как фабрику и передавая туда параметры