use a json view instead of writing json directly
authorCharles McGarvey <chazmcgarvey@brokenzipper.com>
Wed, 4 Jan 2012 02:27:13 +0000 (19:27 -0700)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Wed, 4 Jan 2012 02:27:13 +0000 (19:27 -0700)
lib/Chatty.pm
lib/Chatty/Controller/Root.pm
lib/Chatty/View/JSON.pm [new file with mode: 0644]
t/view_JSON.t [new file with mode: 0644]

index 5b91943aace5c4fd8a2a6c3d0d4e234fa086c0d1..80772e7d8948353e1ada7930bf1ecfe2f7f07bb5 100644 (file)
@@ -52,8 +52,12 @@ __PACKAGE__->config(
                },
        },
        'Plugin::Session' => {
-               flash_to_stash => 1
-       }
+               flash_to_stash => 1,
+       },
+       default_view => 'HTML',
+       'View::JSON' => {
+               expose_stash => 'json',
+       },
 );
 
 # Start the application
index 3b7fa3ddbaeca90f5f118ff509bef2966fe612be..fec3f090f81fec61afd4aa3029797c319d71243b 100644 (file)
@@ -10,8 +10,6 @@ BEGIN { extends 'Catalyst::Controller' }
 #
 __PACKAGE__->config(namespace => '');
 
-use JSON 'encode_json';
-
 use Chatty::Form::Login;
 use Chatty::Form::Register;
 
@@ -137,22 +135,19 @@ sub register_validate :Local :Args(0) {
        my $id = $c->req->param('fieldId');
        my $username = $c->req->param('fieldValue');
 
-       my $json_arr = [];
-
        if ($username) {
                my $account = $c->model('DB::Account')->find({username => $username});
                if (!$account) {
-                       $json_arr = ["$id", 1, "This username is available. Nice!"];
+                       $c->stash->{json} = ["$id", 1, "This username is available. Nice!"];
                }
                else {
-                       $json_arr = ["$id", 0, "This username is taken."];
+                       $c->stash->{json} = ["$id", 0, "This username is taken."];
                }
        }
        else {
-               $json_arr = ["$id", 0, "Invalid arguments to check script."];
+               $c->stash->{json} = ["$id", 0, "Invalid arguments to check script."];
        }
-       $c->res->content_type("application/json");
-       $c->res->body(encode_json($json_arr));
+       $c->forward('View::JSON');
 }
 
 =head2 access_denied
diff --git a/lib/Chatty/View/JSON.pm b/lib/Chatty/View/JSON.pm
new file mode 100644 (file)
index 0000000..30510ca
--- /dev/null
@@ -0,0 +1,37 @@
+package Chatty::View::JSON;
+
+use JSON::XS ();
+
+use Moose;
+use MooseX::NonMoose;
+use namespace::autoclean;
+
+extends 'Catalyst::View::JSON';
+
+sub encode_json {
+       my ($self, $c, $data) = @_;
+       JSON::XS->new->ascii->pretty->allow_nonref->encode($data);
+}
+
+=head1 NAME
+
+Chatty::View::JSON - Catalyst View
+
+=head1 DESCRIPTION
+
+Catalyst View.
+
+=head1 AUTHOR
+
+Charles McGarvey
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+__PACKAGE__->meta->make_immutable;
+
+1;
diff --git a/t/view_JSON.t b/t/view_JSON.t
new file mode 100644 (file)
index 0000000..52b65e0
--- /dev/null
@@ -0,0 +1,8 @@
+use strict;
+use warnings;
+use Test::More;
+
+
+BEGIN { use_ok 'Chatty::View::JSON' }
+
+done_testing();
This page took 0.027693 seconds and 4 git commands to generate.