# @(#)$Id: Moose.pm 270 2013-04-14 18:38:18Z pjf $ package Class::Usul::Moose; use strict; use warnings; use feature (); use version; our $VERSION = qv( sprintf '0.13.%d', q$Rev: 270 $ =~ /\d+/gmx ); use namespace::autoclean (); use Class::Usul::Constraints (); use Import::Into; #use Method::Signatures::Simple (); use Moose (); #use Moose::Autobox (); use Moose::Util::TypeConstraints (); use MooseX::AttributeShortcuts (); use MooseX::Types::Moose (); use MooseX::Types::Common::String (); use MooseX::Types::Common::Numeric (); use MooseX::Types::LoadableClass (); # MooseX::Types::Parameterizable broken 0.08 RT#75119 #use MooseX::Types::Varchar (); use Scalar::Util qw(blessed); sub import { my ($self, @args) = @_; my $class = blessed $self || $self; my $opts = @args && ref $args[ 0 ] eq q(HASH) ? shift @args : {}; $opts->{also} ||= [ 'Moose', 'Moose::Util::TypeConstraints', @args ]; $opts->{into} ||= caller; return _do_import( $class, $opts ); } # Private methods sub _do_import { my ($class, $opts) = @_; my $target = $opts->{into}; my ($import, $unimport, $init_meta) = Moose::Exporter->build_import_methods ( into => $target, also => $opts->{also} || [] ); feature->import( qw(state switch) ); namespace::autoclean->import( -cleanee => $target ); $class->$import( { into => $target } ); Class::Usul::Constraints->import( { into => $target }, q(:all) ); MooseX::AttributeShortcuts->import::into( $target ); # Method::Signatures::Simple->import( into => $target ); # Moose::Autobox->import( into => $target ); MooseX::Types::Moose->import( { into => $target }, MooseX::Types::Moose->type_names ); MooseX::Types::Common::String->import( { into => $target }, MooseX::Types::Common::String->type_names ); MooseX::Types::Common::Numeric->import( { into => $target }, MooseX::Types::Common::Numeric->type_names ); MooseX::Types::LoadableClass->import( { into => $target }, qw(LoadableClass LoadableRole) ); # MooseX::Types::Varchar->import( { into => $target }, 'Varchar' ); return; } 1; __END__ =pod =head1 Name Class::Usul::Moose - Moose, the way I like it. =head1 Version 0.13.$Revision: 270 $ =head1 Synopsis use Class::Usul::Moose; =head1 Description Applies L<Moose>, L<Moose::Util::TypeConstraints>, L<namespace::autoclean>, etc to the class using it. =head1 Subroutines/Methods =head2 import Imports into the calling packages namespace the selected packages exports =head1 Configuration and Environment None =head1 Diagnostics None =head1 Dependencies =over 3 =item L<bareword::filehandles> =item L<feature> =item L<namespace::autoclean> =item L<multidimensional> =item L<strict> =item L<warnings> =item L<Class::Usul::Constraints> =item L<Import::Into> =item L<Moose> =item L<Moose::Util::TypeConstraints> =item L<MooseX::AttributeShortcuts> =item L<MooseX::Types::Moose> =item L<MooseX::Types::Common::String> =item L<MooseX::Types::Common::Numeric> =item L<MooseX::Types::LoadableClass> =back =head1 Incompatibilities There are no known incompatibilities in this module =head1 Bugs and Limitations There are no known bugs in this module. Please report problems to the address below. Patches are welcome =head1 Acknowledgements Larry Wall - For the Perl programming language t0m - Pasted his version of this, so I nicked it and adapted =head1 Author Peter Flanigan, C<< <Support at RoxSoft.co.uk> >> =head1 License and Copyright Copyright (c) 2013 Peter Flanigan. All rights reserved This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<perlartistic> This program is distributed in the hope that it will be useful, but WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE =cut # Local Variables: # mode: perl # tab-width: 3 # End: