From: Dave Rolsky <autarch@urth.org>
Date: Sat, 24 Nov 2007 18:05:01 +0000 (+0000)
Subject: Throw an error if the constructor receives a class attribute.
X-Git-Tag: 0.01~5
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a124b299407924009b3fbe5b3a4745444b1bbd67;p=gitmo%2FMooseX-ClassAttribute.git

Throw an error if the constructor receives a class attribute.
---

diff --git a/lib/MooseX/ClassAttribute.pm b/lib/MooseX/ClassAttribute.pm
index 3b899c3..66087b4 100644
--- a/lib/MooseX/ClassAttribute.pm
+++ b/lib/MooseX/ClassAttribute.pm
@@ -11,17 +11,27 @@ use MooseX::ClassAttribute::Meta::Method::Accessor;
 
 extends 'Moose::Meta::Attribute';
 
+
 sub accessor_metaclass { 'MooseX::ClassAttribute::Meta::Method::Accessor' }
 
 # This is called when an object is constructed.
 sub initialize_instance_slot
 {
+    my ( $self, $meta_instance, $instance, $params ) = @_;
+
+    return unless $self->has_init_arg();
+
+    my $init_arg = $self->init_arg();
+
+    confess "Cannot set a class attribute via the constructor ($init_arg)"
+        if exists $params->{$init_arg};
+
     return;
 }
 
 
 # This is the bit of magic that lets you specify the metaclass as
-# 'ClassAttribute', rather than the full name, when creating an
+# 'ClassAttribute' rather than the full name when creating an
 # attribute.
 package Moose::Meta::Attribute::Custom::ClassAttribute;