package JS::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;