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.