Module::Setupでflavourの選択をできるようにしてみた
Module::Setupでflavourの選択をできるようにしてみました。
module-setup Foo::Barとすると、flavour指定がないときにどのテンプレートからモジュールを選択するかが選択できます。どんなflavourがあったか思い出せないってときに便利です。
--- lib/Module/Setup.pm.orig 2008-10-03 01:33:46.000000000 +0900 +++ lib/Module/Setup.pm 2008-10-03 01:35:12.000000000 +0900 @@ -56,7 +56,7 @@ $options = $self->setup_options; } - $options->{flavor} ||= 'default'; + $options->{flavor} ||= $self->select_flavour; $options->{flavor_class} ||= 'Default'; no warnings 'redefine'; @@ -73,6 +73,7 @@ # create module $options->{module} = shift @argv; $options->{flavor} = shift @argv if @argv; + $options->{flavor} ||= $self->select_flavour; if ($options->{pack}) { #pack flavor template @@ -454,6 +455,35 @@ END } +sub select_flavour { + my $self = shift; + my $flavours = $self->_collect_flavours; + $self->_show_flavours_list($flavours); + + my $selected = prompt( "Select flavour:", 1 ); + $flavours->[ $selected - 1 ] || 'default'; +} + +sub _collect_flavours { + my $self = shift; + my $flavours_dir = $self->module_setup_dir('flavors'); + my $flavours = []; + for my $flavour ( $flavours_dir->children ) { + if ( $flavour->is_dir ) { + my $flavour_name = pop @{ $flavour->{dirs} }; + push @$flavours, $flavour_name; + } + } + $flavours; +} + +sub _show_flavours_list { + my ( $self, $flavours ) = @_; + for ( 1 .. @$flavours ) { + my $flavour = $flavours->[ $_ - 1 ]; + print sprintf "[%d]: %s", $_, $flavour . "\n"; + } +} 1; __END__
# flavoursディレクトリが存在しない場合の対応をいれてからcommitしましたー!