summaryrefslogtreecommitdiffstats
path: root/lib/MooseX/ArrayRef/Meta/Role/Class.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MooseX/ArrayRef/Meta/Role/Class.pm')
-rw-r--r--lib/MooseX/ArrayRef/Meta/Role/Class.pm39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/MooseX/ArrayRef/Meta/Role/Class.pm b/lib/MooseX/ArrayRef/Meta/Role/Class.pm
new file mode 100644
index 0000000..0873454
--- /dev/null
+++ b/lib/MooseX/ArrayRef/Meta/Role/Class.pm
@@ -0,0 +1,39 @@
+package MooseX::ArrayRef::Meta::Role::Class;
+use Moose::Role;
+
+use List::MoreUtils qw(any);
+use Data::OptList;
+
+before superclasses => sub {
+ my $self = shift;
+ return if @_ == 0;
+
+ my $supers = Data::OptList::mkopt(\@_);
+ if (@$supers > 1 || any { scalar($_->meta->superclasses) > 1 } $self->linearized_isa) {
+ $self->throw_error("Multiple inheritance is not supported in the inheritance hierarchy of arrayref-based instances");
+ }
+
+ my $super_meta = Class::MOP::Class->initialize($_[0]);
+ if (!Moose::Util::does_role($super_meta->instance_metaclass, 'MooseX::ArrayRef::Meta::Role::Instance') && $super_meta->get_all_attributes) {
+ $self->throw_error("Can't inherit from hashref-based Moose classes");
+ }
+};
+
+before add_attribute => sub {
+ my $self = shift;
+ if ($self->subclasses) {
+ $self->throw_error("Can't add attributes to a class with descendents");
+ }
+};
+
+before rebless_instance => sub {
+ shift->throw_error("Can't rebless arrayref-based instances");
+};
+
+before rebless_instance_back => sub {
+ shift->throw_error("Can't rebless arrayref-based instances");
+};
+
+no Moose::Role;
+
+1;