/usr/local/CPAN/DBICx-Modeler/DBICx/Modeler/Model.pm
package DBICx::Modeler::Model;
use strict;
use warnings;
use DBICx::Modeler::Carp;
use constant TRACE => DBICx::Modeler::Carp::TRACE;
use Moose();
use Moose::Exporter;
use DBICx::Modeler::Model::Meta;
{
my ($import, $unimport) = Moose::Exporter->build_import_methods(
with_caller => [qw/
after before around
belongs_to has_one has_many might_have
/],
also => [ qw/Moose/ ],
);
sub import {
my $class = caller();
return if $class eq 'main';
my $meta = Moose::Meta::Class->initialize( $class );
my $model_meta = DBICx::Modeler::Model::Meta->new( model_class => $class );
$meta->add_method( _model__meta => sub {
return $model_meta;
} );
Moose::Util::apply_all_roles( $meta => qw/DBICx::Modeler::Does::Model/ );
goto &$import;
}
*unimport = \&$unimport;
*unimport = $unimport; # Derp, derp, derp, warning
}
sub after {
my $caller = shift;
push @{ $caller->_model__meta->_specialization->{method_modifier} }, [ after => @_ ];
}
sub before {
my $caller = shift;
push @{ $caller->_model__meta->_specialization->{method_modifier} }, [ before => @_ ];
}
sub around {
my $caller = shift;
push @{ $caller->_model__meta->_specialization->{method_modifier} }, [ around => @_ ];
}
sub belongs_to {
my ($caller, $relationship_name, $model_class) = @_;
$caller->_model__meta->belongs_to( $relationship_name => $model_class );
}
sub has_one {
my ($caller, $relationship_name, $model_class) = @_;
$caller->_model__meta->has_one( $relationship_name => $model_class );
}
sub has_many {
my ($caller, $relationship_name, $model_class) = @_;
$caller->_model__meta->has_many( $relationship_name => $model_class );
}
sub might_have {
my ($caller, $relationship_name, $model_class) = @_;
$caller->_model__meta->might_have( $relationship_name => $model_class );
}
1;