package RWDE::Proxy;

use strict;
use warnings;

use RWDE::AbstractFactory;

use vars qw($VERSION);
$VERSION = sprintf "%d", q$Revision: 507 $ =~ /(\d+)/;

=pod

=head1 RWDE::Proxy

Proxy object for getting the specific functionality of a particular object

=cut

=head2 invoke({ class => class_name, function => function_name, params => function_params})

To avoid require, eval and invocation from within a block of code, which is suboptimal, 
the proxy object instantiates the object, invokes the function with the given params hash and returns the result.

=cut

sub invoke {
  my ($self,$params) = @_;

  my $function = $$params{'function'} 
    or throw RWDE::DevelException({  info => 'Proxy::Parameter error - function not specified'});

  my $term = RWDE::AbstractFactory->instantiate($params);

  return $term->$function($params);
}

1;