*sigh* IE is such a pain
[gitmo/moose-website.git] / lib / Moose / Website.pm
CommitLineData
7476895d 1package Moose::Website;
2use Moose;
3use MooseX::Types::Path::Class;
4
5efab74a 5use Path::Class;
7476895d 6use Template;
7use YAML::XS 'LoadFile';
3cb66fff 8
7476895d 9use Moose::Website::I18N;
3cb66fff 10use Moose::Website::Resource::Templates;
11use Moose::Website::Resource::WebFiles;
7476895d 12
13our $VERSION = '0.01';
14our $AUTHORITY = 'cpan:STEVAN';
15
16with 'MooseX::Getopt';
17
5efab74a 18has 'outdir' => (
7476895d 19 is => 'ro',
5efab74a 20 isa => 'Path::Class::Dir',
7476895d 21 coerce => 1,
22 required => 1,
23);
24
3cb66fff 25has 'locale' => (
26 is => 'ro',
27 isa => 'Str',
28 default => sub { 'en' },
29);
30
5efab74a 31has 'page_file' => (
7476895d 32 is => 'ro',
5efab74a 33 isa => 'Path::Class::File',
7476895d 34 coerce => 1,
5efab74a 35 default => sub {
36 file(__FILE__)->parent->parent->parent->file('data', 'pages.yml')
37 }
7476895d 38);
39
3cb66fff 40# ....
41
42has 'template_resource' => (
43 traits => [ 'NoGetopt' ],
44 is => 'ro',
45 isa => 'Moose::Website::Resource::Templates',
46 lazy => 1,
47 default => sub {
48 Moose::Website::Resource::Templates->new
49 },
50 handles => {
51 'template_root' => 'dir'
5efab74a 52 }
7476895d 53);
54
3cb66fff 55has 'web_file_resource' => (
56 traits => [ 'NoGetopt' ],
7476895d 57 is => 'ro',
3cb66fff 58 isa => 'Moose::Website::Resource::WebFiles',
59 lazy => 1,
60 default => sub {
61 Moose::Website::Resource::WebFiles->new
62 },
7476895d 63);
64
7476895d 65has 'i18n' => (
3cb66fff 66 traits => [ 'NoGetopt' ],
7476895d 67 is => 'ro',
68 isa => 'Object',
69 lazy => 1,
70 default => sub {
71 my $self = shift;
72 Moose::Website::I18N->get_handle( $self->locale )
73 }
74);
75
76has 'pages' => (
77 traits => [ 'NoGetopt' ],
78 is => 'ro',
79 isa => 'ArrayRef[HashRef]',
80 lazy => 1,
81 default => sub {
82 my $self = shift;
83 LoadFile( $self->page_file->stringify );
84 }
85);
86
87has 'tt' => (
88 traits => [ 'NoGetopt' ],
89 is => 'ro',
90 isa => 'Template',
91 lazy => 1,
92 default => sub {
93 my $self = shift;
94 Template->new(
95 INCLUDE_PATH => $self->template_root,
96 %{ $self->template_config }
97 )
98 }
99);
100
5efab74a 101has 'template_config' => (
102 traits => [ 'NoGetopt' ],
103 is => 'ro',
104 isa => 'HashRef',
105 lazy => 1,
106 default => sub { +{} },
107);
108
7476895d 109sub log { shift; warn @_, "\n" }
110
111sub run {
112 my $self = shift;
113
114 foreach my $page ( @{ $self->pages } ) {
5efab74a 115
116 my $outfile = $self->outdir->file( $page->{outfile} )->stringify;
117
118 $self->log( "Writing page " . $page->{name} . " to $outfile using template " . $page->{template} );
119
7476895d 120 $self->tt->process(
121 $page->{template},
122 $self->build_template_params( current_page => $page ),
5efab74a 123 $outfile
7476895d 124 ) || confess $self->tt->error;
125 }
3cb66fff 126
127 $self->log( "Copying web resources to " . $self->outdir );
128 $self->web_file_resource->copy( to => $self->outdir );
7476895d 129}
130
131sub build_template_params {
132 my ($self, %params) = @_;
133
df04a1b7 134 $params{ pages } = $self->pages;
135 $params{ loc } = sub { $self->i18n->loc( @_ ) };
136 $params{ locale } = $self->locale;
7476895d 137
138 \%params;
139}
140
141
142__PACKAGE__->meta->make_immutable;
143
144no Moose; 1;
145
146__END__
147
148=pod
149
150=head1 NAME
151
152Moose::Website - A Moosey solution to this problem
153
154=head1 SYNOPSIS
155
156 use Moose::Website;
157
158=head1 DESCRIPTION
159
160=head1 METHODS
161
162=over 4
163
164=item B<>
165
166=back
167
168=head1 BUGS
169
170All complex software has bugs lurking in it, and this module is no
171exception. If you find a bug please either email me, or add the bug
172to cpan-RT.
173
174=head1 AUTHOR
175
176Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
177
178=head1 COPYRIGHT AND LICENSE
179
180Copyright 2010 Infinity Interactive, Inc.
181
182L<http://www.iinteractive.com>
183
184This library is free software; you can redistribute it and/or modify
185it under the same terms as Perl itself.
186
187=cut