Fix a filter/single issue
[catagits/Reaction.git] / lib / Reaction / InterfaceModel / Action.pm
index e6b06da..55cdfbe 100644 (file)
@@ -23,7 +23,7 @@ class Action which {
     my %params;
     foreach my $attr ($self->parameter_attributes) {
       my $reader = $attr->get_read_method;
-      my $predicate = $attr->predicate;
+      my $predicate = $attr->get_predicate_method;
       next if defined($predicate) && !$self->$predicate;
       $params{$attr->name} = $self->$reader;
     }
@@ -33,7 +33,7 @@ class Action which {
   implements can_apply => as {
     my ($self) = @_;
     foreach my $attr ($self->parameter_attributes) {
-      my $predicate = $attr->predicate;
+      my $predicate = $attr->get_predicate_method;
       if ($self->attribute_is_required($attr)) {
         return 0 unless $self->$predicate;
       }
@@ -60,18 +60,18 @@ class Action which {
 
   implements error_for_attribute => as {
     my ($self, $attr) = @_;
+    my $reader = $attr->get_read_method;
+    my $predicate = $attr->get_predicate_method;
     if ($self->attribute_is_required($attr)) {
-      if ($attr->has_valid_values) {
-        my $reader = $attr->get_read_method;
-        unless ($attr->check_valid_value($self, $self->$reader)) {
-          return "Not a valid value for ".$attr->name;
-        }
-      }
-      my $predicate = $attr->predicate;
       unless ($self->$predicate) {
         return $attr->name." is required";
       }
     }
+    if ($self->$predicate && $attr->has_valid_values) {
+      unless ($attr->check_valid_value($self, $self->$reader)) {
+        return "Not a valid value for ".$attr->name;
+      }
+    }
     return; # ok
   };