X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FViewPort%2FField.pm;h=ff890750f2972959e74fa9197dfd7536763df2a3;hb=7ccc8c7269babcb98aaf696200251959b3022c4d;hp=a4bb219a900b95c522808deee9e43fc18d7a6035;hpb=8139388160b0a38002b22ff95c3fee3d8380f156;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/ViewPort/Field.pm b/lib/Reaction/UI/ViewPort/Field.pm index a4bb219..ff89075 100644 --- a/lib/Reaction/UI/ViewPort/Field.pm +++ b/lib/Reaction/UI/ViewPort/Field.pm @@ -7,8 +7,6 @@ use aliased 'Reaction::Meta::InterfaceModel::Object::ParameterAttribute'; use namespace::clean -except => [ qw(meta) ]; extends 'Reaction::UI::ViewPort'; - - has value => (is => 'rw', lazy_build => 1); has name => (is => 'rw', isa => 'Str', lazy_build => 1); has label => (is => 'rw', isa => 'Str', lazy_build => 1); @@ -16,28 +14,37 @@ has value_string => (is => 'rw', isa => 'Str', lazy_build => 1); has model => (is => 'ro', isa => Object, required => 1); has attribute => (is => 'ro', isa => ParameterAttribute, required => 1); + sub _build_name { shift->attribute->name }; + sub _build_label { join(' ', map { ucfirst } split('_', shift->name)); -}; +} + sub _build_value { my ($self) = @_; my $reader = $self->attribute->get_read_method; return $self->model->$reader; -}; +} + sub _model_has_value { my ($self) = @_; my $predicate = $self->attribute->get_predicate_method; if (!$predicate || $self->model->$predicate - #|| ($self->attribute->is_lazy + # || ($self->attribute->is_lazy # && !$self->attribute->is_lazy_fail) ) { + # edenc -- uncommented the lazy checks above + # model->$predicate returns false if the value isn't set + # but has a lazy builder + # either model attribute has a value now or can build it return 1; } return 0; -}; +} + sub _build_value_string { my ($self) = @_; # XXX need the defined test because the IM lazy builds from @@ -47,14 +54,18 @@ sub _build_value_string { return ($self->_model_has_value && defined($self->_build_value) ? $self->_value_string_from_value : $self->_empty_string_value); -}; +} + sub _value_string_from_value { shift->value; -}; -sub _empty_string_value { '' }; +} + +sub _empty_string_value { '' } + sub value_is_required { - shift->attribute->is_required; -}; + my $self = shift; + $self->model->attribute_is_required($self->attribute); +} __PACKAGE__->meta->make_immutable;