| 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 |