NAME

Catalyst::TraitFor::Controller::DoesExtPaging - Paginate DBIx::Class::ResultSets for ExtJS consumption

VERSION

version 0.093350

SYNOPSIS

package MyApp::Controller;
our $VERSION = '0.093350';



use Moose;
BEGIN { extends 'Catalyst::Controller' }

# a single with would be better, but we can't do that
# see: http://rt.cpan.org/Public/Bug/Display.html?id=46347
with 'Catalyst::TraitFor::Controller::DBIC::DoesPaging';
with 'Catalyst::TraitFor::Controller::DoesExtPaging';

sub people :Local {
   # ...
   my $json = $self->ext_paginate($paginated_rs);
   # ...
}

sub people_lite :Local {
   # ...
   my $json = $self->ext_paginate($paginated_rs, sub {
      my $person = shift;
      return {
         first_name => $person->first_name,
         last_name => $person->last_name,
      }
   });
   # ...
}

# this will call the 'foo' method on each person and put the returned
# value into the datastructure
sub people_more_different :Local {
   # ...
   my $json = $self->ext_paginate($paginated_rs, 'foo');
   # ...
}

sub programmers_do_it_by_hand :Local {
   # ...
   my $data = [qw{foo bar baz}];
   my $total = 10;
   my $json = $self->ext_parcel($data, $total);
   # ...
}

# defaults total to amount of items passed in
sub some_programmers_do_it_by_hand_partially :Local {
   # ...
   my $data = [qw{foo bar baz}];
   my $json = $self->ext_parcel($data);
   # ...
}

DESCRIPTION

This module is mostly for sending DBIx::Class paginated data to ExtJS based javascript code.

METHODS

ext_paginate

my $resultset = $self->model('DB::Foo');
my $results   = $self->paginate($resultset);
my $json      = $self->ext_paginate($resultset);
my $json_str  = to_json($json);

Description

Returns a structure like the following from the ResultSet:

{
   data  => \@results,
   total => $count_before_pagination
}

Valid arguments are:

rs      - paginated ResultSet to get the data from
coderef - any valid scalar that can be called on the result object

ext_parcel

my $items    = [qw{foo bar baz}];
my $total    = 7;
my $json     = $self->ext_parcel($data, $total);
my $json_str = to_json($json);

Description

Returns a structure like the following:

{
   data  => [@{$items}],
   total => $total || scalar @{$items}
}

Valid arguments are:

list  - a list of anything you want to be in the data structure
total - whatever you want to say the total is.  Defaults to size of
        the list passed in.

SEE ALSO

Catalyst::Controller::Role::DBIC::DoesPaging.

THANKS

Thanks to Micro Technology Services, Inc. for sponsoring initial development of this module.

AUTHOR

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2009 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.