annotate cpt_psm_plotter/lib/CPT/ParameterCollection.pm @ 0:54c7a3ea81e2 draft

Uploaded
author cpt
date Tue, 05 Jul 2022 05:40:36 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
1 package CPT::ParameterCollection;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
2 use Carp;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
3 use Moose;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
4 use strict;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
5 use warnings;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
6 use autodie;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
7 use Data::Dumper;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
8
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
9 # A collection of parameters
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
10
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
11 has 'params' => ( is => 'rw', isa => 'ArrayRef', default => sub{[]});
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
12
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
13
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
14 sub validate {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
15 my ( $self, $getopt_obj) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
16 my $issue_count = 0;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
17 for my $item ( @{ $self->params() } ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
18 my $type = ref($item);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
19 # We now check that getopt has supplied a value (we don't want to validate values that were NOT supplied. That'd be dumb)
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
20 # If it's defined AND it doesn't validate, then we add an error on the stack for that.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
21 if(defined $item->name() && defined $getopt_obj->{$item->name()} && !$item->validate()){
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
22 carp join("\n", @{$item->errors()});
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
23 $issue_count++;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
24 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
25 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
26 return $issue_count == 0;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
27 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
28
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
29
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
30
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
31 sub push_group {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
32 my ( $self, $group ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
33 $self->push_params($group->flattenOptionsArray());
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
34 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
35
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
36
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
37 sub push_param {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
38 my ( $self, $param ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
39 $self->_push($self->_coerce_param($_));
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
40 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
41
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
42
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
43 sub push_params {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
44 my ( $self, $array_ref ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
45 foreach(@{$array_ref}){
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
46 my $result = $self->_coerce_param($_);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
47 if($result){
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
48 $self->_push($result);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
49 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
50 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
51 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
52
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
53 sub _push{
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
54 my ( $self, $array_ref ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
55 my @arr;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
56 if($self->params()){
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
57 @arr = @{$self->params()};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
58 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
59 push(@arr, $array_ref);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
60 $self->params(\@arr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
61 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
62
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
63
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
64 sub parse_short_name {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
65 my ( $self, $parameter ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
66 if ( index( $parameter, '|' ) > -1 ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
67 return substr( $parameter, index( $parameter, '|' ) + 1 );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
68 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
69 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
70 return "";
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
71 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
72 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
73
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
74
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
75 sub parse_long_name {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
76 my ( $self, $parameter ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
77 if ( index( $parameter, '|' ) > -1 ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
78 return substr( $parameter, 0, index( $parameter, '|' ) );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
79 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
80 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
81 return $parameter;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
82 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
83 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
84
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
85
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
86 sub _coerce0 {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
87 my ($self) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
88 require CPT::Parameter::Empty;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
89 my $p = CPT::Parameter::Empty->new();
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
90 return $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
91 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
92 sub _coerce1 {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
93 my ($self, @parts) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
94 require CPT::Parameter::Label;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
95 my $p = CPT::Parameter::Label->new(label=> $parts[0]);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
96 return $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
97 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
98 sub _coerce2 {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
99 my ($self, @parts) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
100 require CPT::Parameter::Flag;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
101 my $p = CPT::Parameter::Flag->new(
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
102 name => $self->parse_long_name( $parts[0] ),
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
103 short => $self->parse_short_name( $parts[0] ),
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
104 multiple => 0,
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
105 description => $parts[1],
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
106 );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
107 return $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
108 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
109 sub _coerce3 {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
110 my ($self, @parts) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
111 # Three parameter case
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
112 my %attr = (
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
113 name => $self->parse_long_name( $parts[0] ),
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
114 short => $self->parse_short_name( $parts[0] ),
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
115 multiple => 0,
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
116 description => $parts[1],
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
117 );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
118
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
119 # create the attr
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
120 my %set_attr = %{ $parts[2] };
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
121
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
122 # Check if various things are set, if so, copy them.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
123 foreach (qw(default options required hidden implies multiple _show_in_galaxy _galaxy_specific data_format default_format file_format)) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
124 if ( defined $set_attr{$_} ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
125 $attr{$_} = $set_attr{$_};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
126 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
127 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
128
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
129 # Now, if validate is set, we can choose a type and possibly do other coersion.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
130 if ( $set_attr{'validate'} ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
131 my $validate = $set_attr{'validate'};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
132 my $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
133 if ( $validate eq 'Flag' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
134 require CPT::Parameter::Flag;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
135 $p = CPT::Parameter::Flag->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
136 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
137 elsif ( $validate eq 'Float' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
138 foreach (qw(min max)) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
139 if ( $set_attr{$_} ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
140 $attr{$_} = $set_attr{$_};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
141 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
142 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
143 require CPT::Parameter::Float;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
144 $p = CPT::Parameter::Float->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
145 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
146 elsif ( $validate eq 'Int' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
147 foreach (qw(min max)) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
148 if ( $set_attr{$_} ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
149 $attr{$_} = $set_attr{$_};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
150 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
151 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
152 require CPT::Parameter::Int;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
153 $p = CPT::Parameter::Int->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
154 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
155 elsif ( $validate eq 'Option' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
156 foreach (qw(options)) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
157 if ( $set_attr{$_} ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
158 $attr{$_} = $set_attr{$_};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
159 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
160 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
161 require CPT::Parameter::Option::Generic;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
162 $p = CPT::Parameter::Option::Generic->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
163 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
164 elsif ( $validate eq 'String' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
165 require CPT::Parameter::String;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
166 $p = CPT::Parameter::String->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
167 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
168 elsif ( $validate eq 'File/Input' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
169 require CPT::Parameter::File::Input;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
170 $p = CPT::Parameter::File::Input->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
171 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
172 elsif ( $validate eq 'File/Output' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
173 require CPT::Parameter::File::Output;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
174 $p = CPT::Parameter::File::Output->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
175 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
176 elsif ( $validate eq 'File/OutputFormat' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
177 require CPT::Parameter::File::OutputFormat;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
178 $p = CPT::Parameter::File::OutputFormat->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
179 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
180 elsif ( $validate eq 'Genomic/Tag' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
181 require CPT::Parameter::Option::Genomic_Tag;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
182 $p = CPT::Parameter::Option::Genomic_Tag->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
183 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
184 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
185 die 'Unknown validation type: ' . $validate;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
186 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
187 return $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
188 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
189 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
190 require CPT::Parameter::Flag;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
191 my $p = CPT::Parameter::Flag->new(%attr);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
192 return $p;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
193 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
194 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
195
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
196 sub _coerce_param {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
197 my ( $self, $param ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
198 if ( ref($param) eq 'ARRAY' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
199 my @parts = @{$param};
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
200 if ( scalar @parts == 0 ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
201 return $self->_coerce0(@parts);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
202 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
203 elsif ( scalar @parts == 1 ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
204 return $self->_coerce1(@parts);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
205 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
206 elsif ( scalar @parts == 2 ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
207 return $self->_coerce2(@parts);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
208 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
209 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
210 return $self->_coerce3(@parts);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
211 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
212 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
213 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
214 die 'A non-array type was attempted to be coerced...';
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
215 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
216 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
217
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
218
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
219 sub get_by_name {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
220 my ( $self, $name ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
221 for my $item ( @{ $self->params() } ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
222 if ( defined $item->name() && $item->name() eq $name ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
223 return $item;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
224 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
225 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
226 return;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
227 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
228
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
229
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
230 sub getopt {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
231 my ($self) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
232 my @clean_opt_spec;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
233
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
234 # Loop through each item
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
235 for my $item ( @{ $self->params() } ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
236 my $type = ref($item);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
237
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
238 # If it's an array, that means it's definitely an old style
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
239 if ( $type eq 'ARRAY' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
240
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
241 # And we can push it through without any issues
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
242 push( @clean_opt_spec, $item );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
243 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
244
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
245 # If it's a hash, it's probably one of the { one_of/xor/etc }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
246 elsif ( $type eq 'CPT::ParameterGroup' ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
247
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
248 # D:
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
249 push( @clean_opt_spec, $item->flattenOptionsArray() );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
250 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
251
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
252 # Otherwise it's one of our CPT::Parameter stuff
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
253 else {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
254
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
255 # Otherwise, we'll use the method to transform our complex object into a GetOpt compatible item
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
256 push( @clean_opt_spec, $item->getOptionsArray() );
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
257 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
258 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
259 return @clean_opt_spec;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
260 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
261
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
262
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
263 sub populate_from_getopt {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
264 my ( $self, $opt ) = @_;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
265 # Loop through each item
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
266 for my $item ( @{ $self->params() } ) {
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
267 # If it's has a name, and options supplies a value for that name
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
268 if ( defined($item->name()) && defined ($opt->{$item->name()})){
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
269 $item->value($opt->{ $item->name() });
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
270 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
271 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
272 }
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
273
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
274 no Moose;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
275 1;
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
276
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
277 __END__
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
278
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
279 =pod
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
280
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
281 =encoding UTF-8
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
282
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
283 =head1 NAME
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
284
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
285 CPT::ParameterCollection
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
286
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
287 =head1 VERSION
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
288
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
289 version 1.99.4
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
290
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
291 =head2 validate
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
292
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
293 $pC->validate();
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
294
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
295 calls the validate method, which loops through and checks that user values line
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
296 up with the validate method in each and every slot.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
297
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
298 =head2 push_group
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
299
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
300 $pC->push_group(CPT::Parameter::Flag->new( <snip> ));
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
301
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
302 Push a new groupeter onto the array
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
303
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
304 =head2 push_param
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
305
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
306 $pC->push_param(CPT::Parameter::Flag->new( <snip> ));
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
307
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
308 Push a new parameter onto the array
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
309
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
310 =head2 push_params
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
311
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
312 $pC->push_param([
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
313 <snip some params>
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
314 ]);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
315
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
316 Pushes a lot of params at once onto the array
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
317
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
318 =head2 parse_short_name
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
319
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
320 $pc->parse_short_name("file|f");
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
321 # would return "f"
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
322
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
323 =head2 parse_long_name
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
324
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
325 $pc->parse_long_name("file|f");
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
326 # would return "file"
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
327
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
328 =head2 _coerce_param
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
329
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
330 $pc->_coerce_param(["file|f","input file",{validate=>'File/Input'}]);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
331
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
332 would return a CPT::Parameter::File::Input object.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
333
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
334 =head2 get_by_name
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
335
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
336 $pC->get_by_name('format');
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
337
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
338 returns the CPT::Parameter object with that key.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
339
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
340 =head2 getopt
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
341
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
342 my @getopt_compatible_array = $pC->getopt()
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
343
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
344 Returns a getopt compatible array by looping through the array and simply returning array objects, and calling the getOptionsArray method on CPT::Parameter::* objects
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
345
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
346 =head2 populate_from_getopt
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
347
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
348 $parameterCollection->populate_from_getopt($opt);
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
349
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
350 Populate the ->value() from getopt.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
351
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
352 =head1 AUTHOR
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
353
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
354 Eric Rasche <rasche.eric@yandex.ru>
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
355
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
356 =head1 COPYRIGHT AND LICENSE
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
357
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
358 This software is Copyright (c) 2014 by Eric Rasche.
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
359
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
360 This is free software, licensed under:
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
361
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
362 The GNU General Public License, Version 3, June 2007
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
363
54c7a3ea81e2 Uploaded
cpt
parents:
diff changeset
364 =cut