Fedora-Bugzilla

 view release on metacpan or  search on metacpan

lib/Fedora/Bugzilla/Bug.pm  view on Meta::CPAN

    lazy_build => 1,

    provides => {
        'empty'    => 'has_attachments',
        'elements' => 'attachments',
        'count'    => 'attachment_count',
        'get'      => 'get_attachment',
        'first'    => 'first_attachment',
        'last'     => 'last_attachment',
        'grep'     => 'grep_attachments',
        'map'      => 'map_attachments',
        #...
    },
);

sub _build__attachments {
    my $self =  shift @_;

    # get all our elements...
    my @elements = $self->twig->root->find_by_tag_name('attachment');

    my $i = 1;

    my @comments = 
        map { 
            Fedora::Bugzilla::Bug::Attachment
                ->new(
                    bug    => $self,
                    _twig  => $_,
                    number => $i++,
                );
            } @elements
        ;
    
    return \@comments;

}

has _dependson => (
    traits => [ 'MooseX::AttributeHelpers::Trait::Collection::Bag' ],
    clear_master   => 'xml',
    # FIXME trigger on set needed
    is         => 'ro', 
    isa        => 'Bag', 
    auto_deref => 1,
    # right now, use of lazy_build or builder is broken with this metaclass
    #lazy_build => 1,
    default   => sub { shift->_build__dependson },
    clearer   => '_clear__dependson',
    predicate => '_has__dependson',
    lazy      => 1,

    provides => {
        'empty'  => 'depends_on_anything',
        'count'  => 'num_deps',
        'exists' => 'depends_on_bug',
        'keys'   => 'all_dependent_bugs',
    },
);

has _blocked => (
    traits => [ 'MooseX::AttributeHelpers::Trait::Collection::Bag' ],
    clear_master   => 'xml',
    # FIXME trigger on set needed
    is         => 'ro', 
    isa        => 'Bag', 
    auto_deref => 1,
    # right now, use of lazy_build or builder is broken with this metaclass
    #lazy_build => 1,
    default   => sub { shift->_build__blocked },
    clearer   => '_clear__blocked',
    predicate => '_has__blocked',
    lazy      => 1,

    provides => {
        'empty'  => 'blocks_anything',
        'count'  => 'num_blocked',
        'exists' => 'blocks_bug',
        'keys'   => 'all_blocked_bugs',
    },
);

sub _build__dependson 
    { return { map { $_ => 1 } @{ shift->_from_atts('dependson') } } }
sub _build__blocked   
    { return { map { $_ => 1 } @{ shift->_from_atts('blocked')   } } }

has cc_list => (
    traits => [ 'MooseX::AttributeHelpers::Trait::Collection::List' ],

    clear_master => 'xml',

    is  => 'ro',
    #isa => 'ArrayRef[EmailAddress]',
    isa => 'ArrayRef[Email::Address]',
    auto_deref => 1,
    #coerce => 1,
    lazy_build => 1,

    provides => {

        'count' => 'num_emails_on_cc',
        'find'  => 'is_email_on_cc',
        'grep'  => 'grep_cc_emails',
        # ...
    },
);

sub _build_cc_list { 
    [ 
        map { my @a = Email::Address->parse($_); pop @a } 
            @{ shift->_from_atts('cc') } 
    ] 
}

########################################################################
# methods getting or setting various non-attribute bits 

# bugzilla.updateFlags
sub set_flags {
    my $self = shift @_;

    my %flags = @_;

    $self->bz->rpc->simple_request(
        'bugzilla.updateFlags',
        $self->id,
        \%flags,
    );

    $self->clear_data;

    return;
}

sub set_flag { shift->set_flags(@_) }

# Bug.add_comment
sub add_comment {
     my ($self, $comment) = @_;

     # FIXME: filter the return value...?
     $self->bz->rpc->simple_request(
         'Bug.add_comment',
         { id => $self->id, comment => $comment }
     );



( run in 0.719 second using v1.01-cache-2.11-cpan-99c4e6809bf )