/usr/local/CPAN/MooseX-Scaffold/MooseX/Scaffold/Class.pm


package MooseX::Scaffold::Class;

use strict;
use warnings;

use Carp::Clan qr/^MooseX::Scaffold/;

use overload
    "" => \&name,
    fallback => 1,
;

sub new {
    my $self = bless {}, shift;
    my $package = $self->{package} = shift;
    return $self;
}

sub name {
    return shift->package;
}

sub package {
    return shift->{package};
}

sub meta {
    return shift->package->meta;
}

for my $method (qw/ extends has before after around super override augment /) {
    no strict 'refs';
    my $moose_method = Moose->can( $method );
    *$method = sub {
        my $self = shift;
        my $meta = $self->package->meta;
        return $moose_method->( $meta, @_ );
    };
}

sub class_has {
    my $self = shift;
    # TODO Check to see if the proper role has been applied first

    unless ($self->meta->can('add_class_attribute')) {
        croak "Can't add class attribute: You need to 'use MooseX::ClassAttribute' in ", $self->name;
    }
    return MooseX::ClassAttribute::class_has( $self->meta, @_ );
}

1;