suffix becomes config_key
[catagits/Catalyst-Runtime.git] / lib / Catalyst / IOC / ConstructorInjection.pm
1 package Catalyst::IOC::ConstructorInjection;
2 use Moose;
3 use Catalyst::Utils ();
4 extends 'Bread::Board::ConstructorInjection';
5
6 with 'Bread::Board::Service::WithClass',
7      'Bread::Board::Service::WithDependencies',
8      'Catalyst::IOC::Service::WithParameters',
9      'Catalyst::IOC::Service::WithCOMPONENT';
10
11 has config_key => (
12     is         => 'ro',
13     isa        => 'Str',
14     lazy_build => 1,
15 );
16
17 sub _build_config_key {
18     Catalyst::Utils::class2classsuffix( shift->class );
19 }
20
21 # FIXME - how much of this should move to ::WithCOMPONENT?
22 sub get {
23     my $self = shift;
24
25     my $constructor = $self->constructor_name;
26     my $component   = $self->class;
27     my $params      = $self->params;
28     my $config      = $params->{config}->{ $self->config_key } || {};
29     my $app_name    = $params->{application_name};
30
31     # Stash catalyst_component_name in the config here, so that custom COMPONENT
32     # methods also pass it. local to avoid pointlessly shitting in config
33     # for the debug screen, as $component is already the key name.
34     local $config->{catalyst_component_name} = $component;
35
36     return $component->$constructor( $app_name, $config );
37 }
38
39 __PACKAGE__->meta->make_immutable;
40
41 no Moose; 1;
42
43 __END__
44
45 =pod
46
47 =head1 NAME
48
49 Catalyst::IOC::ConstructorInjection
50
51 =head1 SYNOPSIS
52
53 =head1 DESCRIPTION
54
55 =head1 AUTHORS
56
57 Catalyst Contributors, see Catalyst.pm
58
59 =head1 COPYRIGHT
60
61 This library is free software. You can redistribute it and/or modify it under
62 the same terms as Perl itself.
63
64 =cut