my
$form
= HTML::FormFu->new(
{
tt_args
=> {
INCLUDE_PATH
=>
'share/templates/tt/xhtml'
} } );
$form
->element(
'Checkbox'
)->name(
'bar'
)->value(
'y'
);
$form
->auto_fieldset(1);
$form
->default_model(
'HashRef'
);
$form
->populate(
{
elements
=> [
{
type
=>
"DateTime"
,
name
=>
"datetime"
,
auto_inflate
=> 1,
year
=> {
list
=> [1999] }
},
{
name
=>
"inflator"
,
deflator
=> {
type
=>
'Strftime'
,
strftime
=>
'%F %H:%M'
},
inflator
=>
{
type
=>
"DateTime"
,
parser
=> {
strptime
=>
'%F'
} }
},
{
type
=>
"Repeatable"
,
nested_name
=>
"many"
,
elements
=> [
{
name
=>
"id"
},
{
type
=>
"Block"
,
name
=>
"nested"
,
elements
=> [ {
type
=>
"Text"
,
name
=>
"foo"
} ] } ]
},
{
type
=>
"Select"
,
name
=>
"single-select"
,
options
=> [ [
qw(1 foo)
], [
qw(2 bar)
] ]
},
{
type
=>
"Select"
,
name
=>
"multi-select"
,
options
=> [ [
qw(1 foo)
], [
qw(2 bar)
] ]
},
{
type
=>
"Block"
,
nested_name
=>
"nested"
,
elements
=> [ {
type
=>
"Text"
,
name
=>
"foo"
} ]
},
{
type
=>
"Multi"
,
name
=>
"address"
,
elements
=> [ {
name
=>
"street"
}, {
name
=>
"number"
} ]
},
{
type
=>
"Multi"
,
name
=>
"address-split"
,
elements
=> [ {
name
=>
"street"
}, {
name
=>
"number"
} ],
deflators
=> [ {
type
=>
"CompoundSplit"
} ]
},
{
type
=>
"SimpleTable"
,
rows
=> [ [ {
name
=>
"table1"
} ] ] } ] } );
$form
->auto_fieldset(0);
$form
->model->default_values(
{
datetime
=>
'30-08-1999 22:00'
,
bar
=>
'y'
,
many
=> [ {
id
=> 1,
foo
=>
"bar"
}, {
id
=> 2,
foo
=>
"baz"
} ],
'single-select'
=> 1,
'inflator'
=>
'2008-09-22'
,
'multi-select'
=> [ 1, 2 ],
nested
=> {
foo
=>
"bar"
},
address
=> {
street
=>
"Lombardstreet"
,
number
=> 22 },
'address-split'
=>
"Lombardstreet 22"
,
table1
=>
"test"
} );
$form
->process;
is_deeply(
$form
->model->create,
{
bar
=>
'y'
,
many
=> [ {
id
=> 1,
foo
=>
"bar"
}, {
id
=> 2,
foo
=>
"baz"
} ],
'single-select'
=> 1,
'datetime_year'
=> 1999,
'datetime_minute'
=>
'00'
,
'datetime_month'
=> 8,
'datetime_day'
=> 30,
'datetime_hour'
=>
'22'
,
'datetime'
=>
'30-08-1999 22:00'
,
'multi-select'
=> [ 1, 2 ],
nested
=> {
foo
=>
"bar"
},
address
=> {
street
=>
"Lombardstreet"
,
number
=> 22 },
'address-split'
=> {
street
=>
"Lombardstreet"
,
number
=> 22 },
table1
=>
"test"
,
inflator
=>
'2008-09-22 00:00'
} );
$form
->model->options(1);
is_deeply(
$form
->model->create,
{
bar
=>
'y'
,
many
=> [ {
id
=> 1,
foo
=>
"bar"
}, {
id
=> 2,
foo
=>
"baz"
} ],
'single-select'
=> {
value
=> 1,
label
=>
"foo"
},
'multi-select'
=>
[ {
value
=> 1,
label
=>
"foo"
}, {
value
=> 2,
label
=>
"bar"
} ],
nested
=> {
foo
=>
"bar"
},
address
=> {
street
=>
"Lombardstreet"
,
number
=> 22 },
'address-split'
=> {
street
=>
"Lombardstreet"
,
number
=> 22 },
table1
=>
"test"
,
'datetime_day'
=> {
'value'
=> 30,
'label'
=> 30
},
'datetime'
=>
'30-08-1999 22:00'
,
'datetime_minute'
=> {
'value'
=>
'00'
,
'label'
=>
'00'
},
'datetime_month'
=> {
'value'
=> 8,
'label'
=>
'August'
},
'datetime_hour'
=> {
'value'
=>
'22'
,
'label'
=>
'22'
},
'datetime_year'
=> {
'value'
=>
'1999'
,
'label'
=>
'1999'
},
inflator
=>
'2008-09-22 00:00'
} );
$form
->model->flatten(1);
$form
->model->inflators(1);
is_deeply(
$form
->model->create,
{
'datetime_month.label'
=>
'August'
,
'multi-select_0.label'
=>
'foo'
,
'datetime_hour.value'
=>
'22'
,
'datetime_minute.value'
=>
'00'
,
'multi-select_0.value'
=>
'1'
,
'address-split.street'
=>
'Lombardstreet'
,
'datetime'
=>
'30-08-1999 22:00'
,
'table1'
=>
'test'
,
'many_2.foo'
=>
'baz'
,
'bar'
=>
'y'
,
'datetime_hour.label'
=>
'22'
,
'address-split.number'
=>
'22'
,
'many_1.foo'
=>
'bar'
,
'many_2.id'
=> 2,
'datetime_year.label'
=> 1999,
'single-select.label'
=>
'foo'
,
'address.number'
=> 22,
'address.street'
=>
'Lombardstreet'
,
'inflator'
=>
'2008-09-22 00:00'
,
'datetime_day.value'
=> 30,
'datetime_minute.label'
=>
'00'
,
'single-select.value'
=>
'1'
,
'datetime_month.value'
=> 8,
'datetime_year.value'
=> 1999,
'datetime_day.label'
=> 30,
'nested.foo'
=>
'bar'
,
'multi-select_1.label'
=>
'bar'
,
'many_1.id'
=> 1,
'multi-select_1.value'
=>
'2'
} );
$form
->model->flatten(0);
$form
->model->default_values(
{
many
=> [ {
id
=>
undef
} ],
bar
=>
'zzz'
,
} );
is_deeply(
$form
->model->create,
{
'inflator'
=>
undef
,
'single-select'
=> {
value
=>
undef
,
label
=>
undef
},
'datetime_hour'
=> {
value
=>
undef
,
label
=>
undef
},
'address-split'
=> {
'number'
=>
undef
,
'street'
=>
undef
},
'many'
=> [ {
id
=>
undef
,
foo
=>
undef
} ],
'datetime_day'
=> {
value
=>
undef
,
label
=>
undef
},
'nested'
=> {
'foo'
=>
undef
},
'datetime'
=>
undef
,
'datetime_year'
=> {
value
=>
undef
,
label
=>
undef
},
'table1'
=>
undef
,
'bar'
=>
'zzz'
,
'datetime_minute'
=> {
value
=>
undef
,
label
=>
undef
},
'address'
=> {
'number'
=>
undef
,
'street'
=>
undef
},
'multi-select'
=> {
value
=>
undef
,
label
=>
undef
},
'datetime_month'
=> {
value
=>
undef
,
label
=>
undef
} } );