summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;