package oose;
+
use strict;
-our $VERSION = '0.0.1';
+use warnings;
+
+use Class::Load qw(load_class);
BEGIN {
my $package;
- sub import { $package = $_[1] }
- use Filter::Simple sub { s/^/package $package;\nuse Moose;\n/; }
+ sub import {
+ $package = $_[1] || 'Class';
+ if ($package =~ /^\+/) {
+ $package =~ s/^\+//;
+ load_class($package);
+ }
+ }
+ use Filter::Simple sub { s/^/package $package;\nuse Moose;use Moose::Util::TypeConstraints;\n/; }
}
-1; # Magic true value required at end of module
-__END__
-=head1 NAME
+1;
-oose - syntactic sugar to make Moose Onliners easier
+# ABSTRACT: syntactic sugar to make Moose one-liners easier
+__END__
-=head1 VERSION
+=pod
-This document describes oose version 0.0.1
+=head1 SYNOPSIS
+ # create a Moose class on the fly ...
+ perl -Moose=Foo -e 'has bar => ( is=>q[ro], default => q[baz] ); print Foo->new->bar' # prints baz
-=head1 SYNOPSIS
+ # loads an existing class (Moose or non-Moose)
+ # and re-"opens" the package definition to make
+ # debugging/introspection easier
+ perl -Moose=+My::Class -e 'print join ", " => __PACKAGE__->meta->get_method_list'
- perl -Moose=Foo -e 'has bar => ( is=>q[ro], default => q[baz] ); print Foo->new->bar' # prints baz
+ # also loads Moose::Util::TypeConstraints to allow subtypes etc
+ perl -Moose=Person -e'subtype q[ValidAge] => as q[Int] => where { $_ > 0 && $_ < 78 }; has => age ( isa => q[ValidAge], is => q[ro]); Person->new(age => 90)'
=head1 DESCRIPTION
-oose.pm is a Source filter that simply adds C<package $name; use Moose;> to the beginning of your script
-and was entirely created because typing perl -e'package Foo; use Moose; ...' was annoying me.
+oose.pm is a simple source filter that adds
+C<package $name; use Moose; use Moose::Util::TypeConstraints;>
+to the beginning of your script and was entirely created because typing
+C<perl -e'package Foo; use Moose; ...'> was annoying me.
-=head1 INTERFACE
+=head1 INTERFACE
-oose provides exactly one method and it's automically called by perl:
-=over
+oose provides exactly one method and it's automatically called by perl:
-=item import(str)
+=over 4
-pass a package name to import to be used by the source filter
+=item B<import($package)>
-=back
-
-=head1 CONFIGURATION AND ENVIRONMENT
+Pass a package name to import to be used by the source filter. The
+package defaults to C<Class> if none is given.
-=for author to fill in:
- A full explanation of any configuration system(s) used by the
- module, including the names and locations of any configuration
- files, and the meaning of any environment variables or properties
- that can be set. These descriptions must also include details of any
- configuration language used.
-
-oose requires no configuration files or environment variables.
+=back
=head1 DEPENDENCIES
-=for author to fill in:
- A list of all the other modules that this module relies upon,
- including any restrictions on versions, and an indication whether
- the module is part of the standard Perl distribution, part of the
- module's distribution, or must be installed separately. ]
-
You will need L<Filter::Simple> and eventually L<Moose>
-
=head1 INCOMPATIBILITIES
-=for author to fill in:
- A list of any modules that this module cannot be used in conjunction
- with. This may be due to name conflicts in the interface, or
- competition for system or program resources, or due to internal
- limitations of Perl (for example, many modules that use source code
- filters are mutually incompatible).
-
None reported. But it is a source filter and might have issues there.
-=head1 BUGS AND LIMITATIONS
-
-=for author to fill in:
- A list of known problems with the module, together with some
- indication Whether they are likely to be fixed in an upcoming
- release. Also a list of restrictions on the features the module
- does provide: data types that cannot be handled, performance issues
- and the circumstances in which they may arise, practical
- limitations on the size of data sets, special cases that are not
- (yet) handled, etc.
-
-No bugs have been reported.
-
-Please report any bugs or feature requests to
-C<bug-oose@rt.cpan.org>, or through the web interface at
-L<http://rt.cpan.org>.
-
-
-=head1 AUTHOR
-
-Chris Prather C<< <perigrin@cpan.org> >>
-
-
-=head1 LICENCE AND COPYRIGHT
-
-Copyright (c) 2007, Chris Prather C<< <perigrin@cpan.org> >>. All rights reserved.
-
-This module is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself. See L<perlartistic>.
-
-
-=head1 DISCLAIMER OF WARRANTY
+=head1 BUGS
-BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
-EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
-ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
-YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
-NECESSARY SERVICING, REPAIR, OR CORRECTION.
+See L<Moose/BUGS> for details on reporting bugs.
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
-LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
-OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
-THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
+=cut