Commit | Line | Data |
7d26c84b |
1 | package CatalystX::ModelsFromConfig; |
2 | use Moose::Role; |
3 | use Catalyst::Model::Adaptor (); |
046d763d |
4 | use namespace::autoclean; |
7d26c84b |
5 | |
6 | requires qw/ |
7 | config |
8 | setup_components |
9 | setup_component |
10 | /; |
11 | |
6a2f1e96 |
12 | # Note method reaming - allows user to modify my setup_dynamic_component without being |
13 | # forced to do it globally. |
14 | with 'CatalystX::DynamicComponent' |
15 | => { alias => { _setup_dynamic_component => '_setup_dynamic_model' } }; |
16 | |
7d26c84b |
17 | after 'setup_components' => sub { shift->_setup_dynamic_models(@_); }; |
18 | |
19 | sub _setup_dynamic_models { |
20 | my ($app) = @_; |
21 | |
22 | my $app_name = blessed($app) || $app; |
23 | my $model_prefix = 'Model::'; |
24 | |
77e54b00 |
25 | my $config = $app->config || {}; |
7d26c84b |
26 | |
77e54b00 |
27 | foreach my $model_name ( grep { /^$model_prefix/ } keys %$config ) { |
7d26c84b |
28 | my $model_class_name = $app_name . '::' . $model_name; |
77e54b00 |
29 | |
30 | $app->_setup_dynamic_model( $model_class_name, $config->{$model_name}, |
31 | sub { |
32 | my ($component_class_name, $app, $args) = @_; |
33 | |
34 | my $class = delete $args->{class}; |
35 | Class::MOP::load_class($class); |
36 | |
37 | $class->new($args); |
38 | }); |
7d26c84b |
39 | } |
40 | } |
41 | |
7d26c84b |
42 | 1; |
43 | |