use strict;
use vars qw($VERSION);
use Carp;
-use Symbol;
require 5.005;
$VERSION = eval $VERSION; # modperlstyle: convert the string into a number
# Remember subclasses we have "wrapped" submit() with _pre_submit()
-my %WrappedSubmitClassMethod = ();
+my %Presubmit_Added = ();
my %fields = (
authorization => undef,
$self->$key($value);
}
- unless ( $subclass->can('submit') eq $class->can('submit') ) {
- my $submit = qualify_to_ref('submit', $subclass);
+ # "wrap" submit with _pre_submit only once
+ unless ( $Presubmit_Added{$subclass} ) {
+ my $real_submit = $subclass->can('submit');
- # "wrap" submit ONLY once, cache info for later calls to new()
- if ( ! exists $WrappedSubmitClassMethod{$subclass} ) {
- no warnings 'redefine';
- no strict 'refs';
+ no warnings 'redefine';
+ no strict 'refs';
- $WrappedSubmitClassMethod{$subclass} = \&$submit;
- *{"${subclass}::submit"} = sub {
- my $self = shift;
- $self->_pre_submit();
- }
+ *{"${subclass}::submit"} = sub {
+ my $self = shift;
+ return unless $self->_pre_submit(@_);
+ return $real_submit->($self, @_);
}
- $self->{_child_submit} = $WrappedSubmitClassMethod{$subclass};
}
return $self;
$risk_transaction->submit();
if ($risk_transaction->is_success()) {
if ( $risk_transaction->fraud_score <= $self->maximum_fraud_score()) {
- $self->{_child_submit}->($self);
+ return 1;
} else {
$self->is_success(0);
$self->error_message('Excessive risk from risk management');
my $fraud_detection = $self->fraud_detect();
# early return if user does not want optional risk mgt
- return $self->{_child_submit}->($self,@_) unless $fraud_detection && length $fraud_detection;
+ return 1 unless $fraud_detection;
# Search for an appropriate FD module
foreach my $subclass ( q(Business::OnlinePayment::) . $fraud_detection,
}
}
}
-};
+}
sub content {
my($self,%params) = @_;