do not include .git directory
[catagits/Reaction.git] / lib / Reaction / InterfaceModel / Action / DBIC / Result / Update.pm
index 34ac7f2..b5068cc 100644 (file)
@@ -1,60 +1,73 @@
 package Reaction::InterfaceModel::Action::DBIC::Result::Update;
 
-use Reaction::InterfaceModel::Action;
-use Reaction::Types::DBIC 'Row';
 use Reaction::Class;
-
-class Update is 'Reaction::InterfaceModel::Action', which {
-
-  does 'Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques';
-
-  has '+target_model' => (isa => 'Row');
-
-  implements BUILD => as {
-    my ($self) = @_;
-    my $tm = $self->target_model;
-    foreach my $attr ($self->parameter_attributes) {
-      my $writer = $attr->get_write_method;
-      my $name = $attr->name;
-      my $tm_attr = $tm->meta->find_attribute_by_name($name);
-      next unless ref $tm_attr;
-      my $tm_reader = $tm_attr->get_read_method;
-      $self->$writer($tm->$tm_reader);
-    }
-  };
-
-  implements do_apply => as {
-    my $self = shift;
-    my $args = $self->parameter_hashref;
-    my $model = $self->target_model;
-    foreach my $name (keys %$args) {
-      my $tm_attr = $model->meta->find_attribute_by_name($name);
-      next unless ref $tm_attr;
-      my $tm_writer = $tm_attr->get_write_method;
-      $model->$tm_writer($args->{$name});
-    }
-    $model->update;
-    return $model;
-  };
-
-};
+use namespace::clean -except => [ qw(meta) ];
+
+extends 'Reaction::InterfaceModel::Action::DBIC::Result';
+with 'Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques';
+
+sub BUILD {
+  my ($self) = @_;
+  my $tm = $self->target_model;
+  foreach my $attr ($self->parameter_attributes) {
+    my $writer = $attr->get_write_method;
+    my $name = $attr->name;
+    my $tm_attr = $tm->meta->find_attribute_by_name($name);
+    next unless ref $tm_attr;
+    my $tm_reader = $tm_attr->get_read_method;
+    $self->$writer($tm->$tm_reader) if defined($tm->$tm_reader);
+  }
+}
+
+sub do_apply {
+  my $self = shift;
+  my $args = $self->parameter_hashref;
+  my $model = $self->target_model;
+  foreach my $name (keys %$args) {
+    my $tm_attr = $model->meta->find_attribute_by_name($name);
+    next unless ref $tm_attr;
+    my $tm_writer = $tm_attr->get_write_method;
+    $model->$tm_writer($args->{$name});
+  }
+  $model->update;
+  return $model;
+}
+
+__PACKAGE__->meta->make_immutable;
 
 1;
 
+__END__;
+
 =head1 NAME
 
 Reaction::InterfaceModel::Action::DBIC::Result::Update
 
 =head1 DESCRIPTION
 
-=head2 target_model
+Update the target model and sync the Action's parameter attributes to
+the target model.
 
-=head2 error_for_attribute
-
-=head2 sync_all
+C<Update> is a subclass of
+L<Action::DBIC::Result|Reaction::InterfaceModel::Action::DBIC::Result> that cponsumes
+L<Role::CheckUniques|'Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques>
 
 =head2 BUILD
 
+Sync the values from the target model's parameter attributes to the action's
+parameter attributes
+
+=head2 do_apply
+
+Sync the target model's parameter attributes to the values returned by
+C<parameter_hashref>, call C<update> and return the C<target_model>.
+
+=head1 SEE ALSO
+
+L<Create|Reaction::InterfaceModel::Action::DBIC::ResultSet::Create>,
+L<DeleteAll|Reaction::InterfaceModel::Action::DBIC::ResultSet::DeleteAll>,
+L<Delete|Reaction::InterfaceModel::Action::DBIC::Result::Delete>,
+
 =head1 AUTHORS
 
 See L<Reaction::Class> for authors.