Syntax higlighting improvements
[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/;
5use Gitalist::ContentMangler::Resolver;
03297637 6use namespace::autoclean;
7
8extends 'Catalyst::Model';
9
7c781a87 10has resolver_class => (
11 isa => NonEmptySimpleStr,
12 is => 'ro',
13 required => 1,
14 default => 'Gitalist::ContentMangler::Resolver::Default',
15);
16
17has resolver_config => (
b2e0fe31 18 isa => HashRef,
19 is => 'ro',
20 default => sub { {} },
7c781a87 21);
22
23has _resolver => (
24 does => 'Gitalist::ContentMangler::Resolver',
25 handles => ['resolve'],
26 is => 'bare', lazy => 1,
27 default => sub {
28 my $self = shift;
29 my $class = $self->resolver_class;
30 Class::MOP::load_class($class);
31 return $class->new($self->resolver_config);
b2e0fe31 32 },
33);
34
35# FIXME This method is a gross hack.
36#
37# We need to work out what types of content mangles we have for various things based on hit type
38# file name and mime type, and perform the appropriate bits..
39
40# We need to support multiple languages, and we also want to be able to do HTMLizing (for e.g. Pod)
41
42sub process {
bfa60830 43 my ($self, $c) = @_;
44
45 # Find appropriate mangler based on filename,action,config
46 # Mangler should provide a transform e.g what part of the stash to mangle
47 # Then call the transform with the appropriate mangling
48
49 my($transformer, $config) = $self->resolve({
50 filename => $c->stash->{filename} || '',
a8f57013 51 blob => \$c->stash->{blob},
bfa60830 52 config => Gitalist->config->{'Model::ContentMangler'},
53 action => $c->action->name,
54 });
55
56 return
57 unless $transformer;
58
59 Class::MOP::load_class($transformer);
60 $transformer->new($config)->transform($c, $config);
b2e0fe31 61}
62
03297637 63__PACKAGE__->meta->make_immutable;