The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
package ShrinkURL::Action::CreateShrunkenURL;
use strict;
use warnings;

use base qw/Jifty::Action::Record::Create/;
sub record_class { 'ShrinkURL::Model::ShrunkenURL' }

# have we already shrunk this URL? if so, no need to do it again!
sub take_action {
    my $self = shift;
    my $url = $self->argument_value('url');

    my $shrunkenurl = ShrinkURL::Model::ShrunkenURL->new;
    $shrunkenurl->load_by_cols(url => $url);

    if ($shrunkenurl->id) {

        # for the benefit of report_success
        $self->record($shrunkenurl);

        # for the benefit of the template that displays new shrunken URLs
        # this is called in a superclass which we bypass
        $self->result->content(id => $shrunkenurl->id);

        # this too is called in a superclass
        $self->report_success;

        # Create actions return object's ID
        return $shrunkenurl->id;
    }

    return $self->SUPER::take_action(@_);
}

# display a nice little message for the user
sub report_success {
    my $self = shift;
    $self->result->message(_("URL shrunked to %1", $self->record->shrunken));
}

1;