Mercurial > pub > Impl
view lib/IMPL/Config/ValueDescriptor.pm @ 419:bbc4739c4d48 ref20150831
working on IMPL::Config::Container
author | cin |
---|---|
date | Sun, 29 Jan 2017 10:30:20 +0300 |
parents | 3ed0c58e9da3 |
children | 7798345304bc |
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' ] }; sub CTOR { my ( $this, $value, $raw ) = @_; $this->value($value); $this->raw($raw); } sub Activate { my ( $this, $context ) = @_; return $this->raw ? $this->value : $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; } } 1;