File tree 2 files changed +42
-14
lines changed
lib/CompUnit/PrecompilationRepository
2 files changed +42
-14
lines changed Original file line number Diff line number Diff line change 1
1
use v6 .* ;
2
2
use nqp ;
3
+ constant default-cache-dir = " .doc-cache" ;
3
4
4
5
class CompUnit::PrecompilationRepository::Document is CompUnit::PrecompilationRepository::Default {
5
6
7
+ my $ precomp-store ;
6
8
has Str $ . doc-name ;
9
+ has IO ::Path $ . doc-path ;
7
10
has Str $ ! key ;
11
+ has $ ! precompiled-pod ;
12
+ has $ ! handle ;
8
13
9
- submethod TWEAK {
10
- $ ! key = key-for($ ! doc-name )
14
+ # | Initializes the class variable that contains the precomp store
15
+ sub init ( $ prefix = default-cache-dir ) is export {
16
+ $ precomp-store =
17
+ CompUnit::PrecompilationStore::File. new (
18
+ prefix => $ prefix . IO
19
+ );
11
20
}
12
21
13
- method key () { $ ! key }
22
+ method new ( $ doc-path ) {
23
+ init() unless $ precomp-store ;
24
+ my $ this-path = IO ::Path. new ( $ doc-path );
25
+ fail (" Path $ this-path not found" ) if ! $ this-path . e ;
26
+ my $ doc-name = $ this-path . basename ;
27
+ self . bless (
28
+ doc-path => $ this-path ,
29
+ doc-name => $ doc-name ,
30
+ store => $ precomp-store
31
+ );
32
+ }
33
+
34
+ submethod TWEAK () {
35
+ $ ! key = key-for( $ ! doc-name );
36
+ self . precompile($ ! doc-path , $ ! key , : force );
37
+ $ ! handle = self . load($ ! key )[0 ];
38
+ $ ! precompiled-pod = nqp ::atkey($ ! handle . unit,' $=pod' )[0 ];
39
+ }
40
+
41
+ method key () {
42
+ $ ! key
43
+ }
44
+
45
+ method precompiled-pod () { $ ! precompiled-pod }
14
46
15
47
# ! Provides a key for the document with that particular name
16
48
sub key-for ( Str $ doc-name --> Str ) is export {
17
- nqp ::sha1($ doc-name );
49
+ return nqp ::sha1($ doc-name );
18
50
}
19
51
20
52
}
Original file line number Diff line number Diff line change @@ -6,20 +6,16 @@ use File::Directory::Tree;
6
6
use nqp ;
7
7
8
8
constant cache-name = " cache" ;
9
- my $ precomp-store = CompUnit::PrecompilationStore::File. new (prefix =>
10
- cache-name. IO );
9
+ init( cache-name );
11
10
12
11
for <simple sub/simple > -> $ doc-name {
13
- my $ precomp = CompUnit::PrecompilationRepository::Document . new (
14
- store => $ precomp-store ,
15
- doc-name => $ doc-name );
12
+ my $ precomp =
13
+ CompUnit::PrecompilationRepository::Document . new (
14
+ " t/doctest/ $ doc-name.pod6 " );
16
15
ok ( $ precomp . key , " Key precomputed" );
17
16
like ( $ precomp . key , /<[ 0..9 A..F ] >+ /, " Hexa key is correct" );
18
- $ precomp . precompile(" t/doctest/$ doc-name .pod6" . IO ,
19
- $ precomp . key , : force );
20
- my $ handle = $ precomp . load($ precomp . key )[0 ];
21
- my $ precompiled-pod = nqp ::atkey($ handle . unit,' $=pod' )[0 ];
22
- is-deeply $ precompiled-pod , $ = pod [0 ], " Load precompiled pod $ doc-name" ;
17
+ is-deeply $ precomp . precompiled-pod, $ = pod [0 ], " Load precompiled pod
18
+ $ doc-name" ;
23
19
}
24
20
25
21
rmtree(cache-name);
You can’t perform that action at this time.
0 commit comments