Iron Moose
Well looks like clean up day again on the old Moose-Pen. Well I hate to say it but 90% of today's post is on types again as my cleanup found a little problem with my 33_conditions.t test case. I know it was running fine yesterday but that changed when I discovered that I had commented out a good hunk of my tests before I though I was finished.
So looking back I did say I no longer needed the from hash-ref on my coerce of ArrayRefofConditions it seems I did not notice that I had commented out the test for a single hash coercion so I added that back in and my test failed. So I had to add in the 'from 'HashRef', via' for my various collection attributes.
Now I also forgot that that I will want users to be able to enter an Array Ref of values on my various dynamic attributes so looking at conditions I would like to do this;
$in_hash = {
conditions=>[{left =>{name =>'last_name2',
view =>'People'},
right =>{value=>'test'},
operator =>'=',
open_parenthes =>1,
close_parenthes=>0,
condition =>'AND',
},
{condition =>'AND',
left =>{name=>'first_name3',
view=>'People'},
right =>{value=>'test'},
operator =>'=',
open_parenthes =>0,
close_parenthes=>1}],};
ok($da->add_condition($in_hash->{conditions}),"can add an array Ref of Dynamic conditions");
Test::Database::Accessor::Utils::deep_predicate($in_hash->{conditions},$da->dynamic_conditions,
$dad->conditions,'Array Ref Dynamic condition');
What I had to do was use a little recursion in my sub as the '_$' for this coercion comes out as
$_=[[{condition 1},{condition 1},]];
so a quick change to my '_predicate_array_or_object' sub
if ( ref($object) eq $class ) {
push( @{$objects}, $object );
}
++ elsif ( ref($object) eq "ARRAY" ) {
++ push( @{$objects},@{_predicate_array_or_object(
++ $class, $object )});
++ }
and all my tests pass even the new ones.
I also had to add the same sort of test to my other dynamic_attributes and on 35_links.t I ran into the same problems so I have to fix up the 'sub _link_array_or_object' function in the same way as the one above. I also had to fix up the 'sub _right_left_coerce' in the same way as well but without the recursion for my 31_elements.t test case.
To get the 35_links.t to work I also had to clean up the 'Test::Database::Accessor::Utils::deep_links' a little to take into account that I have both static and dynamic links.
Now I re-ran most of my tests and the majority passed so I then though it was time I cleaned some little things, I did a perl tidy on most of the files to make them look pretty. Next I then reorganized all the elements of my Types.pm file so they where all together by class_type, sub_type, coerce and then my custom sub.
Well after all this playing about and I re-ran my test an got all 177 of my collection attributes tests passing.
Leave a comment