Thread MooseX::Types - Problem mit Subtype und Where-Test (8 answers)
Opened by roooot at 2010-09-22 22:18

roooot
 2010-09-23 01:02
#141485 #141485
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Ich hänge mich mal an, weil ich ein weiteres Problem hierbei habe.

Ich möchte folgende Datenstruktur umwandeln:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
[
          bless( {
                   'value' => 'mail@gmail.com',
                   'primary' => 1,
                   'type' => bless( {
                                      'uri' => 'http://schemas.google.com/g/2005#other'
                                    }, 'WWW::Google::Contacts::Type::Rel' )
                 }, 'WWW::Google::Contacts::Type::Email' )
        ]

Er soll mir nun die erste primary Email heraussuchen. Folgender Map macht das zuverlässig:
Code (perl): (dl )
1
2
3
4
5
6
7
        my @primary = map {
            if ($_->{primary} == 1) {
                $_->{value}   
            }
        } @$_;
        
        return $primary[0];

Allerdings braucht man, wenn man coerce benutzen will auch immer den Zustand der Ursprungsdatenstruktur. In meinem Fall ist das eine
ArrayRef
-> Ref auf WWW::Google::Contacts::Type::Email
-> HashRef
-> Strings

Wie bringe ich das jetzt im coerce unter?
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# GooglePrimaryEmail
subtype GooglePrimaryEmail,
    as      EmailAddress,
    where   { $_ },
    message {
        'validation failed for: '. Dumper $_;
    };
   
    
coerce GooglePrimaryEmail,
    from    ArrayRef[HashRef[Str]],
    via     {
        my @primary = map {
            if ($_->{primary} == 1) {
                $_->{value}   
            }
        } @$_;
        
        return $primary[0];
    };
Es müsste irgendwie so aussehen: ArrayRef[WWW::Google::Contacts::Type::Email[HashRef[Str]]]
Das wirft aber -- oh Wunder -- einen Fehler, dass er WWW::Google::Contacts::Type::Email nicht parametisieren kann.

Wo liegt der Hund begraben?
Viele Grüße :)

View full thread MooseX::Types - Problem mit Subtype und Where-Test