diff options
author | Francois Marier <francois@debian.org> | 2008-06-23 23:47:09 +1200 |
---|---|---|
committer | Francois Marier <francois@debian.org> | 2008-06-23 23:47:09 +1200 |
commit | 42280f662d3ce4affb00eb68a22a081dfb951395 (patch) | |
tree | 6fc148a570675adc70504d610cb2552b4ab3545e /lib/CIL/Issue.pm |
Imported Upstream version 0.2.1upstream/0.2.1
Diffstat (limited to 'lib/CIL/Issue.pm')
-rw-r--r-- | lib/CIL/Issue.pm | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/lib/CIL/Issue.pm b/lib/CIL/Issue.pm new file mode 100644 index 0000000..0dfaf53 --- /dev/null +++ b/lib/CIL/Issue.pm @@ -0,0 +1,144 @@ +## ---------------------------------------------------------------------------- +# cil is a Command line Issue List +# Copyright (C) 2008 Andrew Chilton +# +# This file is part of 'cil'. +# +# cil is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see <http://www.gnu.org/licenses/>. +# +## ---------------------------------------------------------------------------- + +package CIL::Issue; + +use strict; +use warnings; +use Carp; + +use CIL; +use CIL::Utils; + +use base qw(CIL::Base); + +# fields specific to Issue +__PACKAGE__->mk_accessors(qw(Summary Status AssignedTo Label Comment Attachment Description)); + +my @FIELDS = ( qw(Summary Status CreatedBy AssignedTo Label Comment Attachment Inserted Updated Description) ); +my $cfg = { + array => { + Label => 1, + Comment => 1, + Attachment => 1, + }, +}; + +## ---------------------------------------------------------------------------- + +sub new { + my ($proto, $name) = @_; + + croak 'please provide an issue name' + unless defined $name; + + my $class = ref $proto || $proto; + my $self = {}; + bless $self, $class; + + $self->set_name( $name ); + $self->{data} = { + Summary => '', + Status => '', + CreatedBy => '', + AssignedTo => '', + Inserted => '', + Updated => '', + Label => [], + Comment => [], + Attachment => [], + Description => '', + }; + $self->{Changed} = 0; + + $self->set_inserted_now; + + return $self; +} + +sub prefix { + return 'i'; +} + +sub fields { + return \@FIELDS; +} + +sub array_fields { + return $cfg->{array}; +} + +sub last_field { + return 'Description'; +} + +sub add_label { + my ($self, $label) = @_; + + croak 'provide a label when adding one' + unless defined $label; + + push @{$self->{data}{Label}}, $label; + $self->flag_as_updated(); +} + +sub add_comment { + my ($self, $comment) = @_; + + croak "can only add comments of type CIL::Comment" + unless $comment->isa( 'CIL::Comment' ); + + # add the comment name and set this issue's updated time + push @{$self->{data}{Comment}}, $comment->name; + $self->Updated( $comment->Updated ); + $self->flag_as_updated(); +} + +sub add_attachment { + my ($self, $attachment) = @_; + + croak "can only add attachments of type CIL::Attachment" + unless $attachment->isa( 'CIL::Attachment' ); + + # add the attachment name and set this issue's updated time + push @{$self->{data}{Attachment}}, $attachment->name; + $self->Updated( $attachment->Updated ); + $self->flag_as_updated(); +} + +sub as_output { + my ($self) = @_; + return CIL::Utils->format_data_as_output( $self->{data}, @FIELDS ); +} + +sub Comments { + my ($self) = @_; + return $self->{data}{Comment}; +} + +sub Attachments { + my ($self) = @_; + return $self->{data}{Attachment}; +} + +## ---------------------------------------------------------------------------- +1; +## ---------------------------------------------------------------------------- |