Role's don't do augment. I'll look further into this though
On 1/29/07, Jonas Alves <[EMAIL PROTECTED]> wrote:
On 28/01/07, Guillermo Roditi <[EMAIL PROTECTED]> wrote:
> FIXED IT!!!
>
> take out the does '...' line and replace it with this:
>
> override parameter_hashref => sub{
> my $self = shift;
> my $args = super();
> $args->{password} = delete $args->{new_password};
> delete $args->{confirm_new_password};
> return $args;
> };
>
>
> here's my class:
>
> package Prefab::Model::Action::CreateUser;
>
> use strict;
> use warnings;
>
> use Reaction::Class;
> use aliased
'Reaction::InterfaceModel::Action::DBIC::ActionReflector';
>
> extends qw(
>
Reaction::InterfaceModel::Action::User::SetPassword
>
Reaction::InterfaceModel::Action::DBIC::ResultSet::Create
> );
>
> my $r = ActionReflector->new;
> $r->reflect_attrs('Prefab::Schema::User' =>
__PACKAGE__,
> qw/id username created_d role_list/);
>
> override parameter_hashref => sub{
> my $self = shift;
> my $args = super();
> $args->{password} = delete $args->{new_password};
> delete $args->{confirm_new_password};
> return $args;
> };
>
> 1;
>
>
>
> If you want to reflect fields like i did then add this method to
> action reflector:
>
> implements reflect_attrs => as {
> my ($self, $from_class, $to_class, @attrs) = @_;
> foreach my $attr_name (@attrs) {
> $self->reflect_attribute_to($from_class,
>
$from_class->meta->get_attribute($attr_name),
> $to_class);
> }
> };
Cool, I like that reflect_attrs method, I'm already using it.
I have tried your aproach before. You can't delete the 'new_password' and
'confirm_new_password' or the confirm_password is not checked against
'new_password'.
You have to live with the warnings in the error log.
But it doesn't work for me either. The problem is that
Reaction::InterfaceModel::Action::User::SetPassword and
Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques
both override 'error_for_attribute' and 'can_apply'. So if you have unique
constraints in your schema they don't get evaluated if your class extends
from User::SetPassword before ResultSet::Create
or if you reverse the order then your confirm password is not checked. I
tried to change the methods from override to augment and the super() call to
an inner() call but i got following error:
Moose::Role cannot support 'augment' at
/usr/local/share/perl/5.8.7/Moose/Role.pm line 138
So i don't know how to fix this.
--
Jonas
_______________________________________________
List: [email protected]
Listinfo:
http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/