NAME

Message::Stack - Deal with a "stack" of messages

VERSION

version 0.22

SYNOPSIS

my $stack = Message::Stack->new;

$stack->add(Message::Stack::Message->new(
  msgid     => 'something_happened',
  level     => 'error',
  scope     => 'login_formm',
  subject   => 'username',
  text      => 'Something happened!'
));
# Or... for those that want to type less
$stack->add({
  msgid     => 'something_else_happened',
  level     => 'error',
  scope     => 'login_form',
  subject   => 'password',
  text      => 'Something else happened!'
});

# ...
my $errors = $stack->for_level('error');
# Or
my $login_form_errors = $stack->for_scope('login_form');
$login_form_errors->for_subject('username');
print "Username has ".$login_form_errors->count." errors.\n";

DESCRIPTION

Message::Stack provides a mechanism for storing messages until they can be consumed. A stack is used to retain order of occurrence. Each message may have a id, level, scope, subject and text. Consult the documentation for Message::Stack::Message for an explanation of these attributes.

This is not a logging mechanism. The original use was to store various errors or messages that occur during processing for later display in a web application. The messages are added via add.

NOTES

Note About msgid

msgid used to be id. It was renamed to be a bit more description. All the methods that existed for id still exist and the id attribute is now aliased to msgid. In other words if you create an object using id then the msgid methods and the id methods will work, and vice versa.

SERIALIZATION

This module uses MooseX::Storage::Deferred to facilitate easy serialization. Consult the documentation for MooseX::Storage::Deferred options, but the gist is:

my $json = $stack->freeze({ format => 'JSON' });
...
my $stack = Message::Stack->thaw($json, { format => 'JSON' });

ATTRIBUTES

messages

Returns the full arrayref of messages for this stack.

METHODS

count

Returns the number of messages in the stack.

first_message

Returns the first message (if there is one, else undef)

get_message ($index)

Get the message at the supplied index.

has_messages

Returns true if there are messages in the stack, else false

last_message

Returns the last message (if there is one, else undef)

reset

Clear all messages, resetting this stack.

add ($message)

Adds the supplied message to the stack. $message may be either a Message::Stack::Message object or a hashref with similar keys.

for_msgid ($msgid)

Returns a new Message::Stack containing only the message objects with the supplied msgid. If there are no messages for that level then the stack returned will have no messages.

for_level ($level)

Returns a new Message::Stack containing only the message objects with the supplied level. If there are no messages for that level then the stack returned will have no messages.

for_scope ($scope)

Returns a new Message::Stack containing only the message objects with the supplied scope. If there are no messages for that scope then the stack returned will have no messages.

for_subject ($subject)

Returns a new Message::Stack containing only the message objects with the supplied subject. If there are no messages for that subject then the stack returned will have no messages.

has_msgid ($msgid)

Returns true if there are messages with the supplied msgid.

has_level ($level)

Returns true if there are messages with the supplied level.

has_scope ($scope)

Returns true if there are messages with the supplied scope.

has_subject ($subject)

Returns true if there are messages with the supplied subject.

search (CODEREF)

Returns a Message::Stack containing messages that return true when passed to the coderef argument.

$stack->search( sub { $_[0]->id eq 'someid' } )

reset_scope($scope)

Clears the stack of all messages of scope $scope.

reset_level($level)

Clears the stack of all messages of level $level.

reset_msgid($msgid)

Clears the stack of all messages of msgid $msgid.

reset_subject($subject)

Clears the stack of all messages of subject $subject.

CONTRIBUTORS

Jay Shirley

Stevan Little

Justin Hunter

Jon Wright

Mike Eldridge

Tomohiro Hosaka

Andrew Nelson

AUTHOR

Cory G Watson <gphat@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Cory G Watson.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.