1 package Reaction::InterfaceModel::Action;
3 use Reaction::Meta::InterfaceModel::Action::Class;
4 use metaclass 'Reaction::Meta::InterfaceModel::Action::Class';
6 use Reaction::Meta::Attribute;
9 use namespace::clean -except => [ qw(meta) ];
12 has target_model => (is => 'ro', required => 1,
13 metaclass => 'Reaction::Meta::Attribute');
15 has ctx => (isa => 'Catalyst', is => 'ro', required => 1,
16 metaclass => 'Reaction::Meta::Attribute');
17 sub parameter_attributes {
18 shift->meta->parameter_attributes;
20 sub parameter_hashref {
23 foreach my $attr ($self->parameter_attributes) {
24 my $reader = $attr->get_read_method;
25 my $predicate = $attr->get_predicate_method;
26 next if defined($predicate) && !$self->$predicate;
27 $params{$attr->name} = $self->$reader;
33 foreach my $attr ($self->parameter_attributes) {
34 my $predicate = $attr->get_predicate_method;
35 if ($self->attribute_is_required($attr)) {
36 return 0 unless $self->$predicate;
38 if ($attr->has_valid_values) {
39 unless ($predicate && !($self->$predicate)) {
40 my $reader = $attr->get_read_method;
41 return 0 unless $attr->check_valid_value($self, $self->$reader);
48 my ($self, $attr) = @_;
49 confess "No attribute passed to error_for" unless defined($attr);
51 my $meta = $self->meta->find_attribute_by_name($attr);
52 confess "Can't find attribute ${attr} on $self" unless $meta;
55 return $self->error_for_attribute($attr);
57 sub error_for_attribute {
58 my ($self, $attr) = @_;
59 my $reader = $attr->get_read_method;
60 my $predicate = $attr->get_predicate_method;
61 if ($self->attribute_is_required($attr)) {
62 unless ($self->$predicate) {
63 return $attr->name." is required";
66 if ($self->$predicate && $attr->has_valid_values) {
67 unless ($attr->check_valid_value($self, $self->$reader)) {
68 return "Not a valid value for ".$attr->name;
73 sub attribute_is_required {
74 my ($self, $attr) = @_;
75 return $attr->is_required;
80 __PACKAGE__->meta->make_immutable;
87 Reaction::InterfaceModel::Action
97 =head2 parameter_attributes
101 L<Reaction::Meta::Attribute>
105 See L<Reaction::Class> for authors.
109 See L<Reaction::Class> for the license.