comparison Lib/IMPL/Web/Application/RestBaseResource.pm @ 202:5146e17a7b76

IMPL::Web::Application::RestResource fixes, documentation
author sergey
date Wed, 25 Apr 2012 02:49:23 +0400
parents 0c018a247c8a
children c8fe3f84feba
comparison
equal deleted inserted replaced
201:0c018a247c8a 202:5146e17a7b76
79 79
80 sub FetchChildResource { 80 sub FetchChildResource {
81 return undef; 81 return undef;
82 } 82 }
83 83
84 sub InvokeMember {
85 my ($this,$method,$action) = @_;
86
87 die ArgumentException->new("method","No method information provided") unless $method;
88
89 #normalize method info
90 if (not ref $method) {
91 $method = {
92 method => $method
93 };
94 }
95
96 if (ref $method eq 'HASH') {
97 my $member = $method->{method} or die InvalidOpException->new("A member name isn't specified");
98
99 my @args;
100
101 if (my $params = $method->{parameters}) {
102 if (ref $params eq 'HASH') {
103 @args = map {
104 $_,
105 $this->MakeParameter($params->{$_},$action)
106 } keys %$params;
107 } elsif (ref $params eq 'ARRAY') {
108 @args = map $this->MakeParameter($_,$action), @$params;
109 } else {
110 @args = ($this->MakeParameter($params,$action));
111 }
112 }
113 return $this->target->$member(@args);
114 } elsif (ref $method eq TResolve) {
115 return $method->Invoke($this->target);
116 } elsif (ref $method eq 'CODE') {
117 return $method->($this,$action);
118 } else {
119 die InvalidOpException->new("Unsupported type of the method information", ref $method);
120 }
121 }
122
123 sub MakeParameter {
124 my ($this,$param,$action) = @_;
125
126 if ($param) {
127 if (is $param, TTransform ) {
128 return $param->Transform($this,$action->query);
129 } elsif ($param and not ref $param) {
130 return $action->query->param($param);
131 } else {
132 die new InvalidOpException->new("Unsupported parameter mapping", $param);
133 }
134 } else {
135 return undef;
136 }
137 }
138
139 84
140 1; 85 1;
141 86
142 __END__ 87 __END__
143 88