Business-CyberSource

 view release on metacpan or  search on metacpan

lib/Business/CyberSource/Request.pm  view on Meta::CPAN

package Business::CyberSource::Request;
use 5.010;
use strict;
use warnings;
use namespace::autoclean;

our $VERSION = '0.010008'; # VERSION

use Moose;
extends 'Business::CyberSource::Message';
with qw(
  MooseX::RemoteHelper::CompositeSerialization
);

use MooseX::Types::CyberSource qw( PurchaseTotals Service Items InvoiceHeader OtherTax ShipFrom ShipTo );

use Module::Runtime qw( use_module );

our @CARP_NOT = ( 'Class::MOP::Method::Wrapped', __PACKAGE__ );

before serialize => sub {    ## no critic qw( Subroutines::RequireFinalReturn )
    my $self = shift;

    if ( !$self->has_total && ( !$self->has_items || $self->items_is_empty ) ) {
        die                  ## no critic ( ErrorHandling::RequireCarping )
          use_module('Business::CyberSource::Exception::ItemsOrTotal')->new;
    }
};

sub add_item {
    my ( $self, $args ) = @_;

    my $item;
    unless ( blessed $args
        && $args->isa('Business::CyberSource::RequestPart::Item') )
    {
        $item =
          use_module('Business::CyberSource::RequestPart::Item')->new($args);
    }
    else {
        $item = $args;
    }
    $self->items( [] ) if !$self->has_items;

    return $self->_push_item($item);
}

sub _build_service {
    return use_module('Business::CyberSource::RequestPart::Service')->new;
}

has comments => (
    remote_name => 'comments',
    isa         => 'Str',
    traits      => ['SetOnce'],
    is          => 'rw',
);

has service => (
    isa        => Service,
    is         => 'ro',
    lazy_build => 1,
    required   => 1,
    coerce     => 1,
    reader     => undef,



( run in 1.078 second using v1.01-cache-2.11-cpan-39bf76dae61 )