X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FEnum.pm;h=3ef723416af6c78ed68f446f06ade9319f893a69;hb=topic%2Fdocument-instance-role-application;hp=2a7a5ad7eae4e18c881b8155afdf1486bd035ac2;hpb=9c44971f087c3b69a46685ba068b2f1f42120935;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Enum.pm b/lib/Moose/Meta/TypeConstraint/Enum.pm index 2a7a5ad..3ef7234 100644 --- a/lib/Moose/Meta/TypeConstraint/Enum.pm +++ b/lib/Moose/Meta/TypeConstraint/Enum.pm @@ -11,6 +11,12 @@ use base 'Moose::Meta::TypeConstraint'; __PACKAGE__->meta->add_attribute('values' => ( accessor => 'values', + Class::MOP::_definition_context(), +)); + +__PACKAGE__->meta->add_attribute('_inline_var_name' => ( + accessor => '_inline_var_name', + Class::MOP::_definition_context(), )); my $inliner = sub { @@ -19,18 +25,20 @@ my $inliner = sub { return 'defined(' . $val . ') ' . '&& !ref(' . $val . ') ' - . '&& $enums{' . $val . '}'; + . '&& $' . $self->_inline_var_name . '{' . $val . '}'; }; +my $var_suffix = 0; + sub new { my ( $class, %args ) = @_; $args{parent} = Moose::Util::TypeConstraints::find_type_constraint('Str'); $args{inlined} = $inliner; - if ( scalar @{ $args{values} } < 2 ) { + if ( scalar @{ $args{values} } < 1 ) { require Moose; - Moose->throw_error("You must have at least two values to enumerate through"); + Moose->throw_error("You must have at least one value to enumerate through"); } for (@{ $args{values} }) { @@ -46,9 +54,12 @@ sub new { my %values = map { $_ => 1 } @{ $args{values} }; $args{constraint} = sub { $values{ $_[0] } }; - $args{inline_environment} = { '%enums' => \%values }; - my $self = $class->_new(\%args); + my $var_name = 'enums' . $var_suffix++;; + $args{_inline_var_name} = $var_name; + $args{inline_environment} = { '%' . $var_name => \%values }; + + my $self = $class->SUPER::new(\%args); $self->compile_type_constraint() unless $self->_has_compiled_type_constraint;