File Coverage

blib/lib/Form/Factory/Interface/HTML/Widget/Select.pm
Criterion Covered Total %
statement 7 8 87.5
branch n/a
condition n/a
subroutine 2 3 66.6
pod 0 2 0.0
total 9 13 69.2


line stmt bran cond sub pod time code
1             package Form::Factory::Interface::HTML::Widget::Select;
2             $Form::Factory::Interface::HTML::Widget::Select::VERSION = '0.022';
3 1     1   4 use Moose;
  1         1  
  1         5  
4              
5             extends qw( Form::Factory::Interface::HTML::Widget::Element );
6              
7             # ABSTRACT: HTML interface widget helper
8              
9              
10             has '+tag_name' => (
11             default => 'select',
12             );
13              
14             has name => (
15             is => 'ro',
16             isa => 'Str',
17             required => 1,
18             );
19              
20             has size => (
21             is => 'ro',
22             isa => 'Int',
23             predicate => 'has_size',
24             );
25              
26             has multiple => (
27             is => 'ro',
28             isa => 'Bool',
29             );
30              
31             has disabled => (
32             is => 'ro',
33             isa => 'Bool',
34             );
35              
36             has tabindex => (
37             is => 'ro',
38             isa => 'Int',
39             predicate => 'has_tabindex',
40             );
41              
42             has available_choices => (
43             is => 'ro',
44             isa => 'ArrayRef[Form::Factory::Control::Choice]',
45             required => 1,
46             default => sub { [] },
47             );
48              
49             has selected_choices => (
50             is => 'ro',
51             isa => 'ArrayRef',
52             required => 1,
53             default => sub { [] },
54             );
55              
56 0     0 0 0 sub has_content { 1 }
57              
58             override more_attributes => sub {
59             my $self = shift;
60              
61             my %attributes = (
62             name => $self->name,
63             );
64              
65             $attributes{size} = $self->size if $self->has_size;
66             $attributes{multiple} = 'multiple' if $self->multiple;
67             $attributes{disabled} = 'disabled' if $self->disabled;
68             $attributes{tabindex} = $self->tabindex if $self->has_tabindex;
69              
70             return \%attributes;
71             };
72              
73             override render_content => sub {
74             my $self = shift;
75              
76             my %selected = map { $_ => 1 } @{ $self->selected_choices };
77              
78             my $content = '';
79             for my $option (@{ $self->available_choices }) {
80             $content .= '<option';
81             $content .= ' value="' . $option->value . '"';
82             $content .= ' selected="selected"' if $selected{ $option->value };
83             $content .= '>' . $option->label . '</option>';
84             }
85              
86             return super() . $content;
87             };
88              
89             sub consume_control {
90 2     2 0 4 my ($self, %options) = @_;
91 2         5 my $params = $options{params};
92 2         62 my $name = $self->name;
93              
94 2         17 return { $name => $params->{ $name } };
95             }
96              
97              
98             __PACKAGE__->meta->make_immutable;
99              
100             __END__
101              
102             =pod
103              
104             =encoding UTF-8
105              
106             =head1 NAME
107              
108             Form::Factory::Interface::HTML::Widget::Select - HTML interface widget helper
109              
110             =head1 VERSION
111              
112             version 0.022
113              
114             =head1 DESCRIPTION
115              
116             Move along. Nothing to see here.
117              
118             =for Pod::Coverage .*
119              
120             =head1 AUTHOR
121              
122             Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
123              
124             =head1 COPYRIGHT AND LICENSE
125              
126             This software is copyright (c) 2015 by Qubling Software LLC.
127              
128             This is free software; you can redistribute it and/or modify it under
129             the same terms as the Perl 5 programming language system itself.
130              
131             =cut