--- /dev/null
+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
+ 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
+
+ # attempt to handle POST
+ if( $self->method eq 'post' ) {
+ my $post = $self->params;
+ for( keys %macros ) {
+ $post->{ $macros->{ $_ } } = $params->{ $_ };\r
+ }
+ return [ $url, $post ];
+ }
+
+ 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