169 |
@attributes = map { |
@attributes = map { |
170 |
my $name = $_; |
my $name = $_; |
171 |
my $attr = $meta->get_attribute($name); |
my $attr = $meta->get_attribute($name); |
172 |
confess "$class attribute $name isn't blessed ",dump( $attr ) unless ref $attr; |
confess "$class attribute $name isn't blessed ",dump( $attr ) unless blessed $attr; |
173 |
warn "## attr $name ref ",ref( $attr ) if $self->debug; |
warn "## attr $name ref ",ref( $attr ) if $self->debug; |
174 |
my ( $before, $title, $after ) = ( '', '', '' ); |
my ( $before, $title, $after ) = ( '', '', '' ); |
175 |
( $before, $title, $after ) = ( '<b>', ' title="required"', '</b>' ) if $attr->is_required; |
( $before, $title, $after ) = ( '<b>', ' title="required"', '</b>' ) if $attr->can('is_required') && $attr->is_required; |
176 |
foreach my $check ( qw/has_type_constraint has_handles is_weak_ref is_required is_lazy should_coerce should_auto_deref has_default has_trigger has_documentation has_applied_traits/ ) { |
foreach my $check ( qw/has_type_constraint has_handles is_weak_ref is_required is_lazy should_coerce should_auto_deref has_default has_trigger has_documentation has_applied_traits/ ) { |
177 |
my $getter; |
my $getter; |
178 |
|
|
179 |
$getter = $check; |
$getter = $check; |
180 |
$getter =~ s/^has_//; |
$getter =~ s/^has_//; |
181 |
|
|
182 |
if ( $attr->$check ) { |
if ( $attr->can($check) && $attr->$check ) { |
183 |
if ( $getter eq $check ) { |
if ( $getter eq $check ) { |
184 |
$after .= "$check"; |
$after .= "$check"; |
185 |
} else { |
} else { |
191 |
} |
} |
192 |
$after .= ' '; |
$after .= ' '; |
193 |
} |
} |
194 |
my $type = $attr->has_type_constraint ? $attr->type_constraint->name : ''; |
my $type = $attr->can('has_type_constraint') && $attr->has_type_constraint ? $attr->type_constraint->name : ''; |
195 |
|
|
196 |
if ( $role_attribute->{$name} ) { |
if ( $role_attribute->{$name} ) { |
197 |
my ( $role_name, $nr ) = each %{ $role_attribute->{$name} }; |
my ( $role_name, $nr ) = each %{ $role_attribute->{$name} }; |