Imported Upstream version 0.0602
[libwww-opensearch-perl.git] / lib / WWW / OpenSearch / Url.pm
diff --git a/lib/WWW/OpenSearch/Url.pm b/lib/WWW/OpenSearch/Url.pm
new file mode 100644 (file)
index 0000000..33cbd0a
--- /dev/null
@@ -0,0 +1,108 @@
+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