view Lib/IMPL/Web/Application/RestCustomResource.pm @ 200:a9dbe534d236

sync
author sergey
date Tue, 24 Apr 2012 02:34:49 +0400
parents
children 0c018a247c8a
line wrap: on
line source

package IMPL::Web::Application::RestCustomResource;
use strict;

use IMPL::lang qw(:declare :constants);
use IMPL::declare {
	require => {
		Exception => "IMPL::Exception",
		ArgumentException => '-IMPL::InvalidArgumentException',
		ForbiddenException => 'IMPL::Web::ForbiddenException'
	},
	base => {
		'IMPL::Web::Application::RestBaseResource' => '@_'
	}
};

BEGIN {
	public property get => PROP_GET | PROP_OWNERSET;
	public property put => PROP_GET | PROP_OWNERSET;
	public property post => PROP_GET | PROP_OWNERSET;
	public property delete => PROP_GET | PROP_OWNERSET;
}

sub CTOR {
	my ($this) = @_;
	
	die ArgumentException->new("parent") unless $this->parent; 
}

sub FetchChildResource {
	my ($this,$id,$action) = @_;
	
	return $this->contract->Transform( $this->GetImpl($action), { parent => $this, id => $id } )->FetchChildResource($id,$action);
}

sub GetImpl {
	my ($this,$action) = @_;
	
	my $method = $this->get or die ForbiddenException->new();
	return $this->$method($action);
}

sub PutImpl {
	my ($this,$action) = @_;
	my $method = $this->put or die ForbiddenException->new();
    return $this->$method($action);
}

sub PostImpl {
	my ($this,$action) = @_;
	my $method = $this->post or die ForbiddenException->new();
    return $this->$method($action);
}

sub DeleteImpl {
	my ($this,$action) = @_;
	my $method = $this->delete or die ForbiddenException->new();
    return $this->$method($action);
}

1;