Skip to content

Instantly share code, notes, and snippets.

@melo
Created April 26, 2012 09:27
Show Gist options
  • Save melo/2498061 to your computer and use it in GitHub Desktop.
Save melo/2498061 to your computer and use it in GitHub Desktop.
My Perl class builder
package E6::Setup::Class;
use :5.14;
use warnings;
use utf8;
use Moose ();
use MooseX::HasDefaults::RO ();
use MooseX::StrictConstructor ();
use MooseX::AttributeShortcuts ();
use Try::Tiny ();
use Method::Signatures;
use Moose::Exporter;
use namespace::autoclean (); # no cleanup, just load
Moose::Exporter->setup_import_methods(
also => ['Moose', 'MooseX::AttributeShortcuts', 'MooseX::StrictConstructor'],
trait_aliases => [['MooseX::UndefTolerant::Attribute' => 'UndefTolerant']],
);
sub init_meta {
my $class = shift;
my %params = @_;
my $for_class = $params{for_class};
warnings->import;
strict->import;
utf8->import;
feature->import(':5.14');
Try::Tiny->export_to_level(2);
Moose->init_meta(@_);
## See https://rt.cpan.org/Public/Bug/Display.html?id=76793 why we
## should not use init_meta anymore
MooseX::HasDefaults::RO->import({ into => $for_class });
# FIXME: https://github.com/schwern/method-signatures/issues/41
# Method::Signatures->import({ into => $for_class });
namespace::autoclean->import(-cleanee => $for_class);
}
1;
package E6::Setup::Class;
use :5.14;
use warnings;
use utf8;
use Moose ();
use MooseX::HasDefaults::RO ();
use MooseX::StrictConstructor ();
use MooseX::AttributeShortcuts ();
use Try::Tiny ();
use Method::Signatures;
use Moose::Exporter;
use namespace::autoclean (); # no cleanup, just load
Moose::Exporter->setup_import_methods(
also => ['Moose', 'MooseX::AttributeShortcuts', 'MooseX::StrictConstructor'],
trait_aliases => [['MooseX::UndefTolerant::Attribute' => 'UndefTolerant']],
);
sub init_meta {
my $class = shift;
my %params = @_;
my $for_class = $params{for_class};
warnings->import;
strict->import;
utf8->import;
feature->import(':5.14');
Try::Tiny->export_to_level(2);
Moose->init_meta(@_);
MooseX::HasDefaults::RO->init_meta(@_);
# FIXME: https://github.com/schwern/method-signatures/issues/41
# Method::Signatures->import({ into => $for_class });
namespace::autoclean->import(-cleanee => $for_class);
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment