diff options
Diffstat (limited to 'lib/CIL.pm')
-rw-r--r-- | lib/CIL.pm | 100 |
1 files changed, 91 insertions, 9 deletions
@@ -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; ## ---------------------------------------------------------------------------- |