line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package DDG::Publisher::File; |
2
|
|
|
|
|
|
|
# ABSTRACT: A file inside the publisher |
3
|
|
|
|
|
|
|
$DDG::Publisher::File::VERSION = '1042'; |
4
|
1
|
|
|
1
|
|
5
|
use MooX; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
7
|
|
5
|
1
|
|
|
1
|
|
1015
|
use Locale::Simple; |
|
1
|
|
|
|
|
28602
|
|
|
1
|
|
|
|
|
84
|
|
6
|
1
|
|
|
1
|
|
500
|
use File::ShareDir ':ALL'; |
|
1
|
|
|
|
|
5018
|
|
|
1
|
|
|
|
|
808
|
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
sub fullpath { |
9
|
0
|
|
|
0
|
0
|
|
my ( $self ) = @_; |
10
|
0
|
|
|
|
|
|
my $fullpath = join('/',$self->dir->web_path,$self->file); |
11
|
0
|
|
|
|
|
|
$fullpath =~ s!/+!/!g; |
12
|
0
|
|
|
|
|
|
return $fullpath; |
13
|
|
|
|
|
|
|
} |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
has dir => ( |
17
|
|
|
|
|
|
|
is => 'ro', |
18
|
|
|
|
|
|
|
required => 1, |
19
|
|
|
|
|
|
|
); |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
has static => ( |
23
|
|
|
|
|
|
|
is => 'ro', |
24
|
|
|
|
|
|
|
lazy => 1, |
25
|
|
|
|
|
|
|
default => sub { 0 }, |
26
|
|
|
|
|
|
|
); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
has file => ( |
30
|
|
|
|
|
|
|
is => 'ro', |
31
|
|
|
|
|
|
|
required => 1, |
32
|
|
|
|
|
|
|
lazy => 1, |
33
|
|
|
|
|
|
|
builder => 1, |
34
|
|
|
|
|
|
|
); |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
sub _build_file { |
37
|
0
|
|
|
0
|
|
|
my ( $self ) = @_; |
38
|
0
|
0
|
|
|
|
|
return $self->static |
39
|
|
|
|
|
|
|
? $self->filebase.'.html' |
40
|
|
|
|
|
|
|
: $self->filebase.'/'.$self->locale.'.html' |
41
|
|
|
|
|
|
|
} |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
has filebase => ( |
45
|
|
|
|
|
|
|
is => 'ro', |
46
|
|
|
|
|
|
|
required => 1, |
47
|
|
|
|
|
|
|
); |
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
has locale => ( |
51
|
|
|
|
|
|
|
is => 'ro', |
52
|
|
|
|
|
|
|
required => 1, |
53
|
|
|
|
|
|
|
); |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
has code => ( |
57
|
|
|
|
|
|
|
is => 'ro', |
58
|
|
|
|
|
|
|
required => 1, |
59
|
|
|
|
|
|
|
); |
60
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
sub url { |
62
|
0
|
|
|
0
|
0
|
|
my ( $self ) = @_; |
63
|
0
|
0
|
|
|
|
|
return $self->dir->path.$self->file if $self->static; |
64
|
0
|
0
|
|
|
|
|
return $self->dir->path if $self->filebase eq 'index'; |
65
|
0
|
|
|
|
|
|
return $self->dir->path.$self->filebase; |
66
|
|
|
|
|
|
|
} |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
has template => ( |
70
|
|
|
|
|
|
|
is => 'ro', |
71
|
|
|
|
|
|
|
lazy => 1, |
72
|
|
|
|
|
|
|
builder => 1, |
73
|
|
|
|
|
|
|
); |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
sub _build_template { |
76
|
0
|
|
|
0
|
|
|
my ( $self ) = @_; |
77
|
0
|
|
|
|
|
|
my $template = $self->dir->template_path.'/'.$self->filebase; |
78
|
0
|
|
|
|
|
|
$template =~ s!/+!/!g; |
79
|
0
|
|
|
|
|
|
$template .= '.tx'; |
80
|
0
|
|
|
|
|
|
return $template; |
81
|
|
|
|
|
|
|
} |
82
|
|
|
|
|
|
|
|
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
has content => ( |
85
|
|
|
|
|
|
|
is => 'ro', |
86
|
|
|
|
|
|
|
lazy => 1, |
87
|
|
|
|
|
|
|
builder => 1, |
88
|
|
|
|
|
|
|
); |
89
|
0
|
|
|
0
|
0
|
|
sub uncached_content { shift->_build_content } |
90
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
sub _build_content { |
92
|
0
|
|
|
0
|
|
|
my ( $self ) = @_; |
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
# |
95
|
|
|
|
|
|
|
# setting locale for the localilzation (see L<Locale::Simple>) |
96
|
|
|
|
|
|
|
# |
97
|
0
|
|
|
|
|
|
l_dir(dist_dir($self->dir->site->locale_dist)); |
98
|
0
|
|
|
|
|
|
ltd($self->dir->site->locale_domain); |
99
|
0
|
|
|
|
|
|
l_lang($self->locale); |
100
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
# |
102
|
|
|
|
|
|
|
# Activating the dryrun if requested. |
103
|
|
|
|
|
|
|
# |
104
|
0
|
0
|
|
|
|
|
l_dry($self->dir->site->publisher->dryrun) if $self->dir->site->publisher->has_dryrun; |
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
# |
107
|
|
|
|
|
|
|
# Variables for the template |
108
|
|
|
|
|
|
|
# |
109
|
|
|
|
|
|
|
# f = reference to the file itself |
110
|
|
|
|
|
|
|
# d = reference to the directory of the file |
111
|
|
|
|
|
|
|
# s = reference to the site of directory of the file |
112
|
|
|
|
|
|
|
# |
113
|
|
|
|
|
|
|
# locale_package_version = Version number of the locale package |
114
|
|
|
|
|
|
|
# locales = the hash of the locales for this token domain |
115
|
|
|
|
|
|
|
# maintemplate = name of the template (so that base.tx can use it) |
116
|
|
|
|
|
|
|
# url = the final URL for this specific page |
117
|
|
|
|
|
|
|
# |
118
|
|
|
|
|
|
|
|
119
|
0
|
|
|
|
|
|
my %vars = ( |
120
|
|
|
|
|
|
|
f => $self, |
121
|
|
|
|
|
|
|
d => $self->dir, |
122
|
|
|
|
|
|
|
s => $self->dir->site, |
123
|
|
|
|
|
|
|
locale_package_version => $self->dir->site->locale_package->version, |
124
|
|
|
|
|
|
|
locales => $self->dir->site->locale_package->locales, |
125
|
|
|
|
|
|
|
maintemplate => $self->template, |
126
|
|
|
|
|
|
|
url => $self->url, |
127
|
|
|
|
|
|
|
); |
128
|
|
|
|
|
|
|
|
129
|
0
|
|
|
|
|
|
my $site_code = $self->dir->site->can('code'); |
130
|
|
|
|
|
|
|
|
131
|
0
|
|
|
|
|
|
my $dir_code = $self->dir->can('code'); |
132
|
|
|
|
|
|
|
|
133
|
|
|
|
|
|
|
# |
134
|
|
|
|
|
|
|
# Attach ENV variables, doing at here, so that they can be overriden |
135
|
|
|
|
|
|
|
# |
136
|
0
|
|
|
|
|
|
%vars = ( %vars, 'ENV', \%ENV ); |
137
|
|
|
|
|
|
|
# |
138
|
|
|
|
|
|
|
# Execute code from L<DDG::Publisher::SiteRole/code> to get more variables |
139
|
|
|
|
|
|
|
# |
140
|
0
|
0
|
|
|
|
|
%vars = ( %vars, $site_code->($self,\%vars) ) if $site_code; |
141
|
|
|
|
|
|
|
# |
142
|
|
|
|
|
|
|
# Execute code from L<DDG::Publisher::DirRole/code> to get more variables |
143
|
|
|
|
|
|
|
# |
144
|
0
|
0
|
|
|
|
|
%vars = ( %vars, $dir_code->($self,\%vars) ) if $dir_code; |
145
|
|
|
|
|
|
|
# |
146
|
|
|
|
|
|
|
# Execute code from L<code> to get more variables |
147
|
|
|
|
|
|
|
# |
148
|
0
|
|
|
|
|
|
%vars = ( %vars, $self->code->($self,\%vars) ); |
149
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
# explicit getting out no_base for template decision later |
151
|
0
|
|
0
|
|
|
|
my $no_base = defined $vars{no_base} && $vars{no_base}; |
152
|
|
|
|
|
|
|
|
153
|
|
|
|
|
|
|
# use Data::Dumper; |
154
|
|
|
|
|
|
|
# warn Dumper($vars{'ENV'}); |
155
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
# |
157
|
|
|
|
|
|
|
# Gathering the save data for the data files generation |
158
|
|
|
|
|
|
|
# |
159
|
0
|
0
|
|
|
|
|
$self->dir->site->save_data->{locales} = $self->dir->site->locale_package->locales |
160
|
|
|
|
|
|
|
unless defined $self->dir->site->save_data->{locales}; |
161
|
0
|
0
|
|
|
|
|
$self->dir->site->save_data->{$self->dir->path} = {} |
162
|
|
|
|
|
|
|
unless defined $self->dir->site->save_data->{$self->dir->path}; |
163
|
0
|
0
|
|
|
|
|
$self->dir->site->save_data->{$self->dir->path}->{$self->filebase} = { static => $self->static } |
164
|
|
|
|
|
|
|
unless defined $self->dir->site->save_data->{$self->dir->path}->{$self->filebase}; |
165
|
0
|
|
|
|
|
|
$self->dir->site->save_data->{$self->dir->path}->{$self->filebase}->{$self->file} = { |
166
|
|
|
|
|
|
|
locale => $self->locale, |
167
|
|
|
|
|
|
|
url => $self->url, |
168
|
|
|
|
|
|
|
file => $self->file, |
169
|
|
|
|
|
|
|
dir => $self->dir->path, |
170
|
|
|
|
|
|
|
template => $self->template, |
171
|
|
|
|
|
|
|
no_base => $no_base, |
172
|
|
|
|
|
|
|
}; |
173
|
|
|
|
|
|
|
|
174
|
|
|
|
|
|
|
# execute template, return rendered content. |
175
|
0
|
0
|
|
|
|
|
return $self->dir->site->template_engine->render($no_base ? $self->template : 'base.tx',\%vars); |
176
|
|
|
|
|
|
|
} |
177
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
1; |
179
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
__END__ |
181
|
|
|
|
|
|
|
|
182
|
|
|
|
|
|
|
=pod |
183
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
=head1 NAME |
185
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
DDG::Publisher::File - A file inside the publisher |
187
|
|
|
|
|
|
|
|
188
|
|
|
|
|
|
|
=head1 VERSION |
189
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
version 1042 |
191
|
|
|
|
|
|
|
|
192
|
|
|
|
|
|
|
=head1 ATTRIBUTES |
193
|
|
|
|
|
|
|
|
194
|
|
|
|
|
|
|
=head2 dir |
195
|
|
|
|
|
|
|
|
196
|
|
|
|
|
|
|
L<DDG::Publisher::DirRole> object of this file |
197
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
=head2 static |
199
|
|
|
|
|
|
|
|
200
|
|
|
|
|
|
|
This is a static file, so its not generated for every language, only one file. |
201
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
=head2 file |
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
Filename inside the directory of the site. |
205
|
|
|
|
|
|
|
|
206
|
|
|
|
|
|
|
=head2 file |
207
|
|
|
|
|
|
|
|
208
|
|
|
|
|
|
|
Base path inside the site directory, must be given on construction. |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
=head2 locale |
211
|
|
|
|
|
|
|
|
212
|
|
|
|
|
|
|
Locale used for this specific file. |
213
|
|
|
|
|
|
|
|
214
|
|
|
|
|
|
|
=head2 code |
215
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
Additional code that needs to be executed for getting the variables for the |
217
|
|
|
|
|
|
|
template of this file. |
218
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
=head2 file |
220
|
|
|
|
|
|
|
|
221
|
|
|
|
|
|
|
Template name used, normally by default this is not used, instead B<base.tx> |
222
|
|
|
|
|
|
|
template is loaded by default, and this one is using the template variable. If |
223
|
|
|
|
|
|
|
there is a variable B<no_base> set inside the resulting variables for this |
224
|
|
|
|
|
|
|
file, then this template name is used instead of B<base.tx> |
225
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
=head2 content |
227
|
|
|
|
|
|
|
|
228
|
|
|
|
|
|
|
The resulting (uncompressed) content of the file. Fetching this will |
229
|
|
|
|
|
|
|
automatically fire up the template engine to generate the content. |
230
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
=head1 AUTHOR |
232
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
Torsten Raudssus <torsten@raudss.us> |
234
|
|
|
|
|
|
|
|
235
|
|
|
|
|
|
|
=head1 COPYRIGHT AND LICENSE |
236
|
|
|
|
|
|
|
|
237
|
|
|
|
|
|
|
This software is Copyright (c) 2012 by DuckDuckGo, Inc. L<http://duckduckgo.com/>. |
238
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
This is free software, licensed under: |
240
|
|
|
|
|
|
|
|
241
|
|
|
|
|
|
|
The Apache License, Version 2.0, January 2004 |
242
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
=cut |