Thread MooseX::Types - Problem mit Subtype und Where-Test
(8 answers)
Opened by roooot at 2010-09-22 22:18
Hallo Leute
ich versuche mir mithilfe von MooseX::Types eigene Subtypes für Moose zu bauen. Sieht eigentlich ganz einfach aus, allerdings schlägt bei mir IMMER der Typentest fehl. So sieht meine Klasse mit den Subtypen aus: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package PIMYGC::Types::Library; use MooseX::Types -declare => [ qw( GoogleUrlId ) ]; use MooseX::Types::Moose qw/HashRef Str/; subtype GoogleUrlId, as HashRef[Str], where { $_ =~ m/\/([0-9a-z]+)$/xms }; coerce GoogleUrlId, from Str, via { my ($id) = $_ =~ m/\/([0-9a-z]+)$/xms; { full => $_, id => $id, } }; Das ganze soll nun aus einem Googlelink der Form Code: (dl
)
http://www.google.com/m8/feeds/contacts/email%40gmail.com/full/6578ac42881547eb Eine GoogleUrlId sieht wie folgt aus: Ein Hash mit den Schlüsseln Full, welche den kompletten Link oben entählt und ein Schlüssel ID, welcher nur die ID am Schluss enthält. Dem Konstruktur wird allerdings nur der komplette Link als String übergeben. Mithilfe von coerce geschieht die Umwandlung und mithilfe des Subtypes wird dieser auf Gültigkeit geprüft. Allerdings schlägt obiges für: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 package PIMYGC::Foo; use Moose; #... use PIMYGC::Types::Library qw /GoogleUrlId/; has 'gcid' => ( is => 'rw', isa => GoogleUrlId, required => 1 ); Code (perl): (dl
)
1 2 new PIMYGC::Foo( gcid => 'http://www.google.com/m8/feeds/contacts/email%40gmail.com/full/6578ac42881547eb' immer mit folgender Fehlermeldung fehl: Code: (dl
)
1 Attribute (gcid) does not pass the type constraint because: Validation failed for 'PIMYGC::Types::Library::GoogleUrlId' with value http://www.google.com/m8/feeds/contacts/email%40gmail.com/full/6578ac42881547eb at /var/www/foobar.de/cgi-bin/experiments/googlecontacts/lib/Controller/Test.pm line 47 Kann mir vielleicht jemand auf die Sprünge helfen? Der Regex im where stimmt und würde auch das richtige extrahieren. Danke für Hilfe. Viele Grüße :)
|