[Jifty-commit] jifty branch, plack, updated. 0b88a469f8f8e5b7fd1576d2521379753697c32b

Jifty commits jifty-commit at lists.jifty.org
Fri Jan 29 08:48:12 EST 2010


The branch, plack has been updated
       via  0b88a469f8f8e5b7fd1576d2521379753697c32b (commit)
       via  f690630d55d500c6fe8ec6c1dcd208c2cfc0db46 (commit)
       via  9d96260ce0ddc0f3e5a155165e615ee44a663998 (commit)
       via  5b354d43103646ae0def7afbfd7240ec5cd370cf (commit)
       via  404fc085274fdb2d3323913f52ba8727d51a6587 (commit)
      from  8391ce2924392470d9a708ed47ca6826ed47fb8d (commit)

Summary of changes:
 Makefile.PL              |    4 ++--
 lib/Jifty/Handler.pm     |    1 +
 lib/Jifty/Request.pm     |   42 +++++++++++++++++++++++++++++++++---------
 lib/Jifty/Web/Session.pm |   30 +++++++++++-------------------
 t/Jifty.pm               |    1 +
 5 files changed, 48 insertions(+), 30 deletions(-)

- Log -----------------------------------------------------------------
commit 404fc085274fdb2d3323913f52ba8727d51a6587
Author: Tatsuhiko Miyagawa <miyagawa at bulknews.net>
Date:   Fri Jan 29 02:04:29 2010 -0800

    make Jifty::Request not inherit from Plack::Request and instead copies
    some data in promote(). Duplicate some code but they're mostly
    accessors.
    
    Updated the code work with new Plack::Request that is going to be
    included in Plack core 1.0. Some tests are stil failing.

diff --git a/Makefile.PL b/Makefile.PL
index 868efbc..a261c5e 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -51,6 +51,7 @@ requires('HTTP::Date');
 requires('HTTP::Server::Simple' => '0.35');  # HTTP::Server::Simple::CGI
 requires('HTTP::Server::Simple::Recorder');
 requires('Hash::Merge');
+requires('Hash::MultiValue', 0.05);
 requires('Hook::LexWrap');
 requires('IPC::PubSub' => '0.23' );
 requires('IPC::Run3');
@@ -68,7 +69,7 @@ requires('Module::Refresh');
 requires('Module::ScanDeps');
 requires('Object::Declare' => '0.13');
 requires('Params::Validate');
-requires('Plack' => '0.9032'); # Plack::Loader Plack::Test Plack::Util
+requires('Plack' => '0.99_01'); # Plack::Loader Plack::Test Plack::Util
 requires('Plack::Request');
 requires('Scalar::Defer' => '0.12');
 requires('Shell::Command');
diff --git a/lib/Jifty/Request.pm b/lib/Jifty/Request.pm
index 9b1223f..30be3ec 100644
--- a/lib/Jifty/Request.pm
+++ b/lib/Jifty/Request.pm
@@ -4,7 +4,7 @@ use strict;
 package Jifty::Request;
 
 use Any::Moose;
-extends 'Plack::Request', 'Jifty::Object';
+extends 'Jifty::Object';
 
 has 'env' => (is => "ro", isa => "HashRef", default => sub { {} });
 has '_top_request' => (is => 'rw');
@@ -16,12 +16,29 @@ has 'future_continuation_id' => (is => 'rw');
 has 'continuation_type' => (is => 'rw');
 has 'continuation_path' => (is => 'rw');
 
-around 'method' => sub {
-    my ($orig, $self, $arg) = @_;
-    $self->{env}{REQUEST_METHOD} = $arg
-        if $arg;
-    $orig->($self, $arg ? $arg : ());
-};
+has 'parameters' => (is => 'rw', isa => 'HashRef');
+has 'uploads' => (is => 'rw', isa => 'HashRef');
+has 'headers' => (is => 'rw', isa => 'HTTP::Headers', default => sub { HTTP::Headers->new });
+has 'uri' => (is => 'rw', isa => 'URI', default => sub { URI->new('http:///') });
+
+sub address     { $_[0]->env->{REMOTE_ADDR} }
+sub remote_host { $_[0]->env->{REMOTE_HOST} }
+sub protocol    { $_[0]->env->{SERVER_PROTOCOL} }
+sub method      { $_[0]->env->{REQUEST_METHOD} = $_[1] if @_ > 1; $_[0]->env->{REQUEST_METHOD} }
+sub port        { $_[0]->env->{SERVER_PORT} }
+sub user        { $_[0]->env->{REMOTE_USER} }
+sub request_uri { $_[0]->env->{REQUEST_URI} }
+sub path_info   { $_[0]->env->{PATH_INFO} }
+sub script_name { $_[0]->env->{SCRIPT_NAME} }
+sub scheme      { $_[0]->env->{'psgi.url_scheme'} }
+sub secure      { $_[0]->scheme eq 'https' }
+sub body        { $_[0]->env->{'psgi.input'} }
+sub input       { $_[0]->env->{'psgi.input'} }
+
+sub header { shift->headers->header(@_) }
+sub path { shift->uri->path(@_) }
+sub content_length   { shift->headers->content_length(@_) }
+sub content_type     { shift->headers->content_type(@_) }
 
 use Jifty::JSON;
 use Jifty::YAML;
