From 42280f662d3ce4affb00eb68a22a081dfb951395 Mon Sep 17 00:00:00 2001 From: Francois Marier Date: Mon, 23 Jun 2008 23:47:09 +1200 Subject: Imported Upstream version 0.2.1 --- lib/CIL.pm | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 lib/CIL.pm (limited to 'lib/CIL.pm') diff --git a/lib/CIL.pm b/lib/CIL.pm new file mode 100644 index 0000000..b85f2fb --- /dev/null +++ b/lib/CIL.pm @@ -0,0 +1,114 @@ +## ---------------------------------------------------------------------------- +# 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 . +# +## ---------------------------------------------------------------------------- + +package CIL; + +use strict; +use warnings; +use File::Glob qw(:glob); + +use base qw(Class::Accessor); +__PACKAGE__->mk_accessors(qw(issue_dir)); + +my $defaults = { + issue_dir => 'issues', +}; + +## ---------------------------------------------------------------------------- + +sub new { + my ($proto, $cfg) = @_; + + $cfg ||= {}; + + my $class = ref $proto || $proto; + my $self = bless {}, $class; + + # save the settings for various bits of info + foreach my $key ( keys %$defaults ) { + # if we have been passed it in, use it, else use the default + $self->$key( $cfg->{$key} || $defaults->{$key} ); + } + return $self; +} + +sub list_issues { + my ($self) = @_; + + my $globpath = $self->issue_dir . "/i_*.cil"; + my @filenames = bsd_glob($globpath); + + my @issues; + foreach my $filename ( sort @filenames ) { + my ($name) = $filename =~ m{/i_(.*)\.cil$}xms; + push @issues, { + name => $name, + filename => $filename, + }; + } + return \@issues; +} + +sub get_issues { + my ($self) = @_; + + my $issue_list = $self->list_issues(); + + my @issues; + foreach my $issue ( @$issue_list ) { + push @issues, CIL::Issue->new_from_name( $self, $issue->{name} ); + } + return \@issues; +} + +sub get_comments_for { + my ($self, $issue) = @_; + + my @comments; + foreach my $comment_name ( @{$issue->Comments} ) { + my $comment = CIL::Comment->new_from_name( $self, $comment_name ); + push @comments, $comment; + } + + # sort them in cronological order + @comments = sort { $a->Inserted cmp $b->Inserted } @comments; + + return \@comments; +} + +sub get_attachments_for { + my ($self, $issue) = @_; + + my @attachments; + foreach my $attachment_name ( @{$issue->Attachments} ) { + my $attachment = CIL::Attachment->new_from_name( $self, $attachment_name ); + push @attachments, $attachment; + } + + # sort them in cronological order + @attachments = sort { $a->Inserted cmp $b->Inserted } @attachments; + + return \@attachments; +} + +## ---------------------------------------------------------------------------- +1; +## ---------------------------------------------------------------------------- -- cgit v1.2.3