comparison lib/IMPL/Config/ValueDescriptor.pm @ 421:7798345304bc ref20150831

working on IMPL::Config, removed old stuff
author cin
date Sun, 16 Jul 2017 22:59:39 +0300
parents 3ed0c58e9da3
children b0481c071bea
comparison
equal deleted inserted replaced
420:df591e3afd10 421:7798345304bc
1 package IMPL::Config::ValueDescriptor; 1 package IMPL::Config::ValueDescriptor;
2 use strict; 2 use strict;
3 3
4 use IMPL::lang qw(:base); 4 use IMPL::lang qw(:base);
5 use IMPL::declare { 5 use IMPL::declare {
6 require => { 6 require => {
7 Descriptor => 'IMPL::Config::Descriptor' 7 Descriptor => 'IMPL::Config::Descriptor'
8 }, 8 },
9 base => [ 9 base => [
10 'IMPL::Object' => undef, 10 'IMPL::Object' => undef,
11 'Descriptor' => undef 11 'Descriptor' => undef
12 ], 12 ],
13 props => [ 13 props => [
14 value => 'rw', 14 value => 'rw',
15 raw => 'rw' 15 raw => 'rw',
16 ] 16 services => 'rw'
17 ]
17 }; 18 };
18 19
19 sub CTOR { 20 sub CTOR {
20 my ( $this, $value, $raw ) = @_; 21 my ( $this, $value, %opts) = @_;
21 22
22 $this->value($value); 23 $this->value($value);
23 $this->raw($raw); 24 $this->raw($opts{raw}) if exists $opts{raw};
25 $this->services($opts{services}) if exists $opts{services};
24 } 26 }
25 27
26 sub Activate { 28 sub Activate {
27 my ( $this, $context ) = @_; 29 my ( $this, $context ) = @_;
30 return $this->value if $this->raw;
28 31
29 return $this->raw 32 my $services = $this->services;
30 ? $this->value 33
31 : $this->_ActivateValue( $this->value, $context ); 34 $context->EnterScope( '$value: ' . $this->value, $services ) if $services;
35 my $value = $this->_ActivateValue( $this->value, $context );
36 $context->LeaveScope() if $services;
37 return $value;
32 } 38 }
33 39
34 sub _ActivateValue { 40 sub _ActivateValue {
35 my ( $this, $value, $context ) = @_; 41 my ( $this, $value, $context ) = @_;
36 42
37 if ( is( $value, Descriptor ) ) { 43 if ( is( $value, Descriptor ) ) {
38 return $value->Activate($context); 44 return $value->Activate($context);
39 } 45 }
40 elsif ( isarray($value) ) { 46 elsif ( isarray($value) ) {
41 return [ map $this->_ActivateValue($_, $context), @$value ]; 47 return [ map $this->_ActivateValue( $_, $context ), @$value ];
42 } 48 }
43 elsif ( ishash($value) ) { 49 elsif ( ishash($value) ) {
44 return { 50 return {
45 map { $_, $this->_ActivateValue( $value->{$_}, $context ) } 51 map { $_, $this->_ActivateValue( $value->{$_}, $context ) }
46 keys %$value 52 keys %$value
47 }; 53 };
48 } 54 }
49 else { 55 else {
50 return $value; 56 return $value;
51 } 57 }
52 } 58 }
53 59
54 1; 60 1;