[Jifty-commit] jifty branch, webservices-in-td, created. ed646b11efa3cb223643de41a7cf65bf5ea81e35

Jifty commits jifty-commit at lists.jifty.org
Thu Dec 10 14:12:08 EST 2009


The branch, webservices-in-td has been created
        at  ed646b11efa3cb223643de41a7cf65bf5ea81e35 (commit)

- Log -----------------------------------------------------------------
commit d6587d6d5d8ffc15e0f9528c4aec8fc8670458dd
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Tue May 12 23:55:50 2009 +0000

    - Create branch webservices-in-td
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7019 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

commit 0ae11a1e8d5f485a60c82ce7913b2d52e73a73af
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed May 13 00:42:07 2009 +0000

    * add services method in Jifty::Web
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7020 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web.pm b/lib/Jifty/Web.pm
index 84dfb9d..47d51fe 100644
--- a/lib/Jifty/Web.pm
+++ b/lib/Jifty/Web.pm
@@ -1319,7 +1319,6 @@ sub region {
     $region->render;
 }
 
-
 =head3 replace_current_region PATH
 
 Replaces the current region with a new region and renders it Returns undef if there's no current region
@@ -1384,6 +1383,17 @@ sub qualified_parent_region {
             @region_stack, @_;
 }
 
+=head3 services
+
+Returns L<Jifty::Web::Services> object.
+
+=cut
+
+sub services {
+    require Jifty::Web::Services;
+    return new Jifty::Web::Services;
+}
+
 =head2 is_ssl
 
 Indicates whether the current request was made using SSL.

