Commits

Toby Inkster committed b219c71

fix another on_inflation fragility

Comments (0)

Files changed (2)

lib/MooX/CaptainHook.pm

 		'Moo::Role'->apply_single_role_to_package('Moo::HandleMoose', MooX::CaptainHook::ON_INFLATION)
 			unless Role::Tiny::does_role('Moo::HandleMoose', MooX::CaptainHook::ON_INFLATION);
 	}
-	$Moo::HandleMoose::SETUP_DONE = bless [];
+	if ($Moo::HandleMoose::SETUP_DONE)
+		{ __PACKAGE__->DESTROY }
+	else
+		{ $Moo::HandleMoose::SETUP_DONE ||= bless [] }
 }
 
 1;

t/24hook_infl_backwards.t

+=head1 PURPOSE
+
+Test C<on_inflation> hook from L<MooX::CaptainHook> when Moose is loaded
+early.
+
+=head1 AUTHOR
+
+Toby Inkster E<lt>tobyink@cpan.orgE<gt>.
+
+=head1 COPYRIGHT AND LICENCE
+
+This software is copyright (c) 2013 by Toby Inkster.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN {
+	eval { require Moose } or plan skip_all => 'need Moose';
+};
+
+my @inflated;
+
+{
+	package Foo;
+	use Moo;
+	use MooX::CaptainHook qw( on_inflation );
+	on_inflation {
+		push @inflated, sprintf("%s (%s)", $_->name, $_->isa('Moose::Meta::Role')?'Role':'Class');
+	};
+}
+
+{
+	package Boo;
+	use Moo::Role;
+	use MooX::CaptainHook qw( on_inflation );
+	on_inflation {
+		push @inflated, sprintf("%s (%s)", $_->name, $_->isa('Moose::Meta::Role')?'Role':'Class');
+	};
+}
+
+Class::MOP::class_of('Foo')->name;
+Class::MOP::class_of('Boo')->name;
+
+is_deeply(
+	[ sort @inflated ],
+	[
+		"Boo (Role)",
+		"Foo (Class)",
+	],
+) or diag explain \@inflated;
+
+done_testing;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.