NAME
VUser::ResultSet - Data returned by Extension tasks.
DESCRIPTION
VUser::ResultSets are used to return data from vuser extensions. An extension can also use it return errors.
SYSNOPSIS
my $rs = VUser::ResultSet->new();
$rs->add_meta(VUser::Meta->new(name => "color", type => "string"));
$rs->add_meta(VUser::Meta->new(name => "size", type => "integer"));
$rs->add_data(["blue", 10]);
$rs->add_data(["orange", 6]);
# Returning errors
$rs->error_code(42);
$rs->add_error("Unknown question: %s",
'Life, the universe and everything.');
return $rs;
METHODS
Creating the ResultSet
The following methods are used by extensions to create a result set that may be returned from task functions.
- new
-
Create a new ResultSet object.
- add_meta(VUser::Meta)
-
Meta data about the data the task is returning is required so the client can deal with it in a nice way.
- add_data([]|{})
-
add_data() takes either an array reference or hash ref. If it's an array ref, the array must have the same number of entries as the number of meta data entries added with add_meta(). Values but also be in the same order or there will be much confusion.
If a hash reference is passed, the keys must corespond to the names of the meta data added with add_meta(). (Other keys will be ignored.) The number if values must match the number of meta data entries created with add_meta.
Once add_data() has been called, no more meta data may be added to the ResultSet object.
Returning Errors
You can use a ResultSet to return errors from your extension.
- error_code($)
-
Sets the error code for the result to the passed in integer value. If the value passed to
error_code()
is not an integer, error_code() will complain and leave the error code unset. - add_error($;@)
-
Adds an error string to the list of errors. The parameters are passed to sprintf for formatting. See "sprintf" in perlfunc for more details.
- errors()
-
Returns the list of errors set by
add_error()
.
Using a ResultSet
These methods are used by apps that call ExtHandler->run_tasks to get the data out of the returned ResultSet(s).
- results(%)
-
Get the results. The parameter is a hash with the following keys.
- order_by
-
The name of the meta data to sort on, if desired. If it's not defined, the results will be returned in the order the extension added them.
- sort_order
-
Value may be one of 'asc' or 'des'. 'asc' means sort in ascending order, 'des' is descending order. Ascending is the default. This has no effect if order_by is not specified or is an unknown column.
- get_metadata
-
Get the list of meta data for this result set. Each value is a VUser::Meta object.
development notes
The following are notes that I wrote while developing this system. They should match reality but aren't guaranteed to.
task() return values.
Return the following info:
extension name (needed?) result set meta value(s)
result set: { meta = [meta1, meta2, ...] values = [ [0] -> [value1, value2, ...] ... [N] -> [value1, value2, ...] ] colmap = { meta1->name => 0, meta2->name => 1, ..., metaN->name => N-1 } current; pointer to current location in data set. used by next(), previous(), current() number of rows } ===
result set methods: @values = results(order_by => meta->name, direction => asc|des) $value[N] = [value1, value2]; where value1 is the data that corresponds to the meta.
@values = results_hashrefs(order_by => meta->name, direction => asc|des)
$value[N] = { meta1->name => value1, meta2->name => value2 }
@meta = get_columns()
@meta = get_metadata()
order_by($meta->name, asc|des); sets the sort order for results*()
Iterator interface (do later)
reset(); reset current pointer to the beginning of the list
sort($meta->name, asc|des); sort values by given column. Resets pointer
next(); move the current pointer and return the result or undef if none
next_hash(); same as above but return the result as a hash
current(); return the current result
current_hash()
back(); move the current pointer back and return the result or undef
back_hash()
How to add data to result set?
add_meta(VUser::Meta)
add_data([value1, value2, ...])
add_data({meta1->name => value1, meta2->name => value2, ...})
BUGS
There are currently no checks to verify that the data added with add_data() matches the data type specified with add_meta().
AUTHOR
Randy Smith <perlstalker@vuser.org>
LICENSE
This file is part of vuser.
vuser is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
vuser is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with vuser; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA