import 0.001
[gitmo/MooseX-InsideOut.git] / lib / MooseX / InsideOut / Meta / Class.pm
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;