Commit | Line | Data |
9e60f0d8 |
1 | package Test::MooseX::Compiler; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | use autodie; |
6 | |
7 | use Exporter qw( import ); |
8 | use File::Temp qw( tempdir ); |
9 | use Module::Runtime qw( module_notional_filename ); |
10 | use Path::Class qw( dir ); |
11 | |
12 | our @EXPORT_OK = qw( |
13 | save_class |
14 | ); |
15 | |
16 | my $Dir = dir( tempdir( CLEANUP => 1 ) ); |
17 | |
18 | sub save_class { |
19 | my $class = shift; |
20 | my $code = shift; |
21 | |
6029ad7b |
22 | my $full_code = <<"EOF"; |
23 | package $class; |
24 | |
25 | use strict; |
26 | use warnings; |
27 | |
28 | $code |
29 | |
30 | 1; |
31 | EOF |
32 | |
9e60f0d8 |
33 | { |
34 | local $@; |
6029ad7b |
35 | eval $full_code; |
9e60f0d8 |
36 | die $@ if $@; |
37 | } |
38 | |
39 | my $pm_file = module_notional_filename($class); |
40 | my $path = $Dir->file($pm_file); |
41 | $path->dir()->mkpath( 0, 0755 ); |
42 | |
43 | open my $fh, '>', $path; |
6029ad7b |
44 | print {$fh} $full_code; |
9e60f0d8 |
45 | close $fh; |
46 | |
47 | $INC{$pm_file} = $path; |
48 | |
49 | return $pm_file; |
50 | } |
51 | |
52 | 1; |