/[Frey]/trunk/lib/Frey/Class/Create.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

Annotation of /trunk/lib/Frey/Class/Create.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1092 - (hide annotations)
Sun Jun 28 16:34:16 2009 UTC (14 years, 10 months ago) by dpavlin
File size: 2239 byte(s)
test and re-implement old default behavior of t/30-Class.t
1 dpavlin 778 package Frey::Class::Create;
2 dpavlin 679 use Moose;
3    
4     extends 'Frey';
5     with 'Frey::Web';
6     with 'Frey::Path';
7     #with 'Frey::Storage';
8    
9     use File::Slurp;
10    
11     has class => (
12     documentation => 'Name of class to create',
13     is => 'rw',
14     isa => 'Str',
15     required => 1,
16 dpavlin 1089 default => 'App::Skeleton',
17 dpavlin 679 );
18    
19     has svk_add => (
20     documentation => 'Add created files to SVK',
21     is => 'rw',
22     isa => 'Bool',
23     required => 1,
24 dpavlin 711 default => 1,
25 dpavlin 679 );
26    
27 dpavlin 680 sub create_class_source_as_markup {
28 dpavlin 679 my ($self) = @_;
29    
30     my $class = $self->class;
31    
32     my $class_path = $class;
33     $class_path =~ s{::}{/}g;
34 dpavlin 705 $class_path = "lib/$class_path.pm";
35 dpavlin 679
36 dpavlin 1089 my $test_path;
37 dpavlin 679
38 dpavlin 1089 my @c = split(m{::}, $class);
39     foreach ( -1 .. $#c ) {
40     my $to = $#c - $_;
41     my $path = 't/' . join('/', @c[ 0 .. $to ] );
42     if ( -e $path ) {
43     my $file = join('-', @c[ $to + 1 .. $#c ] );
44     $test_path = $path . '/' . $file . '.t';
45     last;
46     }
47     }
48    
49 dpavlin 1092 if ( ! $test_path ) {
50     $test_path = $class;
51     $test_path =~ s{::}{-}g;
52     $test_path = "t/30-$test_path.t";
53     }
54 dpavlin 1089
55 dpavlin 682 die qq|class "$class" exists as |, $self->path_size($class_path) if -e $class_path;
56     die qq|class "$class" test exists as |, $self->path_size($test_path) if -e $test_path;
57 dpavlin 679
58     warn "## path $class_path";
59     $self->mkbasepath( $class_path );
60    
61     my $skeleton = 'Frey::Skeleton';
62    
63     my $code = read_file( 'lib/Frey/Skeleton.pm' );
64     $code =~ s{$skeleton}{$class}g;
65     write_file( $class_path, $code );
66 dpavlin 682 warn "# created class $class at ", $self->path_size($class_path);
67 dpavlin 679 system "svk add $class_path" if $self->svk_add;
68    
69     $code = read_file( 't/30-frey-skeleton.t' );
70     $code =~ s{$skeleton}{$class}g;
71     write_file( $test_path, $code );
72 dpavlin 680 chmod 0755, $test_path;
73 dpavlin 682 warn "# created class $class at ", $self->path_size($test_path);
74 dpavlin 679 system "svk add $test_path" if $self->svk_add;
75    
76 dpavlin 680 my $html
77 dpavlin 682 = qq|Created class "$class" at |
78     . $self->path_size($class_path)
79     . qq| and test |
80     . $self->path_size($test_path)
81 dpavlin 680 ;
82    
83 dpavlin 703 $html = $self->html_links( $html );
84 dpavlin 680
85     return $html;
86 dpavlin 679 }
87    
88     =head1 DESCRIPTION
89    
90     Create Frey class based on L<Frey::Skeleton>.
91    
92     Blame this on my Smalltalk influence, because creating classes there is just
93     interface and message sends wrapped in GUI, but that makes Smalltalk books
94     much harder to read...
95    
96     On the other hand, having handy class creator within L<Frey> makes sense.
97    
98     =cut
99    
100     1;

  ViewVC Help
Powered by ViewVC 1.1.26