Net::SAJAX::Exception - Basic exception object for Net::SAJAX


Net-SAJAX documentation Contained in the Net-SAJAX distribution.

Index


Code Index:

NAME

Top

Net::SAJAX::Exception - Basic exception object for Net::SAJAX

VERSION

Top

This documentation refers to Net::SAJAX::Exception version 0.106

SYNOPSIS

Top

  use Net::SAJAX::Exception;

  Net::SAJAX::Exception->throw(
    message => 'This is some error message',
  );

DESCRIPTION

Top

This is a basic exception class for the Net::SAJAX library.

ATTRIBUTES

Top

message

Required. This is a string that contains the error message for the exception.

METHODS

Top

stringify

This method is used to return a string that will be given when this object is used in a string context. Classes inheriting from this class are welcome to override this method. By default (as in, in this class) this method simply returns the contents of the message attribute.

  my $error = Net::SAJAX::Exception->new(message => 'Error message');

  print $error; # Prints "Error message"

throw

This method will take a HASH as the argument and will pass this HASH to the constructor of the class, and then throw the newly constructed object. An extra option that will be stripped is class. This option will actually construct a different class, where this class is in the package space below the specified class.

  eval {
    Net::SAJAX::Exception->throw(
      class   => 'ClassName',
      message => 'An error occurred',
    );
  };

  print ref $@; # Prints Net::SAJAX::Exception::ClassName

DEPENDENCIES

Top

* Carp
* English
* Moose 0.77
* MooseX::StrictConstructor 0.08
* namespace::clean 0.04

AUTHOR

Top

Douglas Christopher Wilson, <doug at somethingdoug.com>

BUGS AND LIMITATIONS

Top

Please report any bugs or feature requests to bug-net-sajax at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-SAJAX. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

I highly encourage the submission of bugs and enhancements to my modules.

LICENSE AND COPYRIGHT

Top


Net-SAJAX documentation Contained in the Net-SAJAX distribution.

package Net::SAJAX::Exception;

use 5.008003;
use strict;
use warnings 'all';

###############################################################################
# METADATA
our $AUTHORITY = 'cpan:DOUGDUDE';
our $VERSION   = '0.106';

###############################################################################
# MOOSE
use Moose 0.77;
use MooseX::StrictConstructor 0.08;

###############################################################################
# MODULE IMPORTS
use Carp qw(croak);
use English qw(-no_match_vars);

###############################################################################
# ALL IMPORTS BEFORE THIS WILL BE ERASED
use namespace::clean 0.04 -except => [qw(meta)];

###############################################################################
# OVERLOADED FUNCTIONS
__PACKAGE__->meta->add_package_symbol(q{&()}  => sub {                  });
__PACKAGE__->meta->add_package_symbol(q{&(""} => sub { shift->stringify });

###############################################################################
# ATTRIBUTES
has message => (
	is            => 'ro',
	isa           => 'Str',
	documentation => q{The error message},
	required      => 1,
);

###############################################################################
# METHODS
sub stringify {
	my ($self) = @_;

	# The default stringify method just returns the contents of the message
	# attribute.
	return $self->message;
}
sub throw {
	my ($class, %args) = @_;

	if (blessed $class) {
		# Since $class is blessed, this was probably called as a method, so
		# make $class the class name.
		$class = blessed $class;
	}

	my $exception_class = delete $args{class};

	if (!defined $exception_class) {
		croak $class->new(%args);
	}

	# Prefix this class to the beginning of the exception class
	$exception_class = sprintf '%s::%s', $class, $exception_class;

	if ($exception_class !~ m{\A \w+ (?: :: \w+)* \z}imsx) {
		# The class name doesn't seem good, so toss it because we don't want
		# to be evaulating bad code.
		croak $class->new(
			message => 'The provided class name seemed like a bad name',
		);
	}

	# Attempt to load the exception class
	## no critic qw(BuiltinFunctions::ProhibitStringyEval)
	if (!eval "use $exception_class; 1") {
		croak $class->new(
			message => sprintf 'Unable to initiate the %s error class: %s',
				$exception_class, $EVAL_ERROR
		);
	}

	croak $exception_class->new(%args);
}

###############################################################################
# MAKE MOOSE OBJECT IMMUTABLE
__PACKAGE__->meta->make_immutable;

1;

__END__