This is an automated email from the git hooks/post-receive script.

kanashiro-guest pushed a commit to tag 1.08
in repository libflickr-api-perl.

commit 00a0f6c5eef49147750457acca03929ea922edae
Author: Cal Henderson <c...@iamcal.com>
Date:   Thu May 23 10:18:36 2013 -0700

    patch and tests for handling of unicode strings - requires unicode=1 flag
---
 Changes                   |  3 +++
 lib/Flickr/API.pm         | 24 ++++++++++++++++++++----
 lib/Flickr/API/Request.pm |  9 +++++++++
 test.pl                   |  7 ++++++-
 4 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/Changes b/Changes
index efad38d..1f6fc0b 100644
--- a/Changes
+++ b/Changes
@@ -24,3 +24,6 @@ Changes to Flickr::API
 
 1.06, 2013-05-11
  * Added `lwpobj` argument, to allow using subclasses of LWP::UserAgent
+
+1.07, 2013-05-23
+ * Added flag to enable handling of native Unicode strings
diff --git a/lib/Flickr/API.pm b/lib/Flickr/API.pm
index 8175307..310e030 100644
--- a/lib/Flickr/API.pm
+++ b/lib/Flickr/API.pm
@@ -8,10 +8,11 @@ use Flickr::API::Request;
 use Flickr::API::Response;
 use Digest::MD5 qw(md5_hex);
 use Scalar::Util qw(blessed);
+use Encode qw(encode_utf8);
 
 our @ISA = qw(LWP::UserAgent);
 
-our $VERSION = '1.06';
+our $VERSION = '1.07';
 
 sub new {
        my $class = shift;
@@ -34,6 +35,7 @@ sub new {
        $self->{api_secret}     = $options->{secret};
        $self->{rest_uri}       = $options->{rest_uri} || 
'http://api.flickr.com/services/rest/';
        $self->{auth_uri}       = $options->{auth_uri} || 
'http://api.flickr.com/services/auth/';
+       $self->{unicode}        = $options->{unicode} || 0;
 
        eval {
                require Compress::Zlib;
@@ -59,6 +61,7 @@ sub sign_args {
                $sig .= $key . $value;
        }
 
+       return md5_hex(encode_utf8($sig)) if $self->{unicode};
        return md5_hex($sig);
 }
 
@@ -90,7 +93,12 @@ sub request_auth_url {
 sub execute_method {
        my ($self, $method, $args) = @_;
 
-       my $request = new Flickr::API::Request({'method' => $method, 'args' => 
$args, rest_uri => $self->{rest_uri}});
+       my $request = new Flickr::API::Request({
+               'method'        => $method,
+               'args'          => $args,
+               'rest_uri'      => $self->{rest_uri},
+               'unicode'       => $self->{unicode},
+       });
 
        $self->execute_request($request);
 }
@@ -168,8 +176,11 @@ Flickr::API - Perl interface to the Flickr API
 
   use Flickr::API;
 
-  my $api = new Flickr::API({'key'    => 'your_api_key',
-                             'secret' => 'your_app_secret'});
+  my $api = new Flickr::API({
+               'key'    => 'your_api_key',
+               'secret' => 'your_app_secret',
+               'unicode'=> 0,
+       });
 
   my $response = $api->execute_method('flickr.test.echo', {
                'foo' => 'bar',
@@ -225,6 +236,11 @@ Override the URIs used for contacting the API.
 Base the C<Flickr::API> on this object, instead of creating a new instance of 
C<LWP::UserAgent>.
 This is useful for using the features of e.g. C<LWP::UserAgent::Cached>.
 
+=item C<unicode>
+
+This flag controls whether Flicrk::API expects you to pass UTF-8 bytes 
(unicode=0, the default) or
+actual unicode strings (unicode=1) in the request.
+
 =back
 
 =item C<execute_method($method, $args)>
diff --git a/lib/Flickr/API/Request.pm b/lib/Flickr/API/Request.pm
index e8f3236..2c8bcf5 100644
--- a/lib/Flickr/API/Request.pm
+++ b/lib/Flickr/API/Request.pm
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 use HTTP::Request;
 use URI;
+use Encode qw(encode_utf8);
 
 our @ISA = qw(HTTP::Request);
 our $VERSION = '0.03';
@@ -15,6 +16,7 @@ sub new {
        $self->{api_method}     = $options->{method};
        $self->{api_args}       = $options->{args};
        $self->{rest_uri}       = $options->{rest_uri} || 
'http://api.flickr.com/services/rest/';
+       $self->{unicode}        = $options->{unicode} || 0;
 
        bless $self, $class;
 
@@ -28,7 +30,14 @@ sub encode_args {
        my ($self) = @_;
 
        my $url = URI->new('http:');
+
+       if ($self->{unicode}){
+               for my $k(keys %{$self->{api_args}}){
+                       $self->{api_args}->{$k} = 
encode_utf8($self->{api_args}->{$k});
+               }
+       }
        $url->query_form(%{$self->{api_args}});
+
        my $content = $url->query;
 
        $self->header('Content-Type' => 'application/x-www-form-urlencoded');
diff --git a/test.pl b/test.pl
index e8feb9e..5697b1d 100644
--- a/test.pl
+++ b/test.pl
@@ -1,5 +1,5 @@
 use Test::More;
-BEGIN { plan tests => 17 };
+BEGIN { plan tests => 19 };
 
 BEGIN { use_ok( 'Flickr::API' ); }
 
@@ -51,6 +51,11 @@ if ($rsp->{_rc} eq '200'){
 ok('466cd24ced0b23df66809a4d2dad75f8' eq $api->sign_args({'foo' => 'bar'}), 
"Signing test 1");
 ok('f320caea573c1b74897a289f6919628c' eq $api->sign_args({'foo' => undef}), 
"Signing test 2");
 
+$api->{unicode} = 0;
+is('b8bac3b2a4f919d04821e43adf59288c', $api->sign_args({'foo' => 
"\xE5\x8C\x95\xE4\xB8\x83"}), "Signing test 3 (unicode=0)");
+
+$api->{unicode} = 1;
+is('b8bac3b2a4f919d04821e43adf59288c', $api->sign_args({'foo' => 
"\x{5315}\x{4e03}"}), "Signing test 4 (unicode=1)");
 
 ##################################################
 #

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libflickr-api-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to