use base qw( Class::Accessor::Fast );
-use URI;
-use URI::Escape;
+use URI::Template;
-__PACKAGE__->mk_accessors( qw( type template method params macros ) );
+__PACKAGE__->mk_accessors( qw( type template method params ns ) );
=head1 NAME
=head1 METHODS
-=head2 parse_macros( )
-
=head2 prepare_query( [ \%params ] )
=head1 ACCESSORS
=item * params
-=item * macros
+=item * ns
=back
=head1 COPYRIGHT AND LICENSE
-Copyright 2006 by Tatsuhiko Miyagawa and Brian Cassidy
+Copyright 2005-2009 by Tatsuhiko Miyagawa and Brian Cassidy
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
sub new {
- my( $class, %options ) = @_;
-
+ my ( $class, %options ) = @_;
+
$options{ method } ||= 'GET';
- $options{ template } = URI->new( $options{ template } );
-
+ $options{ template } = URI::Template->new( $options{ template } );
+
my $self = $class->SUPER::new( \%options );
- $self->parse_macros;
return $self;
}
-sub parse_macros {
- my $self = shift;
-
- my %query = $self->method eq 'post'
- ? %{ $self->params }
- : $self->template->query_form;
-
- my %macros;
- for( keys %query ) {
- if( $query{ $_ } =~ /^{(.+)}$/ ) {
- $macros{ $1 } = $_;
- }
- }
-
- $self->macros( \%macros );
-}
-
sub prepare_query {
- my( $self, $params ) = @_;
- my $url = $self->template->clone;
-
- $params->{ startIndex } ||= 1;
- $params->{ startPage } ||= 1;
- $params->{ language } ||= '*';
+ my ( $self, $params ) = @_;
+ my $tmpl = $self->template;
+
+ for ( qw( startIndex startPage ) ) {
+ $params->{ $_ } = 1 if !defined $params->{ $_ };
+ }
+ $params->{ language } ||= '*';
$params->{ outputEncoding } ||= 'UTF-8';
- $params->{ inputEncoding } ||= 'UTF-8';
-
- my $macros = $self->macros;
+ $params->{ inputEncoding } ||= 'UTF-8';
+
+ # fill the uri template
+ my $url = $tmpl->process( %$params );
# attempt to handle POST
- if( $self->method eq 'post' ) {
+ if ( $self->method eq 'post' ) {
my $post = $self->params;
- for( keys %$macros ) {
- $post->{ $macros->{ $_ } } = $params->{ $_ };
+ for my $key ( keys %$post ) {
+ $post->{ $key } =~ s/{(.+)}/$params->{ $1 } || ''/eg;
}
- return [ $url, $post ];
- }
- my $query = { $url->query_form };
- for( keys %$macros ) {
- $query->{ $macros->{ $_ } } = $params->{ $_ };
+ return $url, [ %$post ];
}
-
- $url->query_form( $query );
+
return $url;
}