X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=script%2Frclass_back_to_moose.pl;h=d22700d572b2ed17368ccfcd7bb5579ef3577c90;hb=8d06fb1f1f13c9576bdd842262538aa50568dead;hp=68dbd5754c18fa4bdc5f3c7310a453ce100d2f00;hpb=319bf4d0176dfdb8382fdecc607160ba3df38e73;p=catagits%2FReaction.git diff --git a/script/rclass_back_to_moose.pl b/script/rclass_back_to_moose.pl index 68dbd57..d22700d 100644 --- a/script/rclass_back_to_moose.pl +++ b/script/rclass_back_to_moose.pl @@ -16,11 +16,11 @@ sub with_file (&) { $data > io($fname); } -sub with_class_block (&) { +sub with_class_or_role_block (&) { my ($code) = @_; - $_ =~ s{^class\s*(.*?)which\s*{(.*?)^};} + $_ =~ s{^(class|role)\s*(.*?)which\s*{(.*?)^};} { - local *_ = { header => $1, body => $2 }; + local *_ = { type => $1, header => $2, body => $3 }; $code->(); }sme; } @@ -29,7 +29,7 @@ sub parse_header { my $h = $_{header}; $h =~ s/^\s*\S+\s+// || die; my @base; - while ($h =~ /is\s*(\S+?),?/g) { + while ($h =~ /is\s*([^ ,]+),?/g) { push(@base, $1); } return @base; @@ -50,17 +50,18 @@ sub sq { # short for 'strip quotes' sub filtered_body { local $_ = $_{body}; s/^ //g; - s/implements *(\S+).*?{/"sub ${\sq $1} {"/ge; - s/^does/with/g; + s/^\s*implements *(\S+).*?{/"sub ${\sq $1} {"/ge; + s/^\s*does/with/g; + s/^\s*overrides/override/g; $_; } sub top { "use namespace::clean -except => [ qw(meta) ];\n" } -sub tail { "__PACKAGE__->meta->make_immutable;\n"; } +sub tail { $_{type} eq 'class' ? "__PACKAGE__->meta->make_immutable;\n" : ""; } -for ("lib/Reaction/InterfaceModel/Object.pm", "lib/Reaction/InterfaceModel/Action/DBIC/Result.pm") { +for (@ARGV) { with_file { - with_class_block { + with_class_or_role_block { return top.build_extends.filtered_body.tail; }; };