fixed ChooseOne value_string
[catagits/Reaction.git] / lib / Reaction / UI / ViewPort / Field / Mutable / ChooseOne.pm
CommitLineData
ddccc6a2 1package Reaction::UI::ViewPort::Field::Mutable::ChooseOne;
2
3use Reaction::Class;
9757d0cf 4use Scalar::Util ();
ddccc6a2 5
81393881 6use namespace::clean -except => [ qw(meta) ];
7extends 'Reaction::UI::ViewPort::Field';
8
9with 'Reaction::UI::ViewPort::Field::Role::Mutable::Simple';
10with 'Reaction::UI::ViewPort::Field::Role::Choices';
11sub adopt_value_string {
12 my ($self) = @_;
13 my $value = $self->value_string;
486ed16f 14 if(!defined($value) or !length $value) {
15 $self->clear_value;
16 return;
17 }
81393881 18 $value = $self->str_to_ident($value) if (!ref $value);
19 my $attribute = $self->attribute;
20 my $checked = $attribute->check_valid_value($self->model, $value);
21 unless (defined $checked) {
22 require Data::Dumper;
23 my $serialised = Data::Dumper->new([ $value ])->Indent(0)->Dump;
24 $serialised =~ s/^\$VAR1 = //; $serialised =~ s/;$//;
25 confess "${serialised} is not a valid value for ${\$attribute->name} on "
26 ."${\$attribute->associated_class->name}";
27 }
28 $self->value($checked);
29};
ddccc6a2 30
81393881 31around _value_string_from_value => sub {
32 my $orig = shift;
33 my $self = shift;
34 my $value = $self->$orig(@_);
6729a1a0 35
36# what's up with $value->{value} ?!
37# and why are we calling obj_to_name here, shouldn't it be obj_to_str
38# return $self->obj_to_name($value->{value}) if Scalar::Util::blessed($value);
39# return $self->obj_to_name($value) if blessed $value;
40
41 return $self->obj_to_str($value) if Scalar::Util::blessed($value);
42
81393881 43 return "$value"; # force stringify. might work. probably won't.
44};
45sub is_current_value {
46 my ($self, $check_value) = @_;
47 return unless $self->_model_has_value;
48 my $our_value = $self->value;
49 return unless defined($our_value);
50 $check_value = $self->obj_to_str($check_value) if ref($check_value);
51 return $self->obj_to_str($our_value) eq $check_value;
52};
cc44a337 53
81393881 54__PACKAGE__->meta->make_immutable;
ddccc6a2 55
ddccc6a2 56
571;