X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction.pm;h=1649f35f725b2acb5da6d1b28fc18556a53b414e;hb=4dcffe42e2dc781d2942bd4935cb1d3c96ce6464;hp=97b9235a4f978abacefa73fa2069725cac69acd6;hpb=91955398bb1d5dba2bca876b1e21d2ea9b93919b;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Action.pm b/lib/Catalyst/Action.pm index 97b9235..1649f35 100644 --- a/lib/Catalyst/Action.pm +++ b/lib/Catalyst/Action.pm @@ -38,7 +38,6 @@ use overload ( '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; }, # Which action takes precedence - 'cmp' => 'compare', '<=>' => 'compare', # Make general $stuff still work @@ -73,20 +72,16 @@ sub match { return scalar( @{ $c->req->args } ) == $args; } -sub sort_order { - my $self = shift; - - my ($args) = @{ $self->attributes->{Args} || [] }; - - return $args if looks_like_number($args); - - return ~0; -} - sub compare { my ($a1, $a2) = @_; - return $a1->sort_order <=> $a2->sort_order; + my ($a1_args) = @{ $a1->attributes->{Args} || [] }; + my ($a2_args) = @{ $a2->attributes->{Args} || [] }; + + $_ = looks_like_number($_) ? $_ : ~0 + for $a1_args, $a2_args; + + return $a1_args <=> $a2_args; } __PACKAGE__->meta->make_immutable; @@ -124,13 +119,12 @@ context and arguments Check Args attribute, and makes sure number of args matches the setting. Always returns true if Args is omitted. -=head2 sort_order - -Returns the value of the C attribute, or C<~0> if it has no value. - =head2 compare -Returns C<< $a->sort_order <=> $b->sort_order >> . +Compares 2 actions based on the value of the C attribute, with no C +having the highest precedence. + +C<< <=> >> is overloaded to use this method. =head2 namespace