summaryrefslogtreecommitdiff
path: root/lib/CIL.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CIL.pm')
-rw-r--r--lib/CIL.pm100
1 files changed, 91 insertions, 9 deletions
diff --git a/lib/CIL.pm b/lib/CIL.pm
index b85f2fb..e2be890 100644
--- a/lib/CIL.pm
+++ b/lib/CIL.pm
@@ -26,12 +26,20 @@ use warnings;
use File::Glob qw(:glob);
use base qw(Class::Accessor);
-__PACKAGE__->mk_accessors(qw(issue_dir));
+__PACKAGE__->mk_accessors(qw(
+ IssueDir
+ StatusStrict StatusAllowed StatusOpen StatusClosed
+ LabelStrict LabelAllowed
+));
my $defaults = {
- issue_dir => 'issues',
+ IssueDir => 'issues', # the dir to save the issues in
+ StatusStrict => 0, # whether to complain if a status is invalid
+ LabelStrict => 0, # whether to complain if a label is invalid
};
+my @config_hashes = qw(StatusAllowed StatusOpen StatusClosed LabelAllowed);
+
## ----------------------------------------------------------------------------
sub new {
@@ -50,21 +58,39 @@ sub new {
return $self;
}
-sub list_issues {
- my ($self) = @_;
+sub list_entities {
+ my ($self, $prefix) = @_;
- my $globpath = $self->issue_dir . "/i_*.cil";
+ my $globpath = $self->IssueDir . "/${prefix}_*.cil";
my @filenames = bsd_glob($globpath);
- my @issues;
+ my @entities;
foreach my $filename ( sort @filenames ) {
- my ($name) = $filename =~ m{/i_(.*)\.cil$}xms;
- push @issues, {
+ my ($name) = $filename =~ m{/${prefix}_(.*)\.cil$}xms;
+ push @entities, {
name => $name,
filename => $filename,
};
}
- return \@issues;
+ return \@entities;
+}
+
+sub list_issues {
+ my ($self) = @_;
+
+ return $self->list_entities('i');
+}
+
+sub list_comments {
+ my ($self) = @_;
+
+ return $self->list_entities('c');
+}
+
+sub list_attachments {
+ my ($self) = @_;
+
+ return $self->list_entities('a');
}
sub get_issues {
@@ -79,6 +105,30 @@ sub get_issues {
return \@issues;
}
+sub get_comments {
+ my ($self) = @_;
+
+ my $comment_list = $self->list_comments();
+
+ my @comments;
+ foreach my $comment ( @$comment_list ) {
+ push @comments, CIL::Comment->new_from_name( $self, $comment->{name} );
+ }
+ return \@comments;
+}
+
+sub get_attachments {
+ my ($self) = @_;
+
+ my $attachment_list = $self->list_attachments();
+
+ my @attachments;
+ foreach my $attachment ( @$attachment_list ) {
+ push @attachments, CIL::Attachment->new_from_name( $self, $attachment->{name} );
+ }
+ return \@attachments;
+}
+
sub get_comments_for {
my ($self, $issue) = @_;
@@ -109,6 +159,38 @@ sub get_attachments_for {
return \@attachments;
}
+sub read_config_file {
+ my ( $self, $filename ) = @_;
+
+ my $cfg = CIL::Utils->parse_cil_file( $filename );
+
+ # set some defaults if we don't have any of these
+ foreach my $key ( keys %$defaults ) {
+ $cfg->{$key} ||= $defaults->{$key};
+ }
+
+ # for some things, make a hash out of them
+ foreach my $hash_name ( @config_hashes ) {
+ my $h = {};
+ foreach my $thing ( @{$cfg->{"${hash_name}List"}} ) {
+ $h->{$thing} = 1;
+ }
+ $cfg->{$hash_name} = $h;
+ undef $cfg->{"${hash_name}List"};
+ }
+
+ # set each config item
+ $self->IssueDir( $cfg->{IssueDir} );
+
+ $self->StatusStrict( $cfg->{StatusStrict} );
+ $self->StatusAllowed( $cfg->{StatusAllowed} );
+ $self->StatusOpen( $cfg->{StatusOpen} );
+ $self->StatusClosed( $cfg->{StatusClosed} );
+
+ $self->LabelStrict( $cfg->{LabelStrict} );
+ $self->LabelAllowed( $cfg->{LabelAllowed} );
+}
+
## ----------------------------------------------------------------------------
1;
## ----------------------------------------------------------------------------