summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-05-28 23:05:35 -0500
committerJesse Luehrs <doy@tozt.net>2009-05-28 23:05:35 -0500
commitb9f82dfce667aa0718d8e7904dc9a2a0163efeb6 (patch)
treee58b4bfb634bbdee86b5f0bba05beb68810c7f37
parent8d62b6e815e4442bed635d2b626ad9a6bce9abb3 (diff)
downloadmoosex-abc-b9f82dfce667aa0718d8e7904dc9a2a0163efeb6.tar.gz
moosex-abc-b9f82dfce667aa0718d8e7904dc9a2a0163efeb6.zip
apply a base class role to prevent abstract class instantiation
-rw-r--r--lib/MooseX/ABC.pm4
-rw-r--r--lib/MooseX/ABC/Role/Object.pm12
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/MooseX/ABC.pm b/lib/MooseX/ABC.pm
index f0f1412..95986bd 100644
--- a/lib/MooseX/ABC.pm
+++ b/lib/MooseX/ABC.pm
@@ -17,6 +17,10 @@ sub init_meta {
shift;
my %options = @_;
Moose->init_meta(%options);
+ Moose::Util::MetaRole::apply_base_class_roles(
+ for_class => $options{for_class},
+ roles => ['MooseX::ABC::Role::Object'],
+ );
Moose::Util::MetaRole::apply_metaclass_roles(
for_class => $options{for_class},
metaclass_roles => ['MooseX::ABC::Trait::Class'],
diff --git a/lib/MooseX/ABC/Role/Object.pm b/lib/MooseX/ABC/Role/Object.pm
new file mode 100644
index 0000000..083c0f5
--- /dev/null
+++ b/lib/MooseX/ABC/Role/Object.pm
@@ -0,0 +1,12 @@
+package MooseX::ABC::Role::Object;
+use Moose::Role;
+
+sub new {
+ my $class = shift;
+ Class::MOP::class_of($class)->throw_error(
+ "$class is abstract, it cannot be instantiated"
+ );
+}
+
+no Moose::Role;
+1;