clearer => 'clear_value',
);
has needs_sync => (is => 'rw', isa => 'Int', default => 0);
-#predicates are autmagically generated for lazy and non-required attrs
+
has message => (is => 'rw', isa => 'Str', clearer => 'clear_message');
after clear_value => sub {
$self->clear_message if $self->has_message;
$self->needs_sync(1);
};
+
sub adopt_value {
my ($self) = @_;
$self->clear_message if $self->has_message;
$self->needs_sync(1); # if $self->has_attribute;
-};
+}
+
+
sub can_sync_to_action {
my $self = shift;
+
+ # if field is already sync'ed, it can be sync'ed again
+ # this will make sync_to_action no-op if needs_sync is 0
return 1 unless $self->needs_sync;
my $attr = $self->attribute;
}
}
} else {
- return if $attr->is_required;
+ return if $self->model->attribute_is_required($attr);
}
return 1;
};
+
+
sub sync_to_action {
my ($self) = @_;
+
+ # don't sync if we're already synced
+ return unless $self->needs_sync;
+
+ # if we got here, needs_sync is 1
+ # can_sync_to_action will do coercion checks, etc.
return unless $self->can_sync_to_action;
my $attr = $self->attribute;