-package WWW::OpenSearch::Url;\r
-\r
-use base qw( Class::Accessor::Fast );\r
-\r
-use URI;\r
-use URI::Escape;\r
-\r
-__PACKAGE__->mk_accessors( qw( type template method params macros ) );\r
-\r
-=head1 NAME\r
-\r
-WWW::OpenSearch::Url\r
-\r
-=head1 SYNOPSIS\r
-\r
-=head1 DESCRIPTION\r
-\r
-=head1 CONSTRUCTOR\r
-\r
-=head2 new( [%options] )\r
-\r
-=head1 METHODS\r
-\r
-=head2 parse_macros( )\r
-\r
-=head2 prepare_query( [ \%params ] )\r
-\r
-=head1 ACCESSORS\r
-\r
-=head1 AUTHOR\r
-\r
-=over 4\r
-\r
-=item * Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>\r
-\r
-=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>\r
-\r
-=back\r
-\r
-=head1 COPYRIGHT AND LICENSE\r
-\r
-Copyright 2006 by Tatsuhiko Miyagawa and Brian Cassidy\r
-\r
-This library is free software; you can redistribute it and/or modify\r
-it under the same terms as Perl itself. \r
-\r
-=cut\r
-\r
-sub new {\r
- my( $class, %options ) = @_;\r
- \r
- $options{ method } ||= 'GET';\r
- $options{ template } = URI->new( $options{ template } );\r
- \r
+package WWW::OpenSearch::Url;
+
+use strict;
+use warnings;
+
+use base qw( Class::Accessor::Fast );
+
+use URI::Template;
+
+__PACKAGE__->mk_accessors( qw( type template method params ns ) );
+
+=head1 NAME
+
+WWW::OpenSearch::Url - Object to represent a target URL
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 CONSTRUCTOR
+
+=head2 new( [%options] )
+
+=head1 METHODS
+
+=head2 prepare_query( [ \%params ] )
+
+=head1 ACCESSORS
+
+=over 4
+
+=item * type
+
+=item * template
+
+=item * method
+
+=item * params
+
+=item * ns
+
+=back
+
+=head1 AUTHOR
+
+=over 4
+
+=item * Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>
+
+=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2007 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 ) = @_;
+
+ $options{ method } ||= 'GET';
+ $options{ template } = URI::Template->new( $options{ template } );
+
my $self = $class->SUPER::new( \%options );
- $self->parse_macros;\r
-
- return $self;\r
-}\r
-\r
-sub parse_macros {\r
- my $self = shift;\r
- \r
- my %query = $self->method eq 'post'
- ? %{ $self->params }
- : $self->template->query_form;\r
- \r
- my %macros;\r
- for( keys %query ) {\r
- if( $query{ $_ } =~ /^{(.+)}$/ ) {\r
- $macros{ $1 } = $_;\r
- }\r
- }\r
- \r
- $self->macros( \%macros );\r
-}\r
-\r
-sub prepare_query {\r
- my( $self, $params ) = @_;\r
- my $url = $self->template->clone;\r
- \r
- $params->{ startIndex } ||= 1;\r
- $params->{ startPage } ||= 1;\r
- $params->{ language } ||= '*';\r
- $params->{ outputEncoding } ||= 'UTF-8';\r
- $params->{ inputEncoding } ||= 'UTF-8';\r
- \r
- my $macros = $self->macros;\r
+
+ return $self;
+}
+
+sub prepare_query {
+ my( $self, $params ) = @_;
+ my $tmpl = $self->template;
+
+ $params->{ startIndex } ||= 1;
+ $params->{ startPage } ||= 1;
+ $params->{ language } ||= '*';
+ $params->{ outputEncoding } ||= 'UTF-8';
+ $params->{ inputEncoding } ||= 'UTF-8';
+
+ # fill the uri template
+ my $url = $tmpl->process( %$params );
# attempt to handle POST
if( $self->method eq 'post' ) {
my $post = $self->params;
- for( keys %macros ) {
- $post->{ $macros->{ $_ } } = $params->{ $_ };\r
+ for my $key ( keys %$post ) {
+ $post->{ $key } =~ s/{(.+)}/$params->{ $1 } || ''/eg;
}
- return [ $url, $post ];
+
+ return $url, [ %$post ];
}
+
+ return $url;
+}
- my $query = { $url->query_form };\r
- for( keys %$macros ) {\r
- $query->{ $macros->{ $_ } } = $params->{ $_ };\r
- }\r
- \r
- $url->query_form( $query );\r
- return $url;\r
-}\r
-\r
-1;\r
+1;