The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Cookieville::Client - Client that talks with Cookieville server

DESCRIPTION

Cookieville::Client is a client that talks with the Cookieville server.

SYNOPSIS

  use Cookieville::Client;
  my $ua = Cookieville::Client->new(url => 'http://127.0.0.1/');
  my $res;

  $res = $ua->search(
            'SomeSource',
            { col_a => { like => '%42' } },
            { limit => 10 },
          );

  $res = $ua->delete(SomeSource => 123);
  $res = $ua->put(SomeSource => { col_a => 123 });
  $res = $ua->patch(SomeSource => 42 => { col_a => 123 });

Error handling

Blocking requests will throw an exception on error, while all callbacks receive the error as a string. Example:

  use Mojolicious::Lite;

  get '/artists' => sub {

    $c->delay(
      sub {
        my ($delay) = @_;
        $c->cookieville_helper->search(Artist => {}, $delay->begin);
      },
      sub {
        my ($delay, $err, $res) = @_;
        return $c->reply->exception($err) if $err;
        return $c->render(json => $res->{data});
      },
    );
  };

ATTRIBUTES

id

  $str = $self->id;
  $self = $self->id($str);

Used to set the "X-Cookieville-Auth-Id" HTTP header. This can be used by the Cookieville::Plugin::Authorize plugin.

Defaults to COOKIEVILLE_AUTH_ID environment variable.

url

  $url_obj = $self->url;
  $self = $self->url($url_obj);

Holds the base URL to the Cookieville server. Default to "http://127.0.0.1/".

METHODS

new

Will make sure "url" in constructor is indeed a Mojo::URL object.

delete

  $res = $self->delete($source => $id);
  $self = $self->delete($source => $id, $cb);

Used to DELETE a single record from $source, identified by id.

patch

  $res = $self->patch($source => $id => \%data);
  $self = $self->patch($source => $id => \%data, $cb);

Used to UPDATE a single record from $source, identified by id. %data can be partial or full set of column/values.

put

  $res = $self->put($source => \%data);
  $self = $self->put($source => \%data, $cb);

Used to INSERT or UPDATE a single row. An UPDATE will be issued if %data contain an unique constraint a matching record in database.

"put" v.s "patch": "patch" will never INSERT a new record, while "put" will make sure a given record exists.

NOTE: %data without any unique constraints will result in INSERT.

  $res = $self->search($source => \%query, \%extra);
  $self = $self->search($source => \%query, \%extra, $cb);

Does a SELECT from the given source with a given %query and %extra parameters. This method is very similar to "search" in DBIx::Class::ResultSet, but with less %extra options:

  • columns

    Only output the given columns. Example:

      $extra{columns} = [qw( id name )];
  • limit

    Used to limit the number of rows in the output.

      $extra{limit} = 10;
  • page=:int (optional)

    Used for pagination when limit is specified.

      $extra{limit} = 2;
  • order_by

    Sort the result by column(s). Examples:

      $extra{order_by} = ["name"];
      $extra{order_by} = { "-desc" => "name" };

COPYRIGHT AND LICENSE

Copyright (C) 2014, Jan Henning Thorsen

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.

AUTHOR

Jan Henning Thorsen - jhthorsen@cpan.org