Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Attribute does not pass Type Constraint

by tobyink (Abbot)
on Apr 03, 2014 at 17:59 UTC ( #1080986=note: print w/replies, xml ) Need Help??

in reply to Attribute does not pass Type Constraint

It would be useful if you could provide a small, self-contained script exhibiting the problem.

The "type of argument to keys on reference" error message comes from doing keys($blessed_object). I can't see anywhere in MooseX::UndefTolerant that does this. (Or indeed anywhere where it uses keys() at all!)

Are you sure that it's the created_date attribute which is causing the issue? Might it be something else?

use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

Replies are listed 'Best First'.
Re^2: Attribute does not pass Type Constraint
by PerlSufi (Friar) on Apr 03, 2014 at 18:44 UTC
    Thanks for the response tobyink.
    I'm starting to see now that maybe the addition of MooseX::UndefTolerant might have helped- not sure yet. I am getting this error from my test file, but the line it is complaining about is in the following subroutine:
    my $class = shift; my (%args) = validated_hash( \@_, id => { isa => 'Int' }, ticket_user => { isa => 'Customer::TicketUser' }, ); my $ticket_response = $class->_ticket_api_request( { method => 'get', route => 'user/' . $args{ticket_user}->user_id . '/ticket/' . $args{id}, data => undef, } ); my $ticket = $class->new( { id => $args{id}, department_name => $ticket_response->{ticket}{department +}, subject => $ticket_response->{ticket}{subject}, status_id => $ticket_response->{ticket}{status}, created_time => $ticket_response->{ticket}{created_ti +me}, ticket_user => $args{ticket_user}, } ); my $posts_response = $class->_ticket_api_request( { method => 'get', route => 'user/' . $args{ticket_user}->user_id . '/ticket/' . $args{id} . '/posts', data => undef, } ); my @posts; for my $post_id ( keys $posts_response ) { # HERE my $post = GBClient::Model::Support::Ticket::Post->from_json +( { ticket => $ticket, json => $posts_response->{$post_id} } ); push @posts, $post; }
      I think I may have figured it out. I made the following changes:
      class_type 'DateTime'; subtype 'DT' => as 'Maybe[DateTime]'; coerce 'DT', from 'Str', via { DateTime::Format::DateParse->parse_datetime($_) }; coerce 'DT', from 'Int', via { DateTime->from_epoch( epoch => $_ ) }; ... has created_time => ( is => 'rw', isa => 'DT', required => 0, coerce => 1, ); # and then in the subroutine I posted earlier: ... for my $post_id ( keys %$post_response ) { # changed to unblessed ...
      But I'm now getting an error about something else in the module. So I will follow up as necessary :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1080986]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2017-11-19 10:43 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (279 votes). Check out past polls.