commit 6dc97cb089171c8b901c49be0bae04c0bda996a0
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed May 13 00:43:28 2009 +0000

    * add Jifty::Web::Services
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7021 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web/Services.pm b/lib/Jifty/Web/Services.pm
new file mode 100644
index 0000000..9176439
--- /dev/null
+++ b/lib/Jifty/Web/Services.pm
@@ -0,0 +1,175 @@
+package Jifty::Web::Services;
+
+use strict;
+use warnings;
+
+use base qw(Jifty::Object);
+
+use Scalar::Util qw(blessed);
+use XML::Simple;
+use Jifty::JSON;
+use Jifty::YAML;
+
+sub JSON {
+    my $self = shift;
+
+    Jifty->handler->apache->content_type("text/x-json");
+
+    my %results = Jifty->web->response->results;
+    for (values %results) {
+        $_ = $_->as_hash;
+
+        # backwards compatibility :(
+        $_->{_content} = delete $_->{content};
+    }
+    Jifty->web->out( Jifty::JSON::objToJson(\%results) );
+}
+
+sub YAML {
+    my $self = shift;
+
+    Jifty->handler->apache->content_type("text/x-yaml");
+
+    my %results = Jifty->web->response->results;
+    for (values %results) {
+        $_ = $_->as_hash;
+
+        # backwards compatibility :(
+        $_->{_content} = delete $_->{content};
+    }
+    Jifty->web->out( Jifty::YAML::Dump(\%results) );
+}
+
+sub XML {
+    my $self = shift;
+
+    Jifty->handler->apache->content_type('text/xml; charset=utf-8');
+
+    my $output = "";
+    my $writer = XML::Writer->new( OUTPUT => \$output, UNSAFE => 1 );
+    $writer->xmlDecl( "UTF-8", "yes" );
+    $writer->startTag("response");
+
+    if (my $ext = Jifty->web->request->argument('_webservice_external_redirect')) {
+        $writer->startTag("redirect");
+        $writer->cdataElement(url=> $ext);
+        $writer->endTag;
+        $writer->endTag;
+        Jifty->web->out($output);
+        return;
+    }
+
+    FRAGMENT:
+    for my $fragment ( Jifty->web->request->fragments ) {
+        # Set up the form if need be
+        Jifty->web->form->_init;
+        Jifty->web->form->is_open(1) if $fragment->in_form;
+
+        # Set up the region stack
+        local Jifty->web->{'region_stack'} = [];
+        my @regions;
+        do {
+            push @regions, $fragment;
+        } while ($fragment = $fragment->parent);
+
+        for my $current (reverse @regions) {
+            my $new = Jifty->web->get_region( join '-', grep {$_} Jifty->web->qualified_region, $current->name );
+
+            # Arguments can be complex mapped hash values.  Get their
+            # real values by mapping.
+            my %defaults = %{$current->arguments || {}};
+            for (keys %defaults) {
+                my ($key, $value) = Jifty::Request::Mapper->map(destination => $_, source => $defaults{$_});
+                delete $defaults{$_};
+                $defaults{$key} = $value;
+            }
+
+            $new ||= Jifty::Web::PageRegion->new(
+                name           => $current->name,
+                path           => URI::Escape::uri_unescape($current->path),
+                region_wrapper => $current->wrapper,
+                parent         => Jifty->web->current_region,
+                defaults       => \%defaults,
+            );
+
+            # It's possible that the pageregion creation could fail -- no
+            # name, for instance.  In that case, bail on this fragment.
+            next FRAGMENT unless $new;
+
+            $new->enter;
+        }
+
+        # Stuff the rendered region into the XML
+        my $current_region = Jifty->web->current_region;
+        $writer->startTag( "fragment", id => $current_region->qualified_name );
+        my $args = $current_region->arguments;
+        $writer->dataElement( "argument", $args->{$_}, name => $_) for sort keys %$args;
+        if (Jifty->config->framework('ClientTemplate') && $current_region->client_cacheable) {
+            $writer->cdataElement( "cacheable", $current_region->client_cache_content, type => $current_region->client_cacheable );
+        }
+        $writer->cdataElement( "content", $current_region->as_string );
+        $writer->endTag();
+
+        # Clean up region stack and form
+        Jifty->web->current_region->exit while Jifty->web->current_region;
+        Jifty->web->form->is_open(0);
+    }
+
+    my %results = Jifty->web->response->results;
+    for (keys %results) {
+        $writer->startTag("result", moniker => $_, class => $results{$_}->action_class);
+        $writer->dataElement("success", $results{$_}->success);
+
+        $writer->dataElement("message", $results{$_}->message) if $results{$_}->message;
+        $writer->dataElement("error", $results{$_}->error) if $results{$_}->error;
+
+        my %warnings = $results{$_}->field_warnings;
+        my %errors   = $results{$_}->field_errors;
+        my %fields; $fields{$_}++ for keys(%warnings), keys(%errors);
+        for (sort keys %fields) {
+            next unless $warnings{$_} or $errors{$_};
+            $writer->startTag("field", name => $_);
+            $writer->dataElement("warning", $warnings{$_}) if $warnings{$_};
+            $writer->dataElement("error", $errors{$_}) if $errors{$_};
+            $writer->endTag();
+        }
+
+        # XXX TODO: Hack because we don't have a good way to serialize
+        # Jifty::DBI::Record's yet, which are technically circular data
+        # structures at some level (current_user of a
+        # current_user->user_object is itself)
+        my $content = stripkids($results{$_}->content);
+        $writer->raw(XML::Simple::XMLout($content, NoAttr => 1, RootName => "content", NoIndent => 1))
+          if keys %{$content};
+
+        $writer->endTag();
+    }
+
+    $writer->endTag();
+    Jifty->handler->apache->content_type('text/xml; charset=UTF-8');
+    Jifty->web->out($output);
+}
+
+sub stripkids {
+    my $top = shift;
+    if ( not ref $top ) {
+        return $top
+    }
+    elsif (
+        blessed($top)
+        and (  $top->isa("Jifty::DBI::Record")
+            or $top->isa("Jifty::DBI::Collection") )
+        )
+    {
+        return undef;
+    }
+    elsif ( ref $top eq 'HASH' ) {
+        $top->{$_} = stripkids( $top->{$_} ) foreach keys %$top;
+    }
+    elsif ( ref $top eq 'ARRAY' ) {
+        push @$top, stripkids( $_ ) foreach splice @$top;
+    }
+    return $top;
+}
+
+1;

