X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FRole.pm;h=3c7aff1288849bf3acc3c3a23a150de6b21d906a;hb=274b6ccef8d4b5faa062ca38d7207617fc1cd51f;hp=927945a4fcae7dfd138e09379f793ca21ca5c16f;hpb=0fc8adbcddaae0c610e5c1bc1beb067a9c265f69;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Role.pm b/lib/Mouse/Meta/Role.pm index 927945a..3c7aff1 100644 --- a/lib/Mouse/Meta/Role.pm +++ b/lib/Mouse/Meta/Role.pm @@ -27,15 +27,33 @@ sub new { my $class = shift; my %args = @_; + $args{attributes} ||= {}; + bless \%args, $class; } sub name { $_[0]->{name} } -sub has_attribute { } - sub add_attribute { - $_[0]->{attributes}->{$_[1]} = $_[2]; + my $self = shift; + my $name = shift; + $self->{attributes}->{$name} = [ @_ ]; +} + +sub has_attribute { exists $_[0]->{attributes}->{$_[1]} } +sub get_attribute_list { keys %{ $_[0]->{attributes} } } +sub get_attribute { @{ $_->[0]->{attributes}->{$_[1]} || [] } } + +sub apply { + my $self = shift; + my $class = shift; + my $pkg = $class->name; + + for my $name ($self->get_attribute_list) { + my @spec = $self->get_attribute($name); + Mouse::Meta::Attribute->create($pkg, $name, @spec); + } + } 1;