From: Tomas Doran Date: Sat, 23 Jan 2010 20:05:11 +0000 (+0000) Subject: Make a resolver object implementing the current policy. You should now be able to... X-Git-Tag: 0.002002~33 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=dbfbfe182c69cfbf67bee1aef6f3c0ee18e1acc2;p=catagits%2FGitalist.git Make a resolver object implementing the current policy. You should now be able to swap a wholely different resolver in with config.. Next up - generating the views that resolvers map to by config :) --- diff --git a/lib/Gitalist/ContentMangler/Resolver.pm b/lib/Gitalist/ContentMangler/Resolver.pm new file mode 100644 index 0000000..f0ba985 --- /dev/null +++ b/lib/Gitalist/ContentMangler/Resolver.pm @@ -0,0 +1,6 @@ +package Gitalist::ContentMangler::Resolver; +use Moose::Role; + +requires 'resolve'; + +1; diff --git a/lib/Gitalist/ContentMangler/Resolver/Default.pm b/lib/Gitalist/ContentMangler/Resolver/Default.pm new file mode 100644 index 0000000..607f4d4 --- /dev/null +++ b/lib/Gitalist/ContentMangler/Resolver/Default.pm @@ -0,0 +1,9 @@ +use MooseX::Declare; + +class Gitalist::ContentMangler::Resolver::Default with Gitalist::ContentMangler::Resolver { + method resolve ($data) { + return unless $data->{filename}; + my $language = 'Perl' if $data->{filename} =~ /\.p[lm]$/i; + return (['SyntaxHighlight', {language => $language, css => $language}]); + } +} \ No newline at end of file diff --git a/lib/Gitalist/Model/ContentMangler.pm b/lib/Gitalist/Model/ContentMangler.pm index 1f48b57..d7b7457 100644 --- a/lib/Gitalist/Model/ContentMangler.pm +++ b/lib/Gitalist/Model/ContentMangler.pm @@ -1,20 +1,34 @@ package Gitalist::Model::ContentMangler; use Moose; use MooseX::Types::Moose qw/HashRef/; +use MooseX::Types::Common::String qw/NonEmptySimpleStr/; +use Gitalist::ContentMangler::Resolver; use namespace::autoclean; extends 'Catalyst::Model'; -# FIXME - Never cleared!! -has _languages => ( +has resolver_class => ( + isa => NonEmptySimpleStr, + is => 'ro', + required => 1, + default => 'Gitalist::ContentMangler::Resolver::Default', +); + +has resolver_config => ( isa => HashRef, is => 'ro', default => sub { {} }, - traits => ['Hash'], - handles => { - _add_language => 'set', - languages => 'keys', - css => 'values', +); + +has _resolver => ( + does => 'Gitalist::ContentMangler::Resolver', + handles => ['resolve'], + is => 'bare', lazy => 1, + default => sub { + my $self = shift; + my $class = $self->resolver_class; + Class::MOP::load_class($class); + return $class->new($self->resolver_config); }, ); @@ -28,16 +42,15 @@ has _languages => ( sub process { my ($self, $c) = @_; - # XXX Hack hack hack - my $language = $c->stash->{language} || ''; - $language = 'Perl' if $c->stash->{filename} =~ /\.p[lm]$/i; - # FIXME - MOAR.. - - $self->_add_language($language, $c->uri_for('/static/css/syntax/' . $language . '.css')) if $language; + my @steps = $self->resolve({ filename => $c->stash->{filename} }); + my @css = map { $_->[1]->{css} } grep { exists $_->[1] && exists $_->[1]->{css} && defined $_->[1]->{css} && length $_->[1]->{css} } @steps; + $c->stash(syntax_css => [ map { $c->uri_for('/static/css/syntax/' . $_ . '.css') } @css ]); if ($c->stash->{blobs} || $c->stash->{blob}) { - for($c->stash->{blobs} ? @{$c->stash->{blobs}} : $c->stash->{blob}) { - $_ = $c->view('SyntaxHighlight')->render($c, $_, { language => $language }); + foreach my $step (@steps) { + for ($c->stash->{blobs} ? @{$c->stash->{blobs}} : $c->stash->{blob}) { + $_ = $c->view($step->[0])->render($c, $_, $step->[1]); + } } } }