Mercurial > pub > Impl
comparison lib/IMPL/Config/ValueDescriptor.pm @ 415:3d24b10dd0d5 ref20150831
working on IMPL::Config::Container
author | cin |
---|---|
date | Tue, 20 Oct 2015 07:32:55 +0300 |
parents | c6e90e02dd17 |
children | 3ed0c58e9da3 |
comparison
equal
deleted
inserted
replaced
414:ec6f2d389d1e | 415:3d24b10dd0d5 |
---|---|
1 package IMPL::Config::ValueDescriptor; | |
2 use strict; | |
3 | |
4 use IMPL::lang qw(:base); | |
5 use IMPL::declare { | |
6 require => { | |
7 Descriptor => 'IMPL::Config::Descriptor' | |
8 }, | |
9 base => [ | |
10 'IMPL::Object' => undef, | |
11 'Descriptor' => undef | |
12 ], | |
13 props => [ | |
14 value => 'rw', | |
15 raw => 'rw' | |
16 ] | |
17 }; | |
18 | |
19 sub CTOR { | |
20 my ( $this, $value, $raw ) = @_; | |
21 | |
22 $this->value($value); | |
23 $this->raw($raw); | |
24 } | |
25 | |
26 sub Activate { | |
27 my ( $this, $context ) = @_; | |
28 | |
29 return $this->raw | |
30 ? $this->value | |
31 : $this->_ActivateValue( $this->value, $context ); | |
32 } | |
33 | |
34 sub _ActivateValue { | |
35 my ( $this, $value, $context ) = @_; | |
36 | |
37 if ( is( $value, Descriptor ) ) { | |
38 return $value->Activate($context); | |
39 } | |
40 elsif ( isarray($value) ) { | |
41 return [ map $this->_ActivateValue($_), @$value ]; | |
42 } | |
43 elsif ( ishash($value) ) { | |
44 return { | |
45 map { $_, $this->_ActivateValue( $value->{$_} ) } | |
46 keys %$value | |
47 }; | |
48 } | |
49 else { | |
50 return $value; | |
51 } | |
52 } | |
53 | |
54 1; |