The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package YUI::Loader::Cache::URI;

use Moose;
extends qw/YUI::Loader::Cache::Dir/;

use Path::Abstract;
use YUI::Loader::Carp;

has _uri => qw/is ro/;

sub BUILD {
    my $self = shift;
    my $given = shift;

    my ($dir, $uri);
    if (my $rsc = $given->{rsc}) {
        if (blessed $rsc && $rsc->isa("Path::Resource")) {
            $dir = $rsc->dir;
            $uri = $rsc->uri;
        }
    }
    else {
        ($dir, $uri) = @$given{qw/dir uri/};
    }

    croak "Don't have a dir" unless $dir;
    croak "Don't have a uri" unless $uri;

    $uri = URI->new("$uri") unless blessed $uri && $uri->isa("URI");
    $dir = Path::Class::Dir->new("$dir") unless blessed $dir && $dir->isa("Path::Class");

    $self->{_uri} = $uri;
    $self->{dir} = $dir;
}

override uri => sub {
    my $self = shift;

    my ($path, $file) = $self->_file(@_);
    my $uri = $self->_uri->clone;
    $uri->path(Path::Abstract->new($uri->path, "/$file")->stringify);
    return $uri;
};

1;