RSS Git Download  Clone
Raw Blame History
package Reporter::Validator;
 
use Reporter::Class;

use HTTP::Validate qw{:keywords :validators};

define_ruleset( 'filters' => 
    { param => 'lab_number', valid => MATCH_VALUE( qr{\d+/\d{2}} ) },
        "Return all datasets associated with the given latitude.",
);
=begin
define_ruleset( 'display' => 
    { optional => 'full', valid => FLAG_VALUE },
        "If specified, then the full dataset descriptions are returned.  No value is necessary",
    { optional => 'short', valid => FLAG_VALUE },
        "If specified, then a brief summary of the datasets is returned.  No value is necessary",
    { at_most_one => ['full', 'short'] },
    { optional => 'limit', valid => [POS_ZERO_VALUE, ENUM('all')], default => 'all',
      errmsg => "acceptable values for 'limit' are either 'all', 0, or a positive integer" },
        "Limits the number of results returned.  Acceptable values are 'all', 0, or a positive integer.",
);
=cut 
define_ruleset( 'dataset_query' =>
    "This URL queries for stored datasets.  The following parameters select the datasets",
    "to be displayed, and you must specify at least one of them:",
    { require => 'filters',
      errmsg => "you must specify at least one of the following: 'lat' and 'lng', 'id', 'name'" },
#    "The following optional parameters control how the data is returned:",
#    { allow => 'display' },
);

sub validate {
    my ($self, $params) = @_; # p $foo;
    
    my $result = check_params('dataset_query', {}, $params);

    my %h = (
        errors  => $result->errors   || 0, # empty if validation passed
        success => $result->passed   || 0, # empty if validation failed
        failed  => ! $result->passed || 1, # empty if validation failed
    ); # p %h;
    return \%h;
}

1;