Wrap columns() in an array ref for better is_deeply() diagnostics.
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / CDBICompat / ColumnGroups.pm
CommitLineData
75d07914 1package # hide from PAUSE
c0e7b4e5 2 DBIx::Class::CDBICompat::ColumnGroups;
ea2e61bf 3
4use strict;
5use warnings;
ea2e61bf 6
75a23b3e 7use base qw/DBIx::Class::Row/;
ea2e61bf 8
9__PACKAGE__->mk_classdata('_column_groups' => { });
10
ea2e61bf 11sub columns {
12 my $proto = shift;
13 my $class = ref $proto || $proto;
14 my $group = shift || "All";
e60dc79f 15 $class->_init_result_source_instance();
16
510ca912 17 $class->_add_column_group($group => @_) if @_;
ea2e61bf 18 return $class->all_columns if $group eq "All";
19 return $class->primary_column if $group eq "Primary";
20 return keys %{$class->_column_groups->{$group}};
21}
22
510ca912 23sub _add_column_group {
ea2e61bf 24 my ($class, $group, @cols) = @_;
510ca912 25 $class->add_columns(@cols);
6a94f7f4 26 $class->_register_column_group($group => @cols);
ea2e61bf 27}
28
29sub _register_column_group {
30 my ($class, $group, @cols) = @_;
b8e1e21f 31
32 my $groups = { %{$class->_column_groups} };
33
ea2e61bf 34 if ($group eq 'Primary') {
510ca912 35 $class->set_primary_key(@cols);
b8e1e21f 36 $groups->{'Essential'}{$_} ||= {} for @cols;
ea2e61bf 37 }
38
ea2e61bf 39 if ($group eq 'All') {
510ca912 40 unless (exists $class->_column_groups->{'Primary'}) {
ea2e61bf 41 $groups->{'Primary'}{$cols[0]} = {};
510ca912 42 $class->set_primary_key($cols[0]);
ea2e61bf 43 }
510ca912 44 unless (exists $class->_column_groups->{'Essential'}) {
ea2e61bf 45 $groups->{'Essential'}{$cols[0]} = {};
46 }
47 }
48
49 $groups->{$group}{$_} ||= {} for @cols;
b8e1e21f 50
ea2e61bf 51 $class->_column_groups($groups);
52}
53
8c49f629 54sub all_columns { return shift->result_source_instance->columns; }
ea2e61bf 55
56sub primary_column {
57 my ($class) = @_;
103647d5 58 my @pri = $class->primary_columns;
ea2e61bf 59 return wantarray ? @pri : $pri[0];
60}
61
62sub find_column {
63 my ($class, $col) = @_;
103647d5 64 return $col if $class->has_column($col);
ea2e61bf 65}
66
67sub __grouper {
68 my ($class) = @_;
04786a4c 69 my $grouper = { class => $class };
70 return bless($grouper, 'DBIx::Class::CDBICompat::ColumnGroups::GrouperShim');
ea2e61bf 71}
72
73sub _find_columns {
74 my ($class, @col) = @_;
75 return map { $class->find_column($_) } @col;
76}
77
78package DBIx::Class::CDBICompat::ColumnGroups::GrouperShim;
79
80sub groups_for {
81 my ($self, @cols) = @_;
82 my %groups;
83 foreach my $col (@cols) {
84 foreach my $group (keys %{$self->{class}->_column_groups}) {
85 $groups{$group} = 1 if $self->{class}->_column_groups->{$group}->{$col};
86 }
87 }
88 return keys %groups;
89}
90
91
921;