Initial Commit
This commit is contained in:
94
database/perl/vendor/lib/MooseX/ClassAttribute/Trait/Application/ToClass.pm
vendored
Normal file
94
database/perl/vendor/lib/MooseX/ClassAttribute/Trait/Application/ToClass.pm
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
package MooseX::ClassAttribute::Trait::Application::ToClass;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our $VERSION = '0.29';
|
||||
|
||||
use namespace::autoclean;
|
||||
use Moose::Role;
|
||||
|
||||
with 'MooseX::ClassAttribute::Trait::Application';
|
||||
|
||||
around apply => sub {
|
||||
my $orig = shift;
|
||||
my $self = shift;
|
||||
my $role = shift;
|
||||
my $class = shift;
|
||||
|
||||
$class = Moose::Util::MetaRole::apply_metaroles(
|
||||
for => $class,
|
||||
class_metaroles => {
|
||||
class => ['MooseX::ClassAttribute::Trait::Class'],
|
||||
},
|
||||
);
|
||||
|
||||
$self->$orig( $role, $class );
|
||||
};
|
||||
|
||||
sub _apply_class_attributes {
|
||||
my $self = shift;
|
||||
my $role = shift;
|
||||
my $class = shift;
|
||||
|
||||
my $attr_metaclass = $class->attribute_metaclass();
|
||||
|
||||
foreach my $attribute_name ( $role->get_class_attribute_list() ) {
|
||||
if ( $class->has_class_attribute($attribute_name)
|
||||
&& $class->get_class_attribute($attribute_name)
|
||||
!= $role->get_class_attribute($attribute_name) ) {
|
||||
next;
|
||||
}
|
||||
else {
|
||||
$class->add_class_attribute(
|
||||
$role->get_class_attribute($attribute_name)
|
||||
->attribute_for_class($attr_metaclass) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# ABSTRACT: A trait that supports applying class attributes to classes
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MooseX::ClassAttribute::Trait::Application::ToClass - A trait that supports applying class attributes to classes
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 0.29
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This trait is used to allow the application of roles containing class
|
||||
attributes to classes.
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
See L<MooseX::ClassAttribute> for details.
|
||||
|
||||
Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-ClassAttribute>
|
||||
(or L<bug-moosex-classattribute@rt.cpan.org|mailto:bug-moosex-classattribute@rt.cpan.org>).
|
||||
|
||||
I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Dave Rolsky <autarch@urth.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENCE
|
||||
|
||||
This software is Copyright (c) 2016 by Dave Rolsky.
|
||||
|
||||
This is free software, licensed under:
|
||||
|
||||
The Artistic License 2.0 (GPL Compatible)
|
||||
|
||||
=cut
|
||||
104
database/perl/vendor/lib/MooseX/ClassAttribute/Trait/Application/ToRole.pm
vendored
Normal file
104
database/perl/vendor/lib/MooseX/ClassAttribute/Trait/Application/ToRole.pm
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
package MooseX::ClassAttribute::Trait::Application::ToRole;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our $VERSION = '0.29';
|
||||
|
||||
use Moose::Util::MetaRole;
|
||||
use MooseX::ClassAttribute::Trait::Application::ToClass;
|
||||
|
||||
use namespace::autoclean;
|
||||
use Moose::Role;
|
||||
|
||||
with 'MooseX::ClassAttribute::Trait::Application';
|
||||
|
||||
around apply => sub {
|
||||
my $orig = shift;
|
||||
my $self = shift;
|
||||
my $role1 = shift;
|
||||
my $role2 = shift;
|
||||
|
||||
$role2 = Moose::Util::MetaRole::apply_metaroles(
|
||||
for => $role2,
|
||||
role_metaroles => {
|
||||
role => ['MooseX::ClassAttribute::Trait::Role'],
|
||||
application_to_class =>
|
||||
['MooseX::ClassAttribute::Trait::Application::ToClass'],
|
||||
application_to_role =>
|
||||
['MooseX::ClassAttribute::Trait::Application::ToRole'],
|
||||
},
|
||||
);
|
||||
|
||||
$self->$orig( $role1, $role2 );
|
||||
};
|
||||
|
||||
sub _apply_class_attributes {
|
||||
my $self = shift;
|
||||
my $role1 = shift;
|
||||
my $role2 = shift;
|
||||
|
||||
foreach my $attribute_name ( $role1->get_class_attribute_list() ) {
|
||||
if ( $role2->has_class_attribute($attribute_name)
|
||||
&& $role2->get_class_attribute($attribute_name)
|
||||
!= $role1->get_class_attribute($attribute_name) ) {
|
||||
|
||||
require Moose;
|
||||
Moose->throw_error( "Role '"
|
||||
. $role1->name()
|
||||
. "' has encountered a class attribute conflict "
|
||||
. "during composition. This is fatal error and cannot be disambiguated."
|
||||
);
|
||||
}
|
||||
else {
|
||||
$role2->add_class_attribute(
|
||||
$role1->get_class_attribute($attribute_name)->clone() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# ABSTRACT: A trait that supports applying class attributes to roles
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MooseX::ClassAttribute::Trait::Application::ToRole - A trait that supports applying class attributes to roles
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 0.29
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This trait is used to allow the application of roles containing class
|
||||
attributes to roles.
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
See L<MooseX::ClassAttribute> for details.
|
||||
|
||||
Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-ClassAttribute>
|
||||
(or L<bug-moosex-classattribute@rt.cpan.org|mailto:bug-moosex-classattribute@rt.cpan.org>).
|
||||
|
||||
I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Dave Rolsky <autarch@urth.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENCE
|
||||
|
||||
This software is Copyright (c) 2016 by Dave Rolsky.
|
||||
|
||||
This is free software, licensed under:
|
||||
|
||||
The Artistic License 2.0 (GPL Compatible)
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user