@@ -144,16 +161,22 @@ sub promote {
     die Carp::longmess("old calling style") unless ref $req;
 
     # Import all props from Plack::Request object
-    my $self = bless $req, $class;
+    my $self = bless {}, $class;
     $self->{'actions'} = {};
     $self->{'state_variables'} = {};
     $self->{'fragments'} = {};
     $self->arguments({});
     $self->template_arguments({});
 
+    $self->{env} = $req->env;
+    $self->uri($req->uri);
+    $self->headers($req->headers);
+    $self->parameters($req->parameters->mixed);
+    $self->uploads($req->uploads->mixed);
+
     # Grab content type and posted data, if any
     my $ct   = $req->content_type;
-    my $data = $req->raw_body;
+    my $data = $req->content;
 
     # Check it for something appropriate
     if ($data) {

commit 5b354d43103646ae0def7afbfd7240ec5cd370cf
Author: Tatsuhiko Miyagawa <miyagawa at bulknews.net>
Date:   Fri Jan 29 02:08:16 2010 -0800

    use Plack::Request in Handler

diff --git a/lib/Jifty/Handler.pm b/lib/Jifty/Handler.pm
index 725dff5..7ef8bb3 100644
--- a/lib/Jifty/Handler.pm
+++ b/lib/Jifty/Handler.pm
@@ -27,6 +27,7 @@ use base qw/Class::Accessor::Fast Jifty::Object/;
 use Jifty::View::Declare::Handler ();
 use Class::Trigger;
 use String::BufferStack;
+use Plack::Request;
 
 __PACKAGE__->mk_accessors(qw(dispatcher _view_handlers stash buffer));
 

commit 9d96260ce0ddc0f3e5a155165e615ee44a663998
Author: Chia-liang Kao <clkao at clkao.org>
Date:   Fri Jan 29 21:42:45 2010 +0800

    ignore headers for form-protocol test.

diff --git a/t/Jifty.pm b/t/Jifty.pm
index 37edbb5..428a7e9 100644
--- a/t/Jifty.pm
+++ b/t/Jifty.pm
@@ -17,6 +17,7 @@ sub request_from_webform {
     my $form = shift;
     my $r = Jifty::Request->new->from_webform(%$form);
     delete $r->{env};
+    delete $r->{headers};
     return $r;
 }
 

commit f690630d55d500c6fe8ec6c1dcd208c2cfc0db46
Author: Chia-liang Kao <clkao at clkao.org>
Date:   Fri Jan 29 21:44:34 2010 +0800

    Make use of cookies parsed by Plack::Request.

diff --git a/Makefile.PL b/Makefile.PL
index a261c5e..3cada72 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -13,7 +13,6 @@ requires('Class::Data::Inheritable');
 requires('Class::Trigger' => '0.13');
 requires('Clone' => '0.27');
 requires('CGI' => '3.30');
-requires('CGI::Simple'); # CGI::Simple::Cookie
 requires('CGI::Cookie::Splitter');
 requires('Class::Inspector' => 1.20); # For File::ShareDir on Win32
 requires('Crypt::CBC');
diff --git a/lib/Jifty/Request.pm b/lib/Jifty/Request.pm
index 30be3ec..744fc39 100644
--- a/lib/Jifty/Request.pm
+++ b/lib/Jifty/Request.pm
@@ -168,6 +168,7 @@ sub promote {
     $self->arguments({});
     $self->template_arguments({});
 
+    $req->cookies; # vivify plack.cookie.parsed
     $self->{env} = $req->env;
     $self->uri($req->uri);
     $self->headers($req->headers);
diff --git a/lib/Jifty/Web/Session.pm b/lib/Jifty/Web/Session.pm
index 64ab825..23171f5 100644
--- a/lib/Jifty/Web/Session.pm
+++ b/lib/Jifty/Web/Session.pm
@@ -3,7 +3,6 @@ use strict;
 
 package Jifty::Web::Session;
 use base qw/Jifty::Object/;
-use CGI::Simple::Cookie ();
 use DateTime    ();
 use Storable    ();
 $Storable::Deparse    = 1;
@@ -111,11 +110,9 @@ sub load_by_kv {
 
 sub _get_session_id_from_client {
     my $self        = shift;
-    my %cookies     = Jifty->web->request ? CGI::Simple::Cookie->parse(Jifty->web->request->env->{HTTP_COOKIE}) : ();
-    my $cookie_name = $self->cookie_name;
-    my $session_id
-        = $cookies{$cookie_name} ? $cookies{$cookie_name}->value() : undef;
-    return $session_id;
+    my $cookies     = Jifty->web->request
+        ? Jifty->web->request->env->{'plack.cookie.parsed'} : {};
+    return $cookies->{$self->cookie_name};
 }
 
 =head2 unload
@@ -321,19 +318,14 @@ sub set_cookie {
     $self->load unless $self->loaded;
 
     my $cookie_name = $self->cookie_name;
-    my %cookies     = Jifty->web->request ? CGI::Simple::Cookie->parse(Jifty->web->request->env->{HTTP_COOKIE}) : ();
-
-    my $cookie      = CGI::Simple::Cookie->new(
-        -name    => $cookie_name,
-        -value   => $self->id,
-        -expires => $self->expires,
-    );
-
-    if ( not $cookies{$cookie_name}
-        or ( $cookies{$cookie_name} ne $cookie->as_string ) )
-    {
-        Jifty->web->response->cookies->{$cookie->name} = $cookie;
-    }
+    my $cookies     = Jifty->web->request ? Jifty->web->request->env->{'plack.cookie.parsed'} : {};
+    my $cookie      = {
+        value   => $self->id,
+        expires => $self->expires,
+    };
+    # XXX: do we every need to check the existing cookie to decide if
+    # we want to set the cookie this time?
+    Jifty->web->response->cookies->{$cookie_name} = $cookie;
 }
 
 =head2 cookie_name

commit 0b88a469f8f8e5b7fd1576d2521379753697c32b
Merge: 8391ce2 f690630
Author: Chia-liang Kao <clkao at clkao.org>
Date:   Fri Jan 29 21:47:06 2010 +0800

    Merge branch 'plack-1.0' into plack


-----------------------------------------------------------------------


More information about the Jifty-commit mailing list