1Workflow::Validator::InUEsneurmeCroantterdiTbyuptee(d3W)PoerrklflDoowc:u:mVeanltiadtaitoonr::InEnumeratedType(3)
2
3
4

NAME

6       Workflow::Validator::InEnumeratedType - Ensure a value is one of a
7       declared set of values
8

VERSION

10       This documentation describes version 1.04 of this package
11

SYNOPSIS

13        # Inline the enumeration...
14
15        <action name="PlayGame">
16          <validator name="InEnumeratedType">
17             <value>Rock</value>
18             <value>Scissors</value>
19             <value>Paper</value>
20             <arg value="$play"/>
21          </validator>
22        </action>
23
24        # Or declare it in the validator to be more readable...
25        <validator name="RSP"
26                   class="Validator::InEnumeratedType">
27             <value>Rock</value>
28             <value>Scissors</value>
29             <value>Paper</value>
30        </validator>
31
32        # ...and use it in your action
33        <action name="PlayGame">
34           <validator name="RSP">
35              <arg value="$play"/>
36           </validator>
37        </action>
38

DESCRIPTION

40       This validator ensures that a value matches one of a set of values. You
41       declare the values in the set (or enumerated type) in either the main
42       validator declaration or in the declaration inside the action, then
43       pass a single argument of the value in the context you would like to
44       check.
45
46       Declaring the members of the enumerated type in the validator
47       configuration makes for more readable (and brief) action
48       configurations, as well as making the types more reusable, but it is
49       really up to you.
50

SUBCLASSING

52   Strategy
53       Unlike some other validator classes this one is setup to be
54       subclassable. It is usable as-is, of course, but many times you will
55       find that you have need of more interesting types in your enumeration
56       than simple strings. So this class provides the hooks for you to simply
57       create your own.
58
59       For instance, in a trouble ticket system you may have the idea that
60       tickets can only be assigned to particular users. Maybe they are in a
61       'worker' role, maybe they are some administrators, whatever. By
62       creating a class to have these users as an enumerated type, combined
63       with declaring the required Action fields, you make for a pretty
64       powerful piece of reflection.
65
66       Onto the code. First we declare a field type of 'worker':
67
68        <field type="worker"
69               class="MyApp::Field::Worker"/>
70
71       Next a validator of this enumerated type:
72
73        <validator name="IsWorker"
74                   class="MyApp::Validator::WorkerEnumeration"/>
75
76       We then associate this field type with a field in the action and the
77       validator to ensure the user selects a worker from the right pool:
78
79        <action name="AssignTicket">
80           <field name="assignee"
81                  type="worker"
82                  is_required="yes"/>
83          ...
84          <validator name="IsWorker">
85              <arg value="$assignee"/>
86          </validator>
87
88       Note that the name of the field and the name used in the validator are
89       the same. This allows external applications to query the action for its
90       fields, get 'assignee' as the name and get a list of User objects (or
91       something similar) as the types from which to choose a value, and
92       checks that same field to ensure a correct choice was submitted.
93
94       The implementation for the validator might look like:
95
96        package MyApp::Validator::WorkerEnumeration;
97
98        sub validate {
99            my ( $self, $wf, $worker_id ) = @_;
100            my $ticket = $context->param( 'ticket' );
101            unless ( $ticket ) {
102                my $ticket_id = $context->param( 'ticket_id' );
103                $ticket = Ticket->fetch( $ticket_id );
104            }
105            my $workers = $ticket->fetch_available_workers();
106            my @worker_id = map { $_->id } @{ $workers };
107            $self->add_enumerated_values( @worker_id );
108            $self->SUPER::validate( $wf, $worker_id );
109        }
110
111   METHODS
112       _init( \%params )
113
114       This method initializes the class and the enumerated class.
115
116       It uses "add_enumerated_values" to add the set of values for
117       enumeration.
118
119       The primary parameter is value, which should be used to specify the
120       either a single value or a reference to array of values to be added.
121
122       validator
123
124       The validator method is the public API. It encapulates
125       "is_enumerated:value" and works with Workflow.
126
127       add_enumerated_values( @values )
128
129       This method ads an array of values to be regarded as enumerations for
130       the validator.
131
132       get_enumerated_values()
133
134       This method returns the defined enumerated values for the class as an
135       array.
136
137       is_enumerated_value( $value )
138
139       This is most often the single method you will want to modify.
140
141       The method offers assertion of a given value, as to whether it is an
142       enumerated type as defined in the class.
143

EXCEPTIONS

145       ·   Validator 'InEnumeratedType' must be initialized with the values
146           you wish to validate against using the parameter 'value'.
147
148           This Workflow::Exception is thrown from "_init" if the 'value'
149           parameter is not set.
150
151       ·   Value '$value' must be one of: <@values>
152
153           This Workflow::Exception is thrown from "_validator" if the value
154           to be asserted is not mathing any of the enumerated values defined
155           as part of the set.
156
158       Copyright (c) 2003-2007 Chris Winters. All rights reserved.
159
160       This library is free software; you can redistribute it and/or modify it
161       under the same terms as Perl itself.
162

AUTHORS

164       Current maintainer Jonas B. Nielsen <jonasbn@cpan.org>
165
166       Original author Chris Winters <chris@cwinters.com>
167
168
169
170perl v5.30.1                      2020-W0o1r-k3f0low::Validator::InEnumeratedType(3)
Impressum