1 |
dpavlin |
97 |
package Frey::Web::Field; |
2 |
dpavlin |
69 |
|
3 |
|
|
use Moose::Role; |
4 |
|
|
use Coro::Generator; |
5 |
dpavlin |
97 |
use Data::UUID; |
6 |
dpavlin |
69 |
|
7 |
|
|
has 'cont' => (is => 'rw'); |
8 |
|
|
has 'output' => (is => 'rw'); |
9 |
|
|
has 'input' => (is => 'rw'); |
10 |
|
|
|
11 |
dpavlin |
97 |
has 'uuid' => ( |
12 |
|
|
is => 'ro', |
13 |
|
|
isa => 'Str', |
14 |
|
|
default => sub { Data::UUID->new->create_str } |
15 |
|
|
); |
16 |
|
|
|
17 |
dpavlin |
146 |
=head2 field_name |
18 |
|
|
|
19 |
|
|
Given a name generate a unique field ID |
20 |
|
|
|
21 |
|
|
my $unique_id = $o->field_name( $name ); |
22 |
|
|
|
23 |
|
|
=cut |
24 |
|
|
|
25 |
dpavlin |
97 |
sub field_name { |
26 |
|
|
my ($self, $name) = @_; |
27 |
|
|
return $self->uuid . '-' . $name; |
28 |
|
|
} |
29 |
|
|
|
30 |
dpavlin |
69 |
sub process { |
31 |
|
|
my ($self, $input) = @_; |
32 |
|
|
$self->input($input); |
33 |
|
|
$self->{cont} ||= generator { while(1) { $self->main } }; |
34 |
|
|
$self->{cont}->(); |
35 |
|
|
return $self->output; |
36 |
|
|
} |
37 |
|
|
|
38 |
|
|
sub next { |
39 |
|
|
my ($self, $output) = @_; |
40 |
|
|
$self->output($output); |
41 |
|
|
yield(); |
42 |
|
|
return $self->input; |
43 |
|
|
} |
44 |
|
|
|
45 |
|
|
1; |
46 |
|
|
|