Commit | Line | Data |
64468268 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | package MooseX::InsideOut::Meta::Class; |
5 | |
6 | # need to load this before loading Moose and using it as a metaclass, because |
7 | # of circularity |
8 | use MooseX::InsideOut::Meta::Instance; |
9 | use Moose; |
10 | extends 'Moose::Meta::Class'; |
11 | |
12 | sub initialize { |
13 | my $class = shift; |
14 | my $pkg = shift; |
15 | $class->SUPER::initialize( |
16 | $pkg, |
17 | instance_metaclass => 'MooseX::InsideOut::Meta::Instance', |
18 | @_, |
19 | ); |
20 | } |
21 | |
22 | # this seems like it should be part of Moose::Meta::Class |
23 | sub construct_instance { |
24 | my ($class, %params) = @_; |
25 | my $meta_instance = $class->get_meta_instance; |
26 | my $instance = $params{'__INSTANCE__'} |
27 | || $meta_instance->create_instance(); |
28 | foreach my $attr ($class->compute_all_applicable_attributes()) { |
29 | my $meta_instance = $attr->associated_class->get_meta_instance; |
30 | $attr->initialize_instance_slot($meta_instance, $instance, \%params); |
31 | } |
32 | return $instance; |
33 | } |
34 | |
35 | 1; |