Qgoda
view release on metacpan or search on metacpan
lib/Qgoda/Util.pm view on Meta::CPAN
return "$filename: " . join "\n", @lines;
}
sub lowercase($) {
my ($str) = @_;
return lc $str;
}
sub merge_data {
my ($data, $overlay) = @_;
# Return $overlay if it is of a different type than $data.
my $equal_ref = sub {
my ($x, $y) = @_;
return if !ref $x;
return if !ref $y;
my $ref_x = reftype $x;
my $ref_y = reftype $y;
return $ref_x eq $ref_y;
};
return $overlay if !$equal_ref->($overlay, $data);
return $overlay if 'ARRAY' eq reftype $overlay;
my $merger;
$merger = sub {
my ($d, $o) = @_;
foreach my $key (keys %$d) {
if (exists $o->{$key}) {
if (!$equal_ref->($d->{$key}, $o->{$key})) {
eval { $d->{$key} = $o->{$key}; };
} elsif (UNIVERSAL::isa($d->{$key}, 'HASH')) {
lib/Qgoda/Util.pm view on Meta::CPAN
}
}
}
foreach my $key (keys %$o) {
if (!exists $d->{$key}) {
$d->{$key} = $o->{$key};
}
}
};
$merger->($data, $overlay);
return $data;
}
sub interpolate($$) {
my ($string, $data) = @_;
$data ||= {};
my $type = reftype $data;
lib/Template/Plugin/Qgoda.pm view on Meta::CPAN
my @stat = stat $fullpath or return $uri;
if (defined $query) {
return "$uri&$stat[9]"
} else {
return "$uri?$stat[9]"
}
}
sub include {
my ($self, $path, $overlay, $extra) = @_;
die "usage: include(PATH, OVERLAY, KEY = VALUE, ...\n"
if empty $path || empty $overlay;
$overlay = $self->__sanitizeHashref($overlay, 'include');
$extra = $self->__sanitizeHashref($extra, 'include', 1);
my $asset = $self->__include($path, $overlay, $extra);
return $asset->{content};
}
sub __include {
my ($self, $_path, $overlay, $extra) = @_;
require Qgoda;
my $q = Qgoda->new;
my $srcdir = $q->config->{srcdir};
my $path = Cwd::abs_path($_path);
if (!defined $path) {
die __x("error including '{path}': {error}.\n",
path => $_path, error => $!);
}
my $relpath = File::Spec->abs2rel($path, $srcdir);
my $asset = Qgoda::Asset->new($path, $relpath);
if ($overlay) {
my %overlay = %$overlay;
delete $overlay{path};
delete $overlay{relpath};
delete $overlay{reldir};
delete $overlay{view};
delete $overlay{chain};
delete $overlay{wrapper};
merge_data $asset, \%overlay;
}
$q->analyzeAssets([$asset], $extra);
$q->locateAsset($asset);
my $builders = $q->getBuilders;
my $site = $q->getSite;
foreach my $builder (@{$builders}) {
$builder->processAsset($asset, $site);
$builder->wrapAsset($asset, $site);
lib/Template/Plugin/Qgoda.pm view on Meta::CPAN
sub lexistsLinkPost {
my ($self, @args) = @_;
local $SIG{__WARN__} = sub {};
return $self->llinkPost(@args);
}
sub writeAsset {
my ($self, $path, $overlay, $extra) = @_;
die "usage: writeAsset(PATH, OVERLAY, KEY = VALUE, ...\n"
if empty $path || empty $overlay;
$overlay = $self->__sanitizeHashref($overlay, 'include');
$extra = $self->__sanitizeHashref($extra, 'include', 1);
my $asset = $self->__include($path, $overlay, $extra);
my $q = Qgoda->new;
my $logger = $q->logger('template');
my $builder = Qgoda::Builder->new;
my $site = $q->getSite;
$builder->saveArtefact($asset, $site, $asset->{location});
$logger->debug(__x("successfully built '{location}'",
location => $asset->{location}));
( run in 1.522 second using v1.01-cache-2.11-cpan-49f99fa48dc )