first draft of <angular/> REST server
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 30 Oct 2010 13:29:12 +0000 (15:29 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 30 Oct 2010 13:29:12 +0000 (15:29 +0200)
It has somewhat working read replication and stores data in memory

angular-server.pl [new file with mode: 0755]

diff --git a/angular-server.pl b/angular-server.pl
new file mode 100755 (executable)
index 0000000..f91d8f5
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/env perl
+
+use Mojolicious::Lite;
+use Data::Dump qw(dump);
+
+# based on
+# http://docs.getangular.com/REST.Basic
+# http://angular.getangular.com/data
+
+our $data;
+
+get '/' => 'index';
+
+get '/replicate' => sub {
+       my $self = shift;
+
+       if ( my $from = $self->param('from') ) {
+               my $got = $self->client->get( $from )->res->json;
+               warn "# from $from ",dump($got);
+               $self->render_json( $got );
+
+               my $database = $got->{name};
+               my $entities = $got->{entities};
+
+               if ( $database && $entities ) {
+                       foreach my $entity ( keys %$entities ) {
+                               my $e = $self->client->get( "$from/$entity" )->res->json;
+                               warn "# replicated $entity ", dump($e);
+                               $data->{$database}->{$entity} = $e;
+                       }
+               }
+       }
+};
+
+get '/data/' => sub {
+       my $self = shift;
+       $self->render_json( [ keys %$data ] );
+};
+
+get '/data/:database' => sub {
+       my $self = shift;
+       my $database = $self->param('database');
+       my $list_databases = { name => $database };
+       foreach my $database ( keys %{ $data->{ $database }} ) {
+               my $count = scalar keys %{ $data->{$database} };
+               $list_databases->{entities}->{$database} = $count;
+               $list_databases->{document_count} += $count;
+       }
+       warn dump($list_databases);
+       $self->render_json( $list_databases );
+};
+
+get '/data/:database/:entity' => sub {
+       my $self = shift;
+
+};
+
+get '/data/:database/:entity/:id' => sub {
+    my $self = shift;
+
+};
+
+any [ 'put' ] => '/data/:database/:entity/:id' => sub {
+       my $self = shift;
+       $data->{ $self->param('database') }->{ $self->param('entity') }->{ $self->param('id') } = $self->req->json;
+       dumper $data;
+};
+
+get '/demo/:groovy' => sub {
+       my $self = shift;
+    $self->render(text => $self->param('groovy'), layout => 'funky');
+};
+
+
+app->start;
+__DATA__
+
+@@ index.html.ep
+% layout 'funky';
+Yea baby!
+
+@@ layouts/funky.html.ep
+<!doctype html><html>
+    <head><title>Funky!</title></head>
+    <body><%== content %></body>
+</html>