Mercurial > pub > Impl
diff Lib/IMPL/template.pm @ 194:4d0e1962161c
Replaced tabs with spaces
IMPL::Web::View - fixed document model, new features (control classes, document constructor parameters)
author | cin |
---|---|
date | Tue, 10 Apr 2012 20:08:29 +0400 |
parents | ae8072f2f2a3 |
children |
line wrap: on
line diff
--- a/Lib/IMPL/template.pm Tue Apr 10 08:13:22 2012 +0400 +++ b/Lib/IMPL/template.pm Tue Apr 10 20:08:29 2012 +0400 @@ -5,42 +5,42 @@ use IMPL::Class::Template(); sub import { - shift; - my %args = @_; - - my $class = caller; - - my @paramNames = grep m/\w+/, @{$args{parameters} || []}; - my $declare = $args{declare}; - my @isa = (@{$args{base} || []}, $class); - my %instances; - - no strict 'refs'; - - push @{"${class}::ISA"}, 'IMPL::Class::Template'; - - *{"${class}::$_"} = sub { die IMPL::InvalidOperationException("A template parameter isn't available here") } - foreach @paramNames; - - *{"${class}::spec"} = sub { - my ($self,@params) = @_; - - my $specClass = $self->makeName(@params); - - return $specClass if $instances{$specClass}; - - $instances{$specClass} = 1; - - for (my $i=0; $i < @paramNames; $i++) { - my $param = $params[$i]; - *{"${specClass}::$paramNames[$i]"} = sub { $param }; - } - - @{"${specClass}::ISA"} = @isa; - - &$declare($specClass) if $declare; - return $specClass; - }; + shift; + my %args = @_; + + my $class = caller; + + my @paramNames = grep m/\w+/, @{$args{parameters} || []}; + my $declare = $args{declare}; + my @isa = (@{$args{base} || []}, $class); + my %instances; + + no strict 'refs'; + + push @{"${class}::ISA"}, 'IMPL::Class::Template'; + + *{"${class}::$_"} = sub { die IMPL::InvalidOperationException("A template parameter isn't available here") } + foreach @paramNames; + + *{"${class}::spec"} = sub { + my ($self,@params) = @_; + + my $specClass = $self->makeName(@params); + + return $specClass if $instances{$specClass}; + + $instances{$specClass} = 1; + + for (my $i=0; $i < @paramNames; $i++) { + my $param = $params[$i]; + *{"${specClass}::$paramNames[$i]"} = sub { $param }; + } + + @{"${specClass}::ISA"} = @isa; + + &$declare($specClass) if $declare; + return $specClass; + }; } 1; @@ -62,19 +62,19 @@ use IMPL::Class::Property; use IMPL::template ( - parameters => [qw(TKey TValue))], - base => [qw(IMPL::Object IMPL::Object::Autofill)], - declare => sub { - my ($class) = @_; - public $class->CreateProperty(key => prop_get | owner_set, { type => $class->TKey } ); - public $class->CreateProperty(value => prop_all, { type => $class->TValue} ); - - $class->PassThroughArgs; - } + parameters => [qw(TKey TValue))], + base => [qw(IMPL::Object IMPL::Object::Autofill)], + declare => sub { + my ($class) = @_; + public $class->CreateProperty(key => prop_get | owner_set, { type => $class->TKey } ); + public $class->CreateProperty(value => prop_all, { type => $class->TValue} ); + + $class->PassThroughArgs; + } ); BEGIN { - public property id => prop_get | owner_set, { type => 'integer'}; + public property id => prop_get | owner_set, { type => 'integer'}; } __PACKAGE__->PassThroughArgs; @@ -85,32 +85,32 @@ use IMPL::lang; use IMPL::template( - parameters => [qw(TKey TValue)], - base => [qw(IMPL::Object)], - declare => sub { - my ($class) = @_; - my $item_t = spec KeyValuePair($class->TKey,$class->TValue); - - public $class->CreateProperty(items => prop_get | prop_list, { type => $item_t } ); - - $class->static_accessor( ItemType => $item_t ); - } + parameters => [qw(TKey TValue)], + base => [qw(IMPL::Object)], + declare => sub { + my ($class) = @_; + my $item_t = spec KeyValuePair($class->TKey,$class->TValue); + + public $class->CreateProperty(items => prop_get | prop_list, { type => $item_t } ); + + $class->static_accessor( ItemType => $item_t ); + } ) sub Add { - my ($this,$key,$value) = @_; - - die new IMPL::ArgumentException( key => "Invalid argument type" ) unless is $key, $this->TKey; - die new IMPL::ArgumentException( value => "Invalid argument type" ) unless is $value, $this->TValue; - - $this->items->AddLast( $this->ItemType->new( key => $key, value => $value ) ); + my ($this,$key,$value) = @_; + + die new IMPL::ArgumentException( key => "Invalid argument type" ) unless is $key, $this->TKey; + die new IMPL::ArgumentException( value => "Invalid argument type" ) unless is $value, $this->TValue; + + $this->items->AddLast( $this->ItemType->new( key => $key, value => $value ) ); } package main; use IMPL::require { - TFoo => 'Some::Package::Foo', - TBar => 'Some::Package::Bar' + TFoo => 'Some::Package::Foo', + TBar => 'Some::Package::Bar' }; my $TCol = spec MyCollection(TFoo, TBar);