# $Id: Change.pm 1484 2007-02-18 21:10:00Z guillomovitch $
package Youri::Package::Change;

=head1 NAME

Youri::Package::Change - Package change class

=head1 DESCRIPTION

This class represent a package change.

=cut

use strict;
use warnings;
use Carp;

use constant AUTHOR => 0;
use constant TIME   => 1;
use constant TEXT   => 2;

=head1 CLASS METHODS

=head2 new(%args)

Creates and returns a new Youri::Package::Change object.

=cut

sub new {
    my ($class, $author, $time, $text) = @_;

    return bless [
        $author,
        $time,
        $text,
    ], $class;
}

=head2 get_author()

Returns the author of this change.

=cut

sub get_author {
    my ($self) = @_;
    croak "Not a class method" unless ref $self;

    return $self->[AUTHOR];
}

=head2 get_time()

Return the time of this change.

=cut

sub get_time {
    my ($self) = @_;
    croak "Not a class method" unless ref $self;

    return $self->[TIME];
}

=head2 get_raw_text()

Returns the textual description of this change, as as string.

=cut

sub get_raw_text {
    my ($self) = @_;
    croak "Not a class method" unless ref $self;

    return $self->[TEXT];
}

=head2 get_text_items()

Returns the textual description of this change, as as array reference of
individual changes.

=cut

sub get_text_items {
    my ($self) = @_;
    croak "Not a class method" unless ref $self;

    return $self->[TEXT] =~ /
        ^
        [-+ ] \s+ # list token
        (.*)      # real text
        $
        /xmg;
}

1;
