/[Frey]/trunk/lib/Frey/PPI.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/Frey/PPI.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 455 - (show annotations)
Wed Nov 19 15:28:23 2008 UTC (15 years, 5 months ago) by dpavlin
File size: 1727 byte(s)
rename invocable events with prefix as_ with fallback in Frey::Web

This started with brute-force rename using:

  perl -p -i -n -e 's/sub markup/sub as_markup/'  `grep -lr 'sub markup' lib t`
  perl -p -i -n -e 's/sub data/sub as_data/'      `grep -lr 'sub data' lib t`
  perl -p -i -n -e 's/sub sponge/sub as_sponge/'  `grep -lr 'sub sponge' lib t`

  perl -p -i -n -e 's/->markup/->as_markup/'      `grep -lr -- '->markup' lib t`
  perl -p -i -n -e 's/->data/->as_data/'          `grep -lr -- '->data' lib t`
  perl -p -i -n -e 's/->sponge/->as_sponge/'      `grep -lr -- '->sponge' lib t`

  perl -p -i -n -e 's!/markup!/as_markup!'        `grep -lr -- '/markup' lib t etc`
  perl -p -i -n -e 's!/data!/as_data!'            `grep -lr -- '/data' lib t etc`
  perl -p -i -n -e 's!/sponge!/as_sponge!'        `grep -lr -- '/sponge' lib t etc`

1 package Frey::PPI;
2 use Moose;
3
4 extends 'Frey::ClassLoader';
5
6 use PPI;
7 use Data::Dump qw/dump/;
8
9 has 'class' => (
10 is => 'rw',
11 isa => 'Str',
12 required => 1,
13 documentation => 'Name of class to parse',
14 );
15
16 has 'doc' => (
17 is => 'ro',
18 isa => 'PPI::Document',
19 lazy => 1,
20 default => sub {
21 my ( $self ) = @_;
22 warn "# doc from ", $self->class if $self->debug;
23 my $doc = PPI::Document->new( $self->class_path( $self->class ) );
24 $doc->prune('PPI::Token::Whitespace');
25 return $doc;
26 },
27 );
28
29 sub find {
30 my ( $self, $coderef ) = @_;
31
32 my $doc = $self->doc;
33 $doc->find(sub {
34 my ( $doc,$el ) = @_;
35 eval { $coderef->( $doc, $el ) };
36 warn "ERROR: $@" if $@;
37 });
38 }
39
40 sub attribute_order {
41 my ( $self ) = @_;
42
43 my @attribute_order;
44 $self->find(sub {
45 my ($doc,$el) = @_;
46 return unless ( $el->isa('PPI::Statement') && $el->{children}->[0]->isa('PPI::Token::Word') && $el->{children}->[0]->literal eq 'has' );
47
48 warn "## has ",$el->{children}->[1]->literal if $self->debug;
49 push @attribute_order, $el->{children}->[1]->literal;
50 });
51
52 warn "# ", $self->class, " attribute_order ", dump( @attribute_order ) if $self->debug;
53
54 return @attribute_order if wantarray;
55 return \@attribute_order;
56 }
57
58 sub includes {
59 my $self = shift;
60
61 my $include;
62 $self->find(sub {
63 my ($doc,$el) = @_;
64 return unless $el->isa('PPI::Statement::Include');
65
66 warn "## include ",dump( $el->module, $el->type, $el->pragma ) if $self->debug;
67 push @{ $include->{ $el->type } }, $el->module
68 });
69 warn "# ", $self->class, " include ", dump( $include ) if $self->debug;
70 return $include;
71 }
72
73 sub as_data {
74 my $self = shift;
75 return {
76 includes => $self->includes,
77 attribute_order => $self->attribute_order,
78 doc => $self->doc,
79 };
80 }
81
82 1;

  ViewVC Help
Powered by ViewVC 1.1.26