The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/env perl
package ShrinkURL::Model::ShrunkenURL;
use strict;
use warnings;
use Number::RecordLocator;
my $generator = Number::RecordLocator->new;

use Jifty::DBI::Schema;
use Jifty::Record schema {
    column url =>
        is distinct,
        is varchar(1000);
};

# shrunken URL is just an encoding of ID
sub shrunken {
    my $self = shift;
    Jifty->web->url(path => $generator->encode($self->id));
}

# helper function so we can easily change the internal representation of
# shrunken URLs if we desire
sub load_by_shrunken {
    my $self = shift;
    my $shrunken = shift;
    my $id = $generator->decode($shrunken);

    return $self->load($id);
}

# prepend http:// if the scheme is not already there
sub canonicalize_url {
    my $self = shift;
    my $url = shift;

    $url = "http://$url"
        unless $url =~ m{^\w+://};

    return $url;
}

1;