summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow (pluto.buetow.org) <paul@buetow.org>2013-09-28 22:18:24 +0200
committerPaul Buetow (pluto.buetow.org) <paul@buetow.org>2013-09-28 22:18:24 +0200
commitfd7590d71aeee380e7c87ed77de592df1f30f5ef (patch)
tree16884f61fbf6b75246784f8209cfa08786157fd4
parent340aa6d143806c2c800d0cb44e0e3ed5dd6e3a15 (diff)
Some small refactoring
-rw-r--r--TODO1
-rw-r--r--Xerl/Base.pm1
-rw-r--r--Xerl/Main/Global.pm28
-rw-r--r--Xerl/Page/Configure.pm8
-rw-r--r--Xerl/Page/Content.pm1
-rw-r--r--Xerl/Page/Menu.pm2
-rw-r--r--Xerl/Page/Request.pm4
-rw-r--r--Xerl/Page/Templates.pm32
-rw-r--r--Xerl/Tools/FileIO.pm70
-rw-r--r--Xerl/XML/Element.pm2
-rw-r--r--Xerl/XML/Reader.pm4
11 files changed, 86 insertions, 67 deletions
diff --git a/TODO b/TODO
index 0cf9c6e..ebae430 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,5 @@
Hint: Run 'make todo' to see everything in every file what is to do!
-TODO: - Use more Modern Perl
TODO: - Use X?HTML5
TODO: - Create a Debian package and put it to deb.buetow.org
TODO: - Documentation of all features/options (manpage)
diff --git a/Xerl/Base.pm b/Xerl/Base.pm
index 9bb3d7f..043487b 100644
--- a/Xerl/Base.pm
+++ b/Xerl/Base.pm
@@ -43,6 +43,7 @@ sub exists($$) {
sub AUTOLOAD {
my UNIVERSAL $self = $_[0];
my $auto = our $AUTOLOAD;
+
return $self if $auto =~ /DESTROY/;
if ( $auto =~ /.*::set_(.+)$/ ) {
diff --git a/Xerl/Main/Global.pm b/Xerl/Main/Global.pm
index 5ed8567..291eca7 100644
--- a/Xerl/Main/Global.pm
+++ b/Xerl/Main/Global.pm
@@ -45,8 +45,23 @@ sub PLAIN {
sub REDIRECT ($) {
my $location = shift;
+
say "Status: 301 Moved Permanantly";
print "Location: $location\n\n";
+
+ return undef;
+}
+
+sub HTTP {
+ my $descr = _HTTP_DESCR(shift);
+
+ print $descr;
+ local $, = ' ';
+ print $descr;
+
+ Xerl::Main::Global::SHUTDOWN();
+
+ # Never reach this point
return undef;
}
@@ -55,6 +70,7 @@ sub _HTTP_DESCR ($;$) {
$infomsg //= '';
+ # Sub returns one of the strings below
if ( $status == 404 ) {
"Status: 404 Not Found $infomsg\015\012\n\n"
@@ -64,16 +80,4 @@ sub _HTTP_DESCR ($;$) {
}
}
-sub HTTP {
- my $descr = _HTTP_DESCR(shift);
- print $descr;
- local $, = ' ';
- print $descr;
-
- Xerl::Main::Global::SHUTDOWN();
-
- # Never reach this point
- return undef;
-}
-
1;
diff --git a/Xerl/Page/Configure.pm b/Xerl/Page/Configure.pm
index 38d94e1..e359c52 100644
--- a/Xerl/Page/Configure.pm
+++ b/Xerl/Page/Configure.pm
@@ -63,18 +63,23 @@ sub defaults($) {
unless ( -d $self->get_hostroot() . $self->get_host() ) {
my $redirect = $self->get_hostroot() . 'redirect:' . $self->get_host();
+
if ( -f $redirect ) {
my Xerl::Tools::FileIO $file =
Xerl::Tools::FileIO->new( 'path' => $redirect );
$file->fslurp();
+
my $location = $file->shift();
Xerl::Main::Global::REDIRECT($location);
$self->set_finish_request(1);
}
+
my $alias = $self->get_hostroot() . 'alias:' . $self->get_host();
+
if ( -f $alias ) {
my Xerl::Tools::FileIO $file =
Xerl::Tools::FileIO->new( 'path' => $alias );
+
$file->fslurp();
$self->set_host( $file->shift() );
}
@@ -113,7 +118,7 @@ sub defaults($) {
$self->set_contentpath( $self->get_hostpath() . 'content/' );
- # $self->set_ipv6( $ENV{REMOTE_ADDR} =~ /:/ ? 1 : 0 );
+ $self->set_is_ipv6( $ENV{REMOTE_ADDR} =~ /:/ ? 1 : 0 );
return undef;
}
@@ -123,6 +128,7 @@ sub eval($$) {
my $val = $_[1];
$val =~ s/^!(.+)/`$1`/eo;
+
return $val;
}
diff --git a/Xerl/Page/Content.pm b/Xerl/Page/Content.pm
index 401ec5a..c56db72 100644
--- a/Xerl/Page/Content.pm
+++ b/Xerl/Page/Content.pm
@@ -16,6 +16,7 @@ use Xerl::Base;
use Xerl::XML::Reader;
use Xerl::XML::Element;
+
use Xerl::Page::Rules;
use Xerl::Page::Configure;
diff --git a/Xerl/Page/Menu.pm b/Xerl/Page/Menu.pm
index 80923ce..62cb58d 100644
--- a/Xerl/Page/Menu.pm
+++ b/Xerl/Page/Menu.pm
@@ -35,6 +35,7 @@ sub generate($;$) {
for my $s (@site) {
$content .= "$s.sub/";
$siteadd .= "$s/";
+
$menuelem = $self->get_menu( $content, $siteadd, shift @compare );
$self->push_array($menuelem)
if $menuelem->first_array()->array_length() > 1;
@@ -46,6 +47,7 @@ sub generate($;$) {
sub get_menu($$$$) {
my Xerl::Page::Menu $self = $_[0];
my Xerl::Page::Configure $config = $self->get_config();
+
my ( $content, $siteadd, $compare ) = ( @_[ 1 ... 2 ], lc $_[3] );
my $issubsection = $content =~ m{\.sub/$};
my $pattern = qr/\.(?:xml)|(?:sub)$/;
diff --git a/Xerl/Page/Request.pm b/Xerl/Page/Request.pm
index cb3a876..77f893d 100644
--- a/Xerl/Page/Request.pm
+++ b/Xerl/Page/Request.pm
@@ -34,9 +34,9 @@ sub parse($) {
return $self unless defined;
my $params = '';
- for ( split /&/ ) {
- # List context uses ($1,$2) as method args
+ # List context uses ($1,$2) as method args
+ for ( split /&/ ) {
$self->setval(/(.+?)=(.+)/);
$params .= "&amp;$1=$2" if $1 ne 'site';
}
diff --git a/Xerl/Page/Templates.pm b/Xerl/Page/Templates.pm
index c327cbb..75b3807 100644
--- a/Xerl/Page/Templates.pm
+++ b/Xerl/Page/Templates.pm
@@ -16,9 +16,11 @@ use Time::HiRes 'tv_interval';
use Digest::MD5;
use Xerl::Base;
+
use Xerl::Page::Configure;
use Xerl::Page::Content;
use Xerl::Page::Menu;
+
use Xerl::Tools::FileIO;
use constant RECURSIVE => 1;
@@ -160,20 +162,6 @@ sub parsetemplate($$;$) {
return undef;
}
-# Static sub
-sub PARSELINE($$$;$) {
- my Xerl::Page::Configure $config = $_[0];
- my ( $sep, $line, $foundflag ) = @_[ 1 .. 3 ];
-
- $$line =~ s/$sep(!)?(.+?)$sep/
- defined $1 ? `$2` :
- (ref $config->getval($2) eq 'ARRAY')
- ? join '', @{$config->getval($2)} :
- $config->getval($2)/eg and $$foundflag = 1;
-
- return undef;
-}
-
sub print($;$) {
my Xerl::Page::Templates $self = $_[0];
my Xerl::Page::Configure $config = $self->get_config();
@@ -187,6 +175,7 @@ sub print($;$) {
$line =~ s#^Content-Type.*#Content-Type: text/plain#i;
$hflag = 0;
}
+
$line =~ s/ +/ /g;
redo if !$flag and $line =~ s/<perl>((?:.|\n)*?)<\/perl>/eval $1/ego;
@@ -212,10 +201,25 @@ sub print($;$) {
$line =~ s/!!LT!!/</g;
$line =~ s/!!GT!!/>/g;
$line =~ s#!!URL\((.+?)\)!!#<a href="$1">$1</a>#g;
+
print $line;
}
return undef;
}
+# Static sub
+sub PARSELINE($$$;$) {
+ my Xerl::Page::Configure $config = $_[0];
+ my ( $sep, $line, $foundflag ) = @_[ 1 .. 3 ];
+
+ $$line =~ s/$sep(!)?(.+?)$sep/
+ defined $1 ? `$2` :
+ (ref $config->getval($2) eq 'ARRAY')
+ ? join '', @{$config->getval($2)} :
+ $config->getval($2)/eg and $$foundflag = 1;
+
+ return undef;
+}
+
1;
diff --git a/Xerl/Tools/FileIO.pm b/Xerl/Tools/FileIO.pm
index a594694..98765df 100644
--- a/Xerl/Tools/FileIO.pm
+++ b/Xerl/Tools/FileIO.pm
@@ -10,6 +10,8 @@ package Xerl::Tools::FileIO;
use strict;
use warnings;
+use v5.14.0;
+
use Xerl::Base;
use Xerl::Main::Global;
@@ -78,40 +80,6 @@ sub fwriteappend($) {
return undef;
}
-sub _fwrite($;$) {
- my Xerl::Tools::FileIO $self = $_[0];
- my $append = $_[1];
-
- my ( $path, $filename ) =
- ( _SECUREPATH( $self->get_path() ), _SECUREPATH( $self->get_filename() ) );
-
- my $path_ = '';
- for ( split /\//, $path ) {
- $path_ .= $_ . '/';
- mkdir $path_
- or Xerl::Main::Global::ERROR( $!, $path_, caller() )
- unless -d $path_;
- }
-
- my $f;
- if ( $append == 0 ) {
- open $f, ">$path$filename"
- or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() );
-
- }
- else {
- open $f, ">>$path$filename"
- or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() );
- }
-
- flock $f, 2;
- print $f @{ $self->get_array() };
- flock $f, 3;
- close $f;
-
- return undef;
-}
-
sub print($) {
my Xerl::Tools::FileIO $self = $_[0];
@@ -153,6 +121,40 @@ sub pop($) {
return $pop;
}
+sub _fwrite($;$) {
+ my Xerl::Tools::FileIO $self = $_[0];
+ my $append = $_[1];
+
+ my ( $path, $filename ) =
+ ( _SECUREPATH( $self->get_path() ), _SECUREPATH( $self->get_filename() ) );
+
+ my $path_ = '';
+ for ( split /\//, $path ) {
+ $path_ .= $_ . '/';
+ mkdir $path_
+ or Xerl::Main::Global::ERROR( $!, $path_, caller() )
+ unless -d $path_;
+ }
+
+ my $f;
+ if ( $append == 0 ) {
+ open $f, ">$path$filename"
+ or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() );
+
+ }
+ else {
+ open $f, ">>$path$filename"
+ or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() );
+ }
+
+ flock $f, 2;
+ print $f @{ $self->get_array() };
+ flock $f, 3;
+ close $f;
+
+ return undef;
+}
+
use overload '+' => \&merge;
sub _SECUREPATH($) {
diff --git a/Xerl/XML/Element.pm b/Xerl/XML/Element.pm
index d18e0b5..0867841 100644
--- a/Xerl/XML/Element.pm
+++ b/Xerl/XML/Element.pm
@@ -41,7 +41,7 @@ sub params_str($) {
my Xerl::XML::Element $self = $_[0];
my $params = $self->get_params();
- return if $params eq '';
+ return undef if $params eq '';
return join '', map { " $_=\"" . $params->{$_} . '"' } keys %$params;
}
diff --git a/Xerl/XML/Reader.pm b/Xerl/XML/Reader.pm
index aeb8c74..c5ab2d3 100644
--- a/Xerl/XML/Reader.pm
+++ b/Xerl/XML/Reader.pm
@@ -17,7 +17,7 @@ use Xerl::XML::Element;
use Xerl::XML::SAXHandler;
sub open($) {
- my Xerl::XML::Reader $self = $_[0];
+ my Xerl::XML::Reader $self = shift;
if ( -f $self->get_path() ) {
return 0;
@@ -28,7 +28,7 @@ sub open($) {
}
sub parse() {
- my Xerl::XML::Reader $self = $_[0];
+ my Xerl::XML::Reader $self = shift;
my $sax_handler = Xerl::XML::SAXHandler->new();
my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler );