aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm')
-rw-r--r--lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm b/lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm
new file mode 100644
index 0000000..a1387ef
--- /dev/null
+++ b/lib/Reaction/InterfaceModel/Action/DBIC/Result/Update.pm
@@ -0,0 +1,66 @@
+package Reaction::InterfaceModel::Action::DBIC::Result::Update;
+
+use Reaction::InterfaceModel::Action;
+use Reaction::Types::DBIC;
+use Reaction::Class;
+
+class Update is 'Reaction::InterfaceModel::Action', which {
+
+ does 'Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques';
+
+ has '+target_model' => (isa => 'DBIx::Class::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;
+ };
+
+};
+
+1;
+
+=head1 NAME
+
+Reaction::InterfaceModel::Action::DBIC::Result::Update
+
+=head1 DESCRIPTION
+
+=head2 target_model
+
+=head2 error_for_attribute
+
+=head2 sync_all
+
+=head2 BUILD
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut