Revision history for Perl extension URI::Template
+0.19 2015-01-05
+ - Allow empty template as per spec (RT 101109)
+ - template() now accepts a new string as an argument (Artem Krivopolenov)
+
0.18 2013-12-05
- Fix empty hash/array special casing to not return anything
resources:
license: http://dev.perl.org/licenses/
repository: http://github.com/bricas/uri-template
-version: 0.18
+version: 0.19
SYNOPSIS
use URI::Template;
+
my $template = URI::Template->new( 'http://example.com/{x}' );
my $uri = $template->process( x => 'y' );
+
+ # or
+
+ my $template = URI::Template->new();
+ $template->template( 'http://example.com/{x}' );
+ my $uri = $template->process( x => 'y' );
+
# uri is a URI object with value 'http://example.com/y'
DESCRIPTION
METHODS
new( $template )
Creates a new URI::Template instance with the template passed in as the
- first parameter.
+ first parameter (optional).
- template
- This method returns the original template string.
+ template( $template )
+ This method returns the original template string. If provided, it will
+ also set and parse a new template string.
variables
Returns an array of unique variable names found in the template. NB:
* Ricardo SIGNES <rjbs@cpan.org>
COPYRIGHT AND LICENSE
- Copyright 2007-2013 by Brian Cassidy
+ Copyright 2007-2015 by Brian Cassidy
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
use strict;
use warnings;
-our $VERSION = '0.18';
+our $VERSION = '0.19';
use URI;
use URI::Escape ();
sub new {
my $class = shift;
- my $templ = shift || die 'No template provided';
+ my $templ = shift || '';
my $self = bless { template => $templ, _vars => {} } => $class;
$self->_study;
}
sub template {
- return $_[ 0 ]->{ template };
+ my $self = shift;
+ my $new_template = shift;
+
+ # Update template
+ if ( $new_template && $new_template ne $self->{ template } ) {
+ $self->{ template } = $new_template;
+ $self->{ _vars } = {};
+ $self->_study;
+ return $self;
+ }
+
+ return $self->{ template };
}
sub variables {
=head1 SYNOPSIS
use URI::Template;
+
my $template = URI::Template->new( 'http://example.com/{x}' );
my $uri = $template->process( x => 'y' );
+
+ # or
+
+ my $template = URI::Template->new();
+ $template->template( 'http://example.com/{x}' );
+ my $uri = $template->process( x => 'y' );
+
# uri is a URI object with value 'http://example.com/y'
=head1 DESCRIPTION
=head2 new( $template )
Creates a new L<URI::Template> instance with the template passed in
-as the first parameter.
+as the first parameter (optional).
-=head2 template
+=head2 template( $template )
-This method returns the original template string.
+This method returns the original template string. If provided, it will also set and parse a
+new template string.
=head2 variables
=head1 COPYRIGHT AND LICENSE
-Copyright 2007-2013 by Brian Cassidy
+Copyright 2007-2015 by Brian Cassidy
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
use strict;
use warnings;
-use Test::More tests => 15;
+use Test::More tests => 21;
use_ok( 'URI::Template' );
-# fatal - no template provided
+# new, empty template
{
- eval { URI::Template->new; };
- ok( $@ );
+ my $template = URI::Template->new;
+ isa_ok( $template, 'URI::Template' );
+
+ {
+ my $result = $template->process();
+ is( $result, '', 'process() for empty template' );
+ isa_ok( $result, 'URI', 'return value from process() isa URI' );
+ }
+}
+
+# Update template
+{
+ my $template = URI::Template->new;
+ is( "$template", '', 'stringify from empty' );
+
+ my $text = 'http://foo.com/{bar}/{baz}';
+ $template->template($text);
+
+ is( "$template", $text, 'stringify from updated template' );
+
+ {
+ my $result = $template->process( bar => 'x', baz => 'y' );
+ is( $result, 'http://foo.com/x/y', 'process() for updated template' );
+ isa_ok( $result, 'URI', 'return value from process() isa URI' );
+ }
}
{