basic config registration pod
[scpubgit/Q-Branch.git] / lib / with.pm
CommitLineData
b73fb1b6 1package with;
2
3# This must be its own dist later
4
5use strict;
6use warnings;
7use if $] < '5.010', 'MRO::Compat';
8use mro;
9
10my $comp = 'A001';
11
12sub components {
13 my ($inv, @comp) = @_;
14 my $class = ref($inv) || $inv;
15 my $new_class = join('::', $class, $comp++);
16 require Class::C3::Componentised;
17 my @comp_classes = map +(/^\+(.+)$/ ? "${class}::$1" : $_), @comp;
18 Class::C3::Componentised->ensure_class_loaded($_) for @comp_classes;
19 Class::C3::Componentised->inject_base(
20 $new_class,
5d4463f6 21 @comp_classes, $class
b73fb1b6 22 );
5d4463f6 23 mro::set_mro($new_class, 'c3');
b73fb1b6 24 return $new_class unless ref($inv);
25 return bless($inv, $new_class);
26}
27
28sub roles {
29 my ($inv, @roles) = @_;
30 my $class = ref($inv) || $inv;
31 require Role::Tiny;
32 my $new_class = Role::Tiny->create_class_with_roles($class,
33 map +(/^\+(.+)$/ ? "${class}::$1" : $_), @roles
34 );
35 return $new_class unless ref($inv);
36 return bless($inv, $new_class);
37}
38
391;