Simplify how content gets mangled.
[catagits/Gitalist.git] / lib / Gitalist / Model / ContentMangler.pm
1 package Gitalist::Model::ContentMangler;
2 use Moose;
3 use MooseX::Types::Moose qw/HashRef/;
4 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
5 use namespace::autoclean;
6
7 extends 'Catalyst::Model';
8
9 # XXX This could live as metadata somewhere or in the config or whatever..
10 has transform_params => (
11     is => 'ro',
12     isa => HashRef,
13     default => sub { {
14         blob => [qw/blob filename/],
15         diff_fancy => [qw/diffs/],
16     } },
17 );
18
19 sub process {
20     my ($self, $c) = @_;
21
22     my $config  = Gitalist->config->{'Model::ContentMangler'}; # XXX Yeah it's a bit ugly. Feh.
23     my $action  = $c->action->name;
24     my $mangler = $c->req->param('cm') || '';
25     my $transformer = $config->{$action}{$mangler || 'default'};
26
27     return unless $transformer;
28     Class::MOP::load_class($transformer);
29     
30     my $result = $transformer->new()->transform(
31         map { $_ => $c->stash->{$_} } @{ $self->transform_params->{$action} }
32     ) || {};
33
34     $c->stash->{mangled} = 1 if %$result;
35     $c->stash(%$result);
36 }
37
38 __PACKAGE__->meta->make_immutable;