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 |
|
|
# Given a name generate a unique field ID |
18 |
|
|
sub field_name { |
19 |
|
|
my ($self, $name) = @_; |
20 |
|
|
return $self->uuid . '-' . $name; |
21 |
|
|
} |
22 |
|
|
|
23 |
dpavlin |
69 |
sub process { |
24 |
|
|
my ($self, $input) = @_; |
25 |
|
|
$self->input($input); |
26 |
|
|
$self->{cont} ||= generator { while(1) { $self->main } }; |
27 |
|
|
$self->{cont}->(); |
28 |
|
|
return $self->output; |
29 |
|
|
} |
30 |
|
|
|
31 |
|
|
sub next { |
32 |
|
|
my ($self, $output) = @_; |
33 |
|
|
$self->output($output); |
34 |
|
|
yield(); |
35 |
|
|
return $self->input; |
36 |
|
|
} |
37 |
|
|
|
38 |
|
|
1; |
39 |
|
|
|