work in progress, tests are failing, and parameterized role is not flexible enough... topic/dams_getopt_conf
Damien Krotkine [Wed, 30 Mar 2011 19:38:14 +0000 (21:38 +0200)]
ChangeLog
dist.ini
lib/MooseX/Getopt.pm
lib/MooseX/Getopt/GLD.pm
lib/MooseX/Getopt/Strict.pm
t/002_custom_option_type.t
t/004_nogetop.t
t/007_nogetopt_trait.t

index 0aa8866..e2cf98f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 Revision history for Perl extension MooseX-Getopt
 
+NEXT
+  * MooseX::Getopt
+    - change it to a MooseX::Role::Parameterized, so that it accepts
+      'getopt_conf' parameter (Damien Krotkine)
+    - make it use 'pass_through' by default
+
 0.37 Wed 30 Mar 2011
   * Fix missing dependency. (RT#67077)
 
index 6899580..069e7e9 100644 (file)
--- a/dist.ini
+++ b/dist.ini
@@ -12,6 +12,7 @@ author = Ævar Arnfjörð Bjarmason <avar@cpan.org>
 author = Chris Prather <perigrin@cpan.org>
 author = Karen Etheridge <ether@cpan.org>
 author = Jonathan Swartz <swartz@pobox.com>
+author = Damien Krotkine <dams@cpan.org>
 license = Perl_5
 copyright_holder = Infinity Interactive, Inc
 
index 038d141..f8133ed 100644 (file)
@@ -1,9 +1,21 @@
 package MooseX::Getopt;
 # ABSTRACT: A Moose role for processing command line options
 
-use Moose::Role 0.56;
+use MooseX::Role::Parameterized;
 
-with 'MooseX::Getopt::GLD';
+parameter getopt_conf => (
+    isa => 'ArrayRef[Str]',
+    default => sub { [ 'pass_through' ] },
+);
+
+role {
+
+    my $p = shift;
+    my $getopt_conf = $p->getopt_conf;
+
+    with 'MooseX::Getopt::GLD' => { getopt_conf => $getopt_conf };
+
+};
 
 no Moose::Role;
 
@@ -17,6 +29,10 @@ no Moose::Role;
 
   with 'MooseX::Getopt';
 
+  # or
+
+  with 'MooseX::Getopt' => { getopt_conf => [ 'getopt_compat', 'bundling', ... ] };
+
   has 'out' => (is => 'rw', isa => 'Str', required => 1);
   has 'in'  => (is => 'rw', isa => 'Str', required => 1);
 
@@ -76,6 +92,13 @@ Options specified in multiple places follow the following
 precendence order: commandline overrides configfile, which
 overrides explicit new_with_options parameters.
 
+=head2 Global options
+
+This role is a parameterized role. It accepts a HashRef of parameters. For now
+there is only one configuration parameter, C<getopt_conf>. This parameter is an
+ArrayRef of strings, which are L<Getopt::Long> configuraion options (see
+"Configuring Getopt::Long" in L<Getopt::Long>). See L<SYNOPSIS> for an example.
+
 =head2 Supported Type Constraints
 
 =over 4
index 17567b4..fde79a8 100644 (file)
@@ -112,9 +112,9 @@ role {
 
 =head1 OPTIONS
 
-This role is a parameterized role. It accepts one configuration parameter,
-C<getopt_conf>. This parameter is an ArrayRef of strings, which are
-L<Getopt::Long> configuraion options (see "Configuring Getopt::Long" in
-L<Getopt::Long>)
+This role is a parameterized role. It accepts a HashRef of parameters. For now
+there is only one configuration parameter, C<getopt_conf>. This parameter is an
+ArrayRef of strings, which are L<Getopt::Long> configuraion options (see
+"Configuring Getopt::Long" in L<Getopt::Long>). See L<SYNOPSIS> for an example.
 
 =cut
index 8241b14..8d9d2b7 100644 (file)
@@ -3,7 +3,7 @@ package MooseX::Getopt::Strict;
 
 use Moose::Role;
 
-with 'MooseX::Getopt';
+with 'MooseX::Getopt' => { getopt_conf => [] };
 
 around '_compute_getopt_attrs' => sub {
     my $next = shift;
@@ -23,4 +23,7 @@ This is an stricter version of C<MooseX::Getopt> which only processes the
 attributes if they explicitly set as C<Getopt> attributes. All other attributes
 are ignored by the command line handler.
 
+Also, no L<Getopt::Long> global option is activated. Especially, 'pass_through' is
+not set.
+
 =cut
index 890477d..997104d 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
 
     use Scalar::Util 'looks_like_number';
 
-    with 'MooseX::Getopt';
+    with 'MooseX::Getopt' => { getopt_conf => [] };
 
     subtype 'ArrayOfInts'
         => as 'ArrayRef'
index a69310f..4cc272f 100644 (file)
@@ -14,7 +14,7 @@ BEGIN {
     package App;
     use Moose;
 
-    with 'MooseX::Getopt';
+    with 'MooseX::Getopt' => { getopt_conf => [] };
 
     has 'data' => (
         metaclass => 'Getopt',
index 0088983..261c8fb 100644 (file)
@@ -14,7 +14,7 @@ BEGIN {
     package App;
     use Moose;
 
-    with 'MooseX::Getopt';
+    with 'MooseX::Getopt' => { getopt_conf => [] };
 
     has 'data' => (
         traits    => ['Getopt'],