package jQuery::Loader::Template;
use strict;
use warnings;
use Moose;
has version => qw/is rw/;
has filter => qw/is rw/;
sub process {
my $self = shift;
my $template = shift;
my %override = @_;
my $result = $template;
$result =~ s/\%j/jquery%-v%.f.js/g;
my $version = $self->version;
$version = $override{version} if exists $override{version};
$version ||= "";
$result =~ s/\%v/$version/g;
$result =~ s/\%\.v/$version ? "\.$version" : ""/ge;
$result =~ s/\%\-v/$version ? "\-$version" : ""/ge;
$result =~ s/\%\/v/$version ? "\/$version" : ""/ge;
my $filter = $self->filter;
$filter = $override{filter} if exists $override{filter};
$filter ||= "";
$result =~ s/\%f/$filter/g;
$result =~ s/\%\.f/$filter ? "\.$filter" : ""/ge;
$result =~ s/\%\-f/$filter ? "\-$filter" : ""/ge;
$result =~ s/\%\/f/$filter ? "\/$filter" : ""/ge;
$result =~ s/\%\%/\%/g;
return $result;
}
1;
__END__
sub process {
my $self = shift;
if (@_) {
my $pattern = shift;
my $result = $self->_calculate($pattern, @_);
my $value = $self->value;
$result =~ s/\%jq/$value/g;
return $result;
}
if ($self->{from_pattern}) {
my $result = $self->_calculate($self->pattern);
return $self->{value} = $result;
}
return $self->{value};
}
around value => sub {
my $inner = shift;
my $self = shift;
return $self->$inner() unless @_;
$self->$inner(@_);
$self->from_pattern(0);
return $self->{value};
};
around $_ => sub {
my $inner = shift;
my $self = shift;
return $self->$inner() unless @_;
$self->$inner(@_);
return $self->{value};
}
for qw/version filter pattern/;
after from_pattern => sub {
my $self = shift;
$self->calculate;
};
__END__
has value => qw/is rw/;
has pattern => qw/is rw required 1/, default => "jquery%-v%.f.js";
has version => qw/is rw/;
has filter => qw/is rw/;
has from_pattern => qw/is rw required 1 default 1/;
sub BUILD {
my $self = shift;
my $given = shift;
$self->from_pattern($given->{value} ? 0 : 1); # Will do the calculation as well
}
sub _calculate {
my $self = shift;
my $pattern = shift;
my %override = @_;
my $result = $pattern;
my $version = $self->version;
$version = $override{version} if exists $override{version};
$version ||= "";
$result =~ s/\%v/$version/g;
$result =~ s/\%\.v/$version ? "\.$version" : ""/ge;
$result =~ s/\%\-v/$version ? "\-$version" : ""/ge;
$result =~ s/\%\/v/$version ? "\/$version" : ""/ge;
my $filter = $self->filter;
$filter = $override{filter} if exists $override{filter};
$filter ||= "";
$result =~ s/\%f/$filter/g;
$result =~ s/\%\.f/$filter ? "\.$filter" : ""/ge;
$result =~ s/\%\-f/$filter ? "\-$filter" : ""/ge;
$result =~ s/\%\/f/$filter ? "\/$filter" : ""/ge;
$result =~ s/\%\%/\%/g;
return $result;
}
sub calculate {
my $self = shift;
if (@_) {
my $pattern = shift;
my $result = $self->_calculate($pattern, @_);
my $value = $self->value;
$result =~ s/\%jq/$value/g;
return $result;
}
if ($self->{from_pattern}) {
my $result = $self->_calculate($self->pattern);
return $self->{value} = $result;
}
return $self->{value};
}
around value => sub {
my $inner = shift;
my $self = shift;
return $self->$inner() unless @_;
$self->$inner(@_);
$self->from_pattern(0);
return $self->{value};
};
around $_ => sub {
my $inner = shift;
my $self = shift;
return $self->$inner() unless @_;
$self->$inner(@_);
$self->from_pattern(1);
return $self->{value};
}
for qw/version filter pattern/;
after from_pattern => sub {
my $self = shift;
$self->calculate;
};
1;