Simplify how content gets mangled.
[catagits/Gitalist.git] / lib / Gitalist / Model / ContentMangler.pm
CommitLineData
03297637 1package Gitalist::Model::ContentMangler;
2use Moose;
b2e0fe31 3use MooseX::Types::Moose qw/HashRef/;
7c781a87 4use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
03297637 5use namespace::autoclean;
6
7extends 'Catalyst::Model';
8
701c72d2 9# XXX This could live as metadata somewhere or in the config or whatever..
10has transform_params => (
7c781a87 11 is => 'ro',
b2e0fe31 12 isa => HashRef,
701c72d2 13 default => sub { {
14 blob => [qw/blob filename/],
15 diff_fancy => [qw/diffs/],
16 } },
7c781a87 17);
18
b2e0fe31 19sub process {
701c72d2 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);
b2e0fe31 36}
37
03297637 38__PACKAGE__->meta->make_immutable;