Mercurial > repos > cpt > cpt_psm_prep
diff lib/CPT/ParameterGroup.pm @ 1:d724f34e671d draft default tip
planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
author | cpt |
---|---|
date | Mon, 05 Jun 2023 02:50:07 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/CPT/ParameterGroup.pm Mon Jun 05 02:50:07 2023 +0000 @@ -0,0 +1,161 @@ +package CPT::ParameterGroup; +use Moose; +use strict; +use warnings; +use autodie; + +# A special type of a ParameterCollection (could probably be a child...ohwell) +use Moose::Util::TypeConstraints; +#subtype 'TypeStr', as 'Str', where { $_ eq 'xor' || $_ eq 'or' || $_ eq 'and' }; +# Replaced with the enum + +has 'name' => ( is => 'rw', isa => 'Str'); +has 'description' => ( is => 'rw', isa => 'Str'); +has 'validator' => ( is => 'rw', isa => enum([qw(xor or and)])); +has 'options' => ( is => 'rw', isa => 'ArrayRef[HashRef]' ); + + +sub validate { + die 'Unimplemented'; +} + + + +sub set_data { + my ($self, $hash_ref) = @_; + my %d = %{$hash_ref}; + $self->name($d{name}); + $self->description($d{description}); + $self->validator($d{validator}); + $self->options($d{options}); +} + + + +sub getopt { + my ($self) = @_; + die 'unimplemented'; +} + +sub flattenOptionsArray{ + my ($self) = @_; + my @opts; + push(@opts, [sprintf("Option Group: %s\n%s\n[%s]", $self->name(), $self->description(), $self->_formatted_choice_str)]); + require CPT::ParameterCollection; + my $pC = CPT::ParameterCollection->new(); + foreach(@{$self->options()}){ + my %z = %{$_}; + my $group_name = $z{group}; + my @group_opts = @{$z{options}}; + push(@opts, [sprintf("Subgroup: %s", $group_name)]); + foreach(@group_opts){ + my $p = $pC->_coerce_param($_); + push(@opts, $p->getOptionsArray()); + } + } + return \@opts; +} + +sub _formatted_choice_str{ + my ($self) = @_; + if($self->validator() eq 'xor'){ + return 'Please only use options from ONE of the groups below, and no more'; + }elsif($self->validator() eq 'or'){ + return 'Please only use options from at least ONE of the groups below'; + }elsif($self->validator() eq 'and'){ + return 'Please ensure values/defaults are specified for ALL of the options in the groups below'; + } + return undef; +} + + +sub populate_from_getopt { + my ( $self, $opt ) = @_; + die 'unimplemented'; +} + +no Moose; +1; + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +CPT::ParameterGroup + +=head1 VERSION + +version 1.99.4 + +=head2 validate + + $pC->validate(); + +calls the validate method, which loops through and checks that user values line up with the validate method in each and every slot. + +Currently unimplemented! + +=head2 getopt + + my @getopt_compatible_array = $pC->getopt() + +Returns a getopt compatible array by looping through the array and simply returning array objects, and calling the getOptionsArray method on CPT::Parameter::* objects + +=head2 populate_from_getopt + + $parameterCollection->populate_from_getopt($opt); + +Populate the ->value() from getopt. This is the special sauce of this portion of the module. +Our test case for this function is the connector choice problem. + +{ + name => 'Data Source #1', + description => "FASTA data source for our script", + type => 'xor', # must select only from one subgroup + options => [ + { + group => 'Chado Custom', + options => [ + [ 'host' => 'Hostname', { required => 1, validate => 'Str' } ], + [ 'user' => 'Username', { required => 1, validate => 'Str' } ], + [ 'pass' => 'Password', { required => 1, validate => 'Str' } ], + [ 'name' => 'Database name', { required => 1, validate => 'Str' } ], + [ 'organism' => 'organism name', { required => 1, validate => 'Str' } ], + [ 'landmark' => 'landmark name', { required => 1, validate => 'Str' } ], + ] + }, + { + group => 'Chado GMOD pre-defined connector', + options => [ + [ 'conn=s' => 'Connection Nickname', { required => 1, validate => 'Str' } ], + ] + }, + { + group => 'File', + options => [ + [ 'file|f=' => 'Input file', { required => 1, validate => 'File/Input' } ], + ] + }, + + ] + }, + +This should intelligently set parameters in $opt based on the passed data. The real question is how to handle password.... + +=head1 AUTHOR + +Eric Rasche <rasche.eric@yandex.ru> + +=head1 COPYRIGHT AND LICENSE + +This software is Copyright (c) 2014 by Eric Rasche. + +This is free software, licensed under: + + The GNU General Public License, Version 3, June 2007 + +=cut