commit b0e437b93869764e515277b0c3ac7f3fe7587491
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Wed May 13 00:49:17 2009 +0000

    * replace share/web/templates/__jifty/webservices/* with method calls
    * use lower case method names
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7022 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web/Services.pm b/lib/Jifty/Web/Services.pm
index 9176439..1dd346e 100644
--- a/lib/Jifty/Web/Services.pm
+++ b/lib/Jifty/Web/Services.pm
@@ -10,7 +10,7 @@ use XML::Simple;
 use Jifty::JSON;
 use Jifty::YAML;
 
-sub JSON {
+sub json {
     my $self = shift;
 
     Jifty->handler->apache->content_type("text/x-json");
@@ -25,7 +25,7 @@ sub JSON {
     Jifty->web->out( Jifty::JSON::objToJson(\%results) );
 }
 
-sub YAML {
+sub yaml {
     my $self = shift;
 
     Jifty->handler->apache->content_type("text/x-yaml");
@@ -40,10 +40,10 @@ sub YAML {
     Jifty->web->out( Jifty::YAML::Dump(\%results) );
 }
 
-sub XML {
+sub xml {
     my $self = shift;
 
-    Jifty->handler->apache->content_type('text/xml; charset=utf-8');
+    Jifty->handler->apache->content_type('text/xml; charset=UTF-8');
 
     my $output = "";
     my $writer = XML::Writer->new( OUTPUT => \$output, UNSAFE => 1 );
@@ -138,7 +138,7 @@ sub XML {
         # Jifty::DBI::Record's yet, which are technically circular data
         # structures at some level (current_user of a
         # current_user->user_object is itself)
-        my $content = stripkids($results{$_}->content);
+        my $content = _stripkids($results{$_}->content);
         $writer->raw(XML::Simple::XMLout($content, NoAttr => 1, RootName => "content", NoIndent => 1))
           if keys %{$content};
 
@@ -146,11 +146,10 @@ sub XML {
     }
 
     $writer->endTag();
-    Jifty->handler->apache->content_type('text/xml; charset=UTF-8');
     Jifty->web->out($output);
 }
 
-sub stripkids {
+sub _stripkids {
     my $top = shift;
     if ( not ref $top ) {
         return $top
diff --git a/share/web/templates/__jifty/webservices/json b/share/web/templates/__jifty/webservices/json
index bacde46..1a89cee 100644
--- a/share/web/templates/__jifty/webservices/json
+++ b/share/web/templates/__jifty/webservices/json
@@ -1,13 +1,3 @@
-% $r->content_type("text/x-json");
-<% Jifty::JSON::objToJson(\%results) |n%>
-
 <%INIT>
-my %results = Jifty->web->response->results;
-for (values %results) {
-    $_ = $_->as_hash;
-
-    # backwards compatibility :(
-    $_->{_content} = delete $_->{content};
-}
+return Jifty->web->services->json;
 </%INIT>
-
diff --git a/share/web/templates/__jifty/webservices/xml b/share/web/templates/__jifty/webservices/xml
index e4c8d8d..bd7baab 100644
--- a/share/web/templates/__jifty/webservices/xml
+++ b/share/web/templates/__jifty/webservices/xml
@@ -1,130 +1,3 @@
-<%init>
-my $output = "";
-my $writer = XML::Writer->new( OUTPUT => \$output, UNSAFE => 1 );
-$r->content_type('text/xml; charset=utf-8');
-$writer->xmlDecl( "UTF-8", "yes" );
-$writer->startTag("response");
-
-if (my $ext = Jifty->web->request->argument('_webservice_external_redirect')) {
-    $writer->startTag("redirect");
-    $writer->cdataElement(url=> $ext);
-    $writer->endTag();
-    $writer->endTag();
-    Jifty->web->out($output);
-    $m->abort;
-}
-
-FRAGMENT:
-for my $fragment ( Jifty->web->request->fragments ) {
-    # Set up the form if need be
-    Jifty->web->form->_init;
-    Jifty->web->form->is_open(1) if $fragment->in_form;
-
-    # Set up the region stack
-    local Jifty->web->{'region_stack'} = [];
-    my @regions;
-    do {
-        push @regions, $fragment;
-    } while ($fragment = $fragment->parent);
-
-    for my $current (reverse @regions) {
-        my $new = Jifty->web->get_region( join '-', grep {$_} Jifty->web->qualified_region, $current->name );
-
-        # Arguments can be complex mapped hash values.  Get their
-        # real values by mapping.
-        my %defaults = %{$current->arguments || {}};
-        for (keys %defaults) {
-            my ($key, $value) = Jifty::Request::Mapper->map(destination => $_, source => $defaults{$_});
-            delete $defaults{$_};
-            $defaults{$key} = $value;
-        }
-
-        $new ||= Jifty::Web::PageRegion->new(
-            name           => $current->name,
-            path           => URI::Escape::uri_unescape($current->path),
-            region_wrapper => $current->wrapper,
-            parent         => Jifty->web->current_region,
-            defaults       => \%defaults,
-        );
-
-        # It's possible that the pageregion creation could fail -- no
-        # name, for instance.  In that case, bail on this fragment.
-        next FRAGMENT unless $new;
-
-        $new->enter;
-    }
-
-    # Stuff the rendered region into the XML
-    $writer->startTag( "fragment", id => Jifty->web->current_region->qualified_name );
-    my %args = %{ Jifty->web->current_region->arguments };
-    $writer->dataElement( "argument", $args{$_}, name => $_) for sort keys %args;
-    if (Jifty->config->framework('ClientTemplate') && Jifty->web->current_region->client_cacheable) {
-        $writer->cdataElement( "cacheable", Jifty->web->current_region->client_cache_content, type => Jifty->web->current_region->client_cacheable );
-    }
-    $writer->cdataElement( "content", Jifty->web->current_region->as_string );
-    $writer->endTag();
-
-    # Clean up region stack and form
-    Jifty->web->current_region->exit while Jifty->web->current_region;
-    Jifty->web->form->is_open(0);
-}
-
-my %results = Jifty->web->response->results;
-for (keys %results) {
-    $writer->startTag("result", moniker => $_, class => $results{$_}->action_class);
-    $writer->dataElement("success", $results{$_}->success);
-
-    $writer->dataElement("message", $results{$_}->message) if $results{$_}->message;
-    $writer->dataElement("error", $results{$_}->error) if $results{$_}->error;
-
-    my %warnings = $results{$_}->field_warnings;
-    my %errors   = $results{$_}->field_errors;
-    my %fields; $fields{$_}++ for keys(%warnings), keys(%errors);
-    for (sort keys %fields) {
-        next unless $warnings{$_} or $errors{$_};
-        $writer->startTag("field", name => $_);
-        $writer->dataElement("warning", $warnings{$_}) if $warnings{$_};
-        $writer->dataElement("error", $errors{$_}) if $errors{$_};
-        $writer->endTag();
-    }
-
-    # XXX TODO: Hack because we don't have a good way to serialize
-    # Jifty::DBI::Record's yet, which are technically circular data
-    # structures at some level (current_user of a
-    # current_user->user_object is itself)
-    my $content = stripkids($results{$_}->content);
-    $writer->raw(XML::Simple::XMLout($content, NoAttr => 1, RootName => "content", NoIndent => 1))
-      if keys %{$content};
-
-    $writer->endTag();
-}
-
-$writer->endTag();
-Jifty->handler->apache->content_type('text/xml; charset=UTF-8');
-Jifty->web->out($output);
-</%init>
-<%once>
-use Scalar::Util qw(blessed);
-use XML::Simple;
-sub stripkids {
-    my $top = shift;
-    if ( not ref $top ) { return $top }
-    elsif (
-        blessed($top)
-        and (  $top->isa("Jifty::DBI::Record")
-            or $top->isa("Jifty::DBI::Collection") )
-        )
-    {
-        return undef;
-    } elsif ( ref $top eq 'HASH' ) {
-        foreach my $item ( keys %$top ) {
-            $top->{$item} = stripkids( $top->{$item} );
-        }
-    } elsif ( ref $top eq 'ARRAY' ) {
-        for ( 0 .. $#{$top} ) {
-            $top->[$_] = stripkids( $top->[$_] );
-        }
-    }
-    return $top;
-}
-</%once>
+<%INIT>
+return Jifty->web->services->xml;
+</%INIT>
diff --git a/share/web/templates/__jifty/webservices/yaml b/share/web/templates/__jifty/webservices/yaml
index aba0115..ccc7a45 100644
--- a/share/web/templates/__jifty/webservices/yaml
+++ b/share/web/templates/__jifty/webservices/yaml
@@ -1,13 +1,4 @@
-% $r->content_type("text/x-yaml");
-<% Jifty::YAML::Dump(\%results) |n%>
-
 <%INIT>
-my %results = Jifty->web->response->results;
-for (values %results) {
-    $_ = $_->as_hash;
-
-    # backwards compatibility :(
-    $_->{_content} = delete $_->{content};
-}
+return Jifty->web->services->yaml;
 </%INIT>
 

commit 4d2998a629d38d866b72605f0ec661a054ddfe68
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Wed May 13 18:47:32 2009 +0000

    Complete stripkids -> _stripkids renaming
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7031 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web/Services.pm b/lib/Jifty/Web/Services.pm
index 1dd346e..2a88ad3 100644
--- a/lib/Jifty/Web/Services.pm
+++ b/lib/Jifty/Web/Services.pm
@@ -163,10 +163,10 @@ sub _stripkids {
         return undef;
     }
     elsif ( ref $top eq 'HASH' ) {
-        $top->{$_} = stripkids( $top->{$_} ) foreach keys %$top;
+        $top->{$_} = _stripkids( $top->{$_} ) foreach keys %$top;
     }
     elsif ( ref $top eq 'ARRAY' ) {
-        push @$top, stripkids( $_ ) foreach splice @$top;
+        push @$top, _stripkids( $_ ) foreach splice @$top;
     }
     return $top;
 }

commit ab920baa4f3d889b01159b9bcdbbc010c081c4ec
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Wed May 13 18:48:02 2009 +0000

    Jifty::web::Services has no ->new method
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7032 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web.pm b/lib/Jifty/Web.pm
index 47d51fe..d0e878a 100644
--- a/lib/Jifty/Web.pm
+++ b/lib/Jifty/Web.pm
@@ -1391,7 +1391,7 @@ Returns L<Jifty::Web::Services> object.
 
 sub services {
     require Jifty::Web::Services;
-    return new Jifty::Web::Services;
+    return 'Jifty::Web::Services';
 }
 
 =head2 is_ssl

commit 7f31447a799a17cc861ba728b96e4cff36ac10fd
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Wed May 13 18:48:05 2009 +0000

    Refactor common code
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7033 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web/Services.pm b/lib/Jifty/Web/Services.pm
index 2a88ad3..61738bb 100644
--- a/lib/Jifty/Web/Services.pm
+++ b/lib/Jifty/Web/Services.pm
@@ -10,11 +10,9 @@ use XML::Simple;
 use Jifty::JSON;
 use Jifty::YAML;
 
-sub json {
+sub _results {
     my $self = shift;
 
-    Jifty->handler->apache->content_type("text/x-json");
-
     my %results = Jifty->web->response->results;
     for (values %results) {
         $_ = $_->as_hash;
@@ -22,22 +20,19 @@ sub json {
         # backwards compatibility :(
         $_->{_content} = delete $_->{content};
     }
-    Jifty->web->out( Jifty::JSON::objToJson(\%results) );
+    return \%results;
 }
 
-sub yaml {
+sub json {
     my $self = shift;
+    Jifty->handler->apache->content_type("text/x-json");
+    Jifty->web->out( Jifty::JSON::objToJson( $self->_results ) );
+}
 
+sub yaml {
+    my $self = shift;
     Jifty->handler->apache->content_type("text/x-yaml");
-
-    my %results = Jifty->web->response->results;
-    for (values %results) {
-        $_ = $_->as_hash;
-
-        # backwards compatibility :(
-        $_->{_content} = delete $_->{content};
-    }
-    Jifty->web->out( Jifty::YAML::Dump(\%results) );
+    Jifty->web->out( Jifty::YAML::Dump( $self->_results ) );
 }
 
 sub xml {

commit 5adde315fd03cb2583d9957dc593c319652b5f2e
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Sun May 17 03:49:05 2009 +0000

    * delete old copies of core templates
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7042 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/View/Declare/CoreTemplates.pm b/lib/Jifty/View/Declare/CoreTemplates.pm
index 99fad7d..a2b0ba4 100644
--- a/lib/Jifty/View/Declare/CoreTemplates.pm
+++ b/lib/Jifty/View/Declare/CoreTemplates.pm
@@ -5,8 +5,6 @@ use warnings;
 
 use Jifty::View::Declare -base;
 
-use Scalar::Defer;
-
 =head1 NAME 
 
 Jifty::View::Declare::CoreTemplates - Templates Jifty can't function without
@@ -200,152 +198,19 @@ template '__jifty/validator.xml' => sub {
     Jifty->web->out($output);
 };
 
-template '__jifty/webservices/xml' => sub {
-    my $output = "";
-    my $writer = XML::Writer->new(
-        OUTPUT => \$output,
-        UNSAFE => 1
-    );
-    $writer->xmlDecl( "UTF-8", "yes" );
-    $writer->startTag("response");
-    for my $f ( Jifty->web->request->fragments ) {
-
-        # Set up the region stack
-        local Jifty->web->{'region_stack'} = [];
-        my @regions;
-        do {
-            push @regions, $f;
-        } while ( $f = $f->parent );
-
-        for $f ( reverse @regions ) {
-            my $new =
-              Jifty->web->get_region( join '-',
-                grep { $_ } Jifty->web->qualified_region, $f->name );
-
-            # Arguments can be complex mapped hash values.  Get their
-            # real values by mapping.
-            my %defaults = %{ $f->arguments || {} };
-            for ( keys %defaults ) {
-                my ( $key, $value ) = Jifty::Request::Mapper->map(
-                    destination => $_,
-                    source      => $defaults{$_}
-                );
-                delete $defaults{$_};
-                $defaults{$key} = $value;
-            }
-
-            $new ||= Jifty::Web::PageRegion->new(
-                name           => $f->name,
-                path           => $f->path,
-                region_wrapper => $f->wrapper,
-                parent         => Jifty->web->current_region,
-                defaults       => \%defaults,
-            );
-            $new->enter;
-        }
-
-        # Stuff the rendered region into the XML
-        $writer->startTag( "fragment",
-            id => Jifty->web->current_region->qualified_name );
-        my %args = %{ Jifty->web->current_region->arguments };
-        $writer->dataElement( "argument", $args{$_}, name => $_ )
-          for sort keys %args;
-        $writer->cdataElement( "content",
-            Jifty->web->current_region->as_string );
-        $writer->endTag();
-
-        Jifty->web->current_region->exit while Jifty->web->current_region;
-    }
-
-    my %results = Jifty->web->response->results;
-    for ( keys %results ) {
-        $writer->startTag(
-            "result",
-            moniker => $_,
-            class   => $results{$_}->action_class
-        );
-        $writer->dataElement( "success", $results{$_}->success );
-
-        $writer->dataElement( "message", $results{$_}->message )
-          if $results{$_}->message;
-        $writer->dataElement( "error", $results{$_}->error )
-          if $results{$_}->error;
-
-        my %warnings = $results{$_}->field_warnings;
-        my %errors   = $results{$_}->field_errors;
-        my %fields;
-        $fields{$_}++ for keys(%warnings), keys(%errors);
-        for ( sort keys %fields ) {
-            next unless $warnings{$_} or $errors{$_};
-            $writer->startTag( "field", name => $_ );
-            $writer->dataElement( "warning", $warnings{$_} )
-              if $warnings{$_};
-            $writer->dataElement( "error", $errors{$_} )
-              if $errors{$_};
-            $writer->endTag();
-        }
-
-        # XXX TODO: Hack because we don't have a good way to serialize
-        # Jifty::DBI::Record's yet, which are technically circular data
-        # structures at some level (current_user of a
-        # current_user->user_object is itself)
-        use Scalar::Util qw(blessed);
-        my $content = $results{$_}->content;
-
-
-        $content = _stripkids($content);
-        use XML::Simple;
-        $writer->raw(
-            XML::Simple::XMLout(
-                $content,
-                NoAttr   => 1,
-                RootName => "content",
-                NoIndent => 1
-            )
-        ) if keys %{$content};
-
-        $writer->endTag();
-    }
-
-    $writer->endTag();
-    Jifty->handler->apache->content_type('text/xml; charset=UTF-8');
-
-    # For some reason, this line is needed, lest we end up outputting ISO-8859-1 text
-    utf8::decode($output);
+=cut
 
-    outs_raw($output);
+template '__jifty/webservices/xml' => sub {
+    Jifty->web->services->xml;
+    return;
+};
+template '__jifty/webservices/json' => sub {
+    Jifty->web->services->json;
+    return;
 };
-
-        sub _stripkids {
-            my $top = shift;
-            if ( not ref $top ) { return $top }
-            elsif (
-                blessed($top)
-                and (  $top->isa("Jifty::DBI::Record")
-                    or $top->isa("Jifty::DBI::Collection") )
-              )
-            {
-                return undef;
-            }
-            elsif ( ref $top eq 'HASH' ) {
-                foreach my $item ( keys %$top ) {
-                    $top->{$item} = _stripkids( $top->{$item} );
-                }
-            }
-            elsif ( ref $top eq 'ARRAY' ) {
-                for ( 0 .. $#{$top} ) {
-                    $top->[$_] = _stripkids( $top->[$_] );
-                }
-            }
-            return $top;
-        }
-
-
 template '__jifty/webservices/yaml' => sub {
-    Jifty->handler->apache->content_type("text/x-yaml");
-    outs( Jifty::YAML::Dump( { Jifty->web->response->results } ) );
+    Jifty->web->services->yaml;
+    return;
 };
 
-=cut
-
 1;

commit 150f037609d6172b5951e8085a8d53d043d443d9
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Sun May 17 03:49:50 2009 +0000

    * put core templates into roots
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7043 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/View/Declare/Handler.pm b/lib/Jifty/View/Declare/Handler.pm
index 153e058..c9c8d77 100644
--- a/lib/Jifty/View/Declare/Handler.pm
+++ b/lib/Jifty/View/Declare/Handler.pm
@@ -47,6 +47,9 @@ sub config {
         %{ Jifty->config->framework('Web')->{'TemplateDeclareConfig'} ||{}},
     );
 
+    Jifty::Util->require('Jifty::View::Declare::CoreTemplates');
+    push @{$config{roots}}, 'Jifty::View::Declare::CoreTemplates';
+
     for my $plugin ( Jifty->plugins ) {
         my $comp_root = $plugin->template_class;
         Jifty::Util->require($comp_root);

commit 0645257c68599452d841e92246ff5a3408c47cb8
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Sun May 17 03:53:45 2009 +0000

    * add simple constructor
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7044 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web/Services.pm b/lib/Jifty/Web/Services.pm
index 61738bb..47191e0 100644
--- a/lib/Jifty/Web/Services.pm
+++ b/lib/Jifty/Web/Services.pm
@@ -10,6 +10,11 @@ use XML::Simple;
 use Jifty::JSON;
 use Jifty::YAML;
 
+sub new {
+    my $proto = shift;
+    return bless {}, ref($proto)||$proto;
+}
+
 sub _results {
     my $self = shift;
 

commit ed646b11efa3cb223643de41a7cf65bf5ea81e35
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Sun May 17 03:57:10 2009 +0000

    * return back constructing of an object cuz we have constructor,
      I believe at some point we'll need real object
    
    git-svn-id: svn+ssh://svn.bestpractical.com/svn/jifty.org/jifty/branches/webservices-in-td@7045 e84bef0a-9b06-0410-84ba-c4c9edb13aeb

diff --git a/lib/Jifty/Web.pm b/lib/Jifty/Web.pm
index d0e878a..47d51fe 100644
--- a/lib/Jifty/Web.pm
+++ b/lib/Jifty/Web.pm
@@ -1391,7 +1391,7 @@ Returns L<Jifty::Web::Services> object.
 
 sub services {
     require Jifty::Web::Services;
-    return 'Jifty::Web::Services';
+    return new Jifty::Web::Services;
 }
 
 =head2 is_ssl

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


More information about the Jifty-commit mailing list