The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Jenkins::Notification;
use warnings;
use strict;
use Moose;
use Net::Jenkins::Utils qw(build_job_object build_build_object);
use Net::Jenkins::Job;
use Net::Jenkins::Job::Build;

# job name
has name => ( is => 'rw' , isa => 'Str' );

# job url
has url => ( is => 'rw', isa => 'Str' );

has build => ( is => 'rw' , isa => 'Net::Jenkins::Job::Build' );

has job => ( is => 'rw', isa => 'Net::Jenkins::Job' );

has status => ( is => 'rw' , isa => 'Str' , default => 'UNKNOWN' );

has phase => ( is => 'rw' , isa => 'Str' );

has parameters => ( is => 'rw' );

has api => ( is => 'rw', isa => 'Net::Jenkins' );


# raw json
has raw_json => ( is => 'rw', isa => 'Str' );

sub BUILDARGS {
    my ($self,%args) = @_;

    my $build_args = delete $args{build};
    my $build_url = $build_args->{full_url};

    $args{job} = build_job_object $build_url;
    $args{url} = $args{job}->url;
    $args{build} = build_build_object $build_url;

    $args{status} = $build_args->{status} if $build_args->{status};
    $args{phase} = $build_args->{phase} if $build_args->{phase};
    $args{api} = $args{build}->api;
    return \%args;
}

sub to_hashref {
    my ($self,$with_details) = @_;
    return {
        name => $self->name,
        url => $self->url,
        build => $self->build->to_hashref( $with_details ),
        job => $self->job->to_hashref( $with_details ),
        status => $self->status,
        phase => $self->phase,
        parameters => $self->parameters,
    };
}

1;
__END__

=head1 NAME

Jenkins::Notification

=head1 ATTRIBUTES

=head2 name (Str)

Job name

=head2 url (Str)

Job url

=head2 build

L<Net::Jenkins::Job::Build> object

=head2 job

L<Net::Jenkins::Job> object

=head2 status (Str)

Build Status

=head2 phase (Str)

Build Phase

=head2 parameters (HashRef)

=head2 api

L<Net::Jenkins> object

=cut