1 package # Hide from PAUSE
2 CatalystX::DynamicComponent::ModelsFromConfig::InterfaceRoles::COMPONENT;
4 use Moose::Util qw/does_role/;
5 use namespace::autoclean;
7 around 'COMPONENT' => sub {
8 my ($orig, $component_class_name, $app, $args) = @_;
10 my $interface_roles = delete $args->{interface_roles};
11 confess("No interface_roles configuration specified for $component_class_name")
12 unless $interface_roles && ref($interface_roles) eq 'ARRAY'
13 && scalar(@$interface_roles);
15 my $component = $component_class_name->$orig($app, $args);
17 foreach my $role_name (@$interface_roles) {
18 confess("$component_class_name generated an instance $component which does not perform the required $role_name role")
19 unless does_role($component, $role_name);
25 package CatalystX::DynamicComponent::ModelsFromConfig::InterfaceRoles;
27 use namespace::autoclean;
29 with 'CatalystX::DynamicComponent::ModelsFromConfig';
31 around '_setup_dynamic_model' => sub {
32 my ($orig, $app, $class_name, $config, @args) = @_;
33 my @roles = @{ delete($config->{roles}) || [] };
34 push(@roles, 'CatalystX::DynamicComponent::ModelsFromConfig::InterfaceRoles::COMPONENT');
35 $config->{roles} = \@roles;
36 $app->$orig($class_name, $config, @args);