comparison Lib/IMPL/Config/Reference.pm @ 198:2ffe6f661605

Implemented IMPL::Web::Handler::RestController fixes in IMPL::Serialization completed IMPL::Web::Application::RestResource added IMPL::Web::Handler::JSONView added IMPL::Web::RestContract
author cin
date Fri, 20 Apr 2012 16:06:36 +0400
parents a705e848dcc7
children
comparison
equal deleted inserted replaced
197:6b1dda998839 198:2ffe6f661605
1 package IMPL::Config::Reference; 1 package IMPL::Config::Reference;
2 use strict; 2 use strict;
3 3
4 use IMPL::Exception; 4 use IMPL::Exception;
5
6 __PACKAGE__->PassThroughArgs;
7 5
8 sub restore { 6 sub restore {
9 my ($self,$data,$surrogate) = @_; 7 my ($self,$data,$surrogate) = @_;
10 8
11 my @path; 9 my @path;
12 10
13 my ($tagTarget,$target) = splice @$data, 0, 2; 11 my ($tagTarget,$target) = splice @$data, 0, 2;
14 12
15 die new IMPL::Exception('A traget tag must be the first tag in the reference specification') unless $tagTarget eq 'target'; 13 die new IMPL::Exception('A traget tag must be the first tag in the reference specification') unless $tagTarget eq 'target';
16
17 while(my ($method,$args) = splice @$data, 0, 2 ) { 14 while(my ($method,$args) = splice @$data, 0, 2 ) {
18 $target = $self->_Invoke({ method => $method, args => $args}); 15 $target = $self->_InvokeMember($target,{ method => $method, args => $args});
19 } 16 }
20 return $target; 17 return $target;
21 } 18 }
22 19
23 sub _InvokeMember { 20 sub _InvokeMember {
24 my ($self,$object,$member) = @_; 21 my ($self,$object,$member) = @_;
25 22
26 my $method = $member->{method}; 23 my $method = $member->{method};
27 24 return
28 local $@;
29 return eval {
30 ref $object eq 'HASH' ? 25 ref $object eq 'HASH' ?
31 $object->{$method} 26 $object->{$method}
32 : 27 :
33 $object->$method( 28 $object->$method(
34 exists $member->{args} ? 29 exists $member->{args} ?
35 _as_list($member->{args}) 30 _as_list($member->{args})
36 : 31 :
37 () 32 ()
38 ) 33 )
39 }; 34 ;
40 } 35 }
41 36
42 sub _as_list { 37 sub _as_list {
43 ref $_[0] ? 38 ref $_[0] ?
44 (ref $_[0] eq 'HASH' ? 39 (ref $_[0] eq 'HASH' ?