rclass stuff ripped out of everything but widget classes
[catagits/Reaction.git] / lib / Reaction / InterfaceModel / Action / DBIC / Result / Update.pm
1 package Reaction::InterfaceModel::Action::DBIC::Result::Update;
2
3 use aliased 'Reaction::InterfaceModel::Action::DBIC::Result';
4 use Reaction::Types::DBIC 'Row';
5 use Reaction::Class;
6
7 use namespace::clean -except => [ qw(meta) ];
8 extends Result;
9
10 with 'Reaction::InterfaceModel::Action::DBIC::Role::CheckUniques';
11 sub BUILD {
12   my ($self) = @_;
13   my $tm = $self->target_model;
14   foreach my $attr ($self->parameter_attributes) {
15     my $writer = $attr->get_write_method;
16     my $name = $attr->name;
17     my $tm_attr = $tm->meta->find_attribute_by_name($name);
18     next unless ref $tm_attr;
19     my $tm_reader = $tm_attr->get_read_method;
20     $self->$writer($tm->$tm_reader) if defined($tm->$tm_reader);
21   }
22 };
23 sub do_apply {
24   my $self = shift;
25   my $args = $self->parameter_hashref;
26   my $model = $self->target_model;
27   foreach my $name (keys %$args) {
28     my $tm_attr = $model->meta->find_attribute_by_name($name);
29     next unless ref $tm_attr;
30     my $tm_writer = $tm_attr->get_write_method;
31     $model->$tm_writer($args->{$name});
32   }
33   $model->update;
34   return $model;
35 };
36
37 __PACKAGE__->meta->make_immutable;
38
39
40 1;
41
42 =head1 NAME
43
44 Reaction::InterfaceModel::Action::DBIC::Result::Update
45
46 =head1 DESCRIPTION
47
48 =head2 target_model
49
50 =head2 error_for_attribute
51
52 =head2 sync_all
53
54 =head2 BUILD
55
56 =head1 AUTHORS
57
58 See L<Reaction::Class> for authors.
59
60 =head1 LICENSE
61
62 See L<Reaction::Class> for the license.
63
64 =cut