Simplify how content gets mangled.
[catagits/Gitalist.git] / lib / Gitalist / Model / ContentMangler.pm
index d7b7457..93dc06c 100644 (file)
@@ -2,57 +2,37 @@ 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';
 
-has resolver_class => (
-    isa => NonEmptySimpleStr,
+# XXX This could live as metadata somewhere or in the config or whatever..
+has transform_params => (
     is => 'ro',
-    required => 1,
-    default => 'Gitalist::ContentMangler::Resolver::Default',
-);
-
-has resolver_config => (
     isa => HashRef,
-    is => 'ro',
-    default => sub { {} },
-);
-
-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);
-    },
+    default => sub { {
+        blob => [qw/blob filename/],
+        diff_fancy => [qw/diffs/],
+    } },
 );
 
-# FIXME This method is a gross hack.
-#
-# We need to work out what types of content mangles we have for various things based on hit type
-# file name and mime type, and perform the appropriate bits..
-
-# We need to support multiple languages, and we also want to be able to do HTMLizing (for e.g. Pod)
-
 sub process {
     my ($self, $c) = @_;
 
-    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 ]);
+    my $config  = Gitalist->config->{'Model::ContentMangler'}; # XXX Yeah it's a bit ugly. Feh.
+    my $action  = $c->action->name;
+    my $mangler = $c->req->param('cm') || '';
+    my $transformer = $config->{$action}{$mangler || 'default'};
+
+    return unless $transformer;
+    Class::MOP::load_class($transformer);
     
-    if ($c->stash->{blobs} || $c->stash->{blob}) {
-        foreach my $step (@steps) {
-            for ($c->stash->{blobs} ? @{$c->stash->{blobs}} : $c->stash->{blob}) {
-                $_ = $c->view($step->[0])->render($c, $_, $step->[1]);
-            }
-        }
-    }
+    my $result = $transformer->new()->transform(
+        map { $_ => $c->stash->{$_} } @{ $self->transform_params->{$action} }
+    ) || {};
+
+    $c->stash->{mangled} = 1 if %$result;
+    $c->stash(%$result);
 }
 
 __PACKAGE__->meta->make_immutable;