Mercurial > pub > Impl
view lib/IMPL/Config/ValueDescriptor.pm @ 427:09e0086a82a7 ref20150831 tip
Merge
author | cin |
---|---|
date | Tue, 15 May 2018 00:51:33 +0300 |
parents | b0481c071bea |
children |
line wrap: on
line source
package IMPL::Config::ValueDescriptor; use strict; use IMPL::lang qw(:base); use IMPL::declare { require => { Descriptor => 'IMPL::Config::Descriptor' }, base => [ 'IMPL::Object' => undef, 'Descriptor' => undef ], props => [ value => 'rw', raw => 'rw', services => 'rw' ] }; sub CTOR { my ( $this, $value, %opts) = @_; $this->value($value); $this->raw($opts{raw}) if exists $opts{raw}; $this->services($opts{services}) if exists $opts{services}; } sub Activate { my ( $this, $context ) = @_; return $this->value if $this->raw; return $this->_ActivateValue( $this->value, $context ); } sub _ActivateValue { my ( $this, $value, $context ) = @_; if ( is( $value, Descriptor ) ) { return $value->Activate($context); } elsif ( isarray($value) ) { return [ map $this->_ActivateValue( $_, $context ), @$value ]; } elsif ( ishash($value) ) { return { map { $_, $this->_ActivateValue( $value->{$_}, $context ) } keys %$value }; } else { return $value; } } sub GetName { return '$value: ' . shift->value; } 1;