77cf85255f2f50c5d3d0044bd474a85a0bcb1e29
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / AccessorGroup.pm
1 package DBIx::Class::AccessorGroup;
2
3 use strict;
4 use warnings;
5
6 use base qw( DBIx::Class::MethodAttributes Class::Accessor::Grouped );
7
8 use Scalar::Util 'blessed';
9 use DBIx::Class::_Util 'fail_on_internal_call';
10 use namespace::clean;
11
12 sub mk_classdata {
13   DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
14   shift->mk_classaccessor(@_);
15 }
16
17 sub mk_classaccessor {
18   my $self = shift;
19   $self->mk_group_accessors('inherited', $_[0]);
20   (@_ > 1)
21     ? $self->set_inherited(@_)
22     : ( DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call )
23   ;
24 }
25
26 sub get_component_class {
27   my $class = $_[0]->get_inherited($_[1]);
28
29   no strict 'refs';
30   if (
31     defined $class
32       and
33     # inherited CAG can't be set to undef effectively, so people may use ''
34     length $class
35       and
36     # It's already an object, just go for it.
37     ! defined blessed $class
38       and
39     ! ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"}
40   ) {
41     $_[0]->ensure_class_loaded($class);
42
43     ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"}
44       = do { \(my $anon = 'loaded') };
45   }
46
47   $class;
48 };
49
50 sub set_component_class {
51   $_[0]->set_inherited($_[1], $_[2]);
52
53   # trigger a load for the case of $foo->component_accessor("bar")->new
54   $_[0]->get_component_class($_[1])
55     if defined wantarray;
56 }
57
58 1;
59
60 =head1 NAME
61
62 DBIx::Class::AccessorGroup - See Class::Accessor::Grouped
63
64 =head1 SYNOPSIS
65
66 =head1 DESCRIPTION
67
68 This class now exists in its own right on CPAN as Class::Accessor::Grouped
69
70 =head1 FURTHER QUESTIONS?
71
72 Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
73
74 =head1 COPYRIGHT AND LICENSE
75
76 This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
77 by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
78 redistribute it and/or modify it under the same terms as the
79 L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
80
81 =cut