Unicode fixes
[gitmo/moose-website.git] / lib / Moose / Website.pm
index a83d763..e5591fa 100644 (file)
@@ -2,22 +2,19 @@ package Moose::Website;
 use Moose;
 use MooseX::Types::Path::Class;
 
+use Path::Class;
 use Template;
 use YAML::XS 'LoadFile';
+
 use Moose::Website::I18N;
+use Moose::Website::Resource::Templates;
+use Moose::Website::Resource::WebFiles;
 
 our $VERSION   = '0.01';
 our $AUTHORITY = 'cpan:STEVAN';
 
 with 'MooseX::Getopt';
 
-has 'page_file' => (
-    is       => 'ro',
-    isa      => 'Path::Class::File',
-    coerce   => 1,
-    required => 1,
-);
-
 has 'outdir' => (
     is       => 'ro',
     isa      => 'Path::Class::Dir',
@@ -25,29 +22,48 @@ has 'outdir' => (
     required => 1,
 );
 
-has 'template_root' => (
+has 'locale' => (
+    is      => 'ro',
+    isa     => 'Str',
+    default => sub { 'en' },
+);
+
+has 'page_file' => (
     is       => 'ro',
-    isa      => 'Path::Class::Dir',
+    isa      => 'Path::Class::File',
     coerce   => 1,
-    required => 1,
+    default  => sub {
+        file(__FILE__)->parent->parent->parent->file('data', 'pages.yml')
+    }
 );
 
-has 'template_config' => (
+# ....
+
+has 'template_resource' => (
+    traits  => [ 'NoGetopt' ],
     is      => 'ro',
-    isa     => 'HashRef',
+    isa     => 'Moose::Website::Resource::Templates',
     lazy    => 1,
-    default => sub { +{} },
+    default => sub {
+        Moose::Website::Resource::Templates->new
+    },
+    handles  => {
+        'template_root' => 'dir'
+    }
 );
 
-has 'locale' => (
+has 'web_file_resource' => (
+    traits  => [ 'NoGetopt' ],
     is      => 'ro',
-    isa     => 'Str',
-    default => sub { 'en' },
+    isa     => 'Moose::Website::Resource::WebFiles',
+    lazy    => 1,
+    default => sub {
+        Moose::Website::Resource::WebFiles->new
+    },
 );
 
-# ....
-
 has 'i18n' => (
+    traits  => [ 'NoGetopt' ],
     is      => 'ro',
     isa     => 'Object',
     lazy    => 1,
@@ -82,25 +98,45 @@ has 'tt' => (
     }
 );
 
+has 'template_config' => (
+    traits  => [ 'NoGetopt' ],
+    is      => 'ro',
+    isa     => 'HashRef',
+    lazy    => 1,
+    default => sub { +{
+        ENCODING => 'UTF-8',
+    } },
+);
+
 sub log { shift; warn @_, "\n" }
 
 sub run {
     my $self = shift;
 
     foreach my $page ( @{ $self->pages } ) {
+
+        my $outfile = $self->outdir->file( $page->{outfile} )->stringify;
+
+        $self->log( "Writing page " . $page->{name} . " to $outfile using template " . $page->{template} );
+
         $self->tt->process(
             $page->{template},
             $self->build_template_params( current_page => $page ),
-            $self->outdir->file( $page->{outfile} )->stringify
+            $outfile,
+            { binmode => ':encoding(UTF-8)' },
         ) || confess $self->tt->error;
     }
+
+    $self->log( "Copying web resources to " . $self->outdir );
+    $self->web_file_resource->copy( to => $self->outdir );
 }
 
 sub build_template_params {
     my ($self, %params) = @_;
 
-    $params{ pages } = $self->pages;
-    $params{ loc }   = sub { $self->i18n->loc( @_ ) };
+    $params{ pages }  = $self->pages;
+    $params{ loc }    = sub { $self->i18n->loc( @_ ) };
+    $params{ locale } = $self->locale;
 
     \%params;